1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
#!/bin/sh
#
# Bump the canonical zyginit version.
#
# Usage: ./scripts/bump-version.sh <new-version>
#
# Rewrites in lock-step:
# - reef.toml (canonical)
# - tools/zygctl/reef.toml
# - src/version.reef (regenerated)
# - tools/zygctl/src/version.reef (regenerated)
# - tools/sysv-wrapper/version.h (regenerated)
#
# Does NOT auto-commit. Review with `hg diff` and commit by hand.
#
# ----------------------------------------------------------------------------
# Helpers for regenerating templated files.
# ----------------------------------------------------------------------------
gen_reef_module() {
project="$1"
path="$2"
version="$3"
cat > "$path" <<EOF
/******************************************************************************
__ ____ __
/ / ___ ____ _/ __/_____________ _/ /__
/ / / _ \\/ __ \`/ /_/ ___/ ___/ __ \`/ / _ \\
/ /___/ __/ /_/ / __(__ ) /__/ /_/ / / __/
/_____/\\___/\\__,_/_/ /____/\\___/\\__,_/_/\\___/
(C)opyright 2025-2026, Leafscale, LLC - https://www.leafscale.com
Project: $project
Filename: version.reef
Authors: Chris Tusa <chris.tusa@leafscale.com>
License: <see LICENSE file included with this source code>
Description: Generated version constant. Do not edit by hand — regenerated
by scripts/bump-version.sh.
******************************************************************************/
module version
export
fn VERSION(): string
end export
fn VERSION(): string
return "$version"
end VERSION
end module
EOF
}
gen_c_header() {
path="$1"
version="$2"
cat > "$path" <<EOF
/******************************************************************************
__ ____ __
/ / ___ ____ _/ __/_____________ _/ /__
/ / / _ \\/ __ \`/ /_/ ___/ ___/ __ \`/ / _ \\
/ /___/ __/ /_/ / __(__ ) /__/ /_/ / / __/
/_____/\\___/\\__,_/_/ /____/\\___/\\__,_/_/\\___/
(C)opyright 2025-2026, Leafscale, LLC - https://www.leafscale.com
Project: zyginit
Filename: version.h
Authors: Chris Tusa <chris.tusa@leafscale.com>
License: <see LICENSE file included with this source code>
Description: Generated version constant. Do not edit by hand — regenerated
by scripts/bump-version.sh.
******************************************************************************/
#ifndef ZYGINIT_VERSION_H
#define ZYGINIT_VERSION_H
#define ZYGINIT_VERSION "$version"
#endif
EOF
}
set -e
# This script uses GNU sed extensions (-i without backup suffix, 0,/addr/
# first-match range). Bumps are cut on a Linux dev host, not on Hammerhead;
# fail fast if invoked elsewhere so the breakage isn't a cryptic sed error.
case "$(uname -s)" in
Linux) ;;
*)
echo "error: bump-version.sh requires GNU sed (Linux dev host)" >&2
echo " detected: $(uname -s)" >&2
exit 1
;;
esac
if [ $# -ne 1 ]; then
echo "usage: $0 <new-version>" >&2
exit 1
fi
NEW="$1"
# Validate semver shape (no pre-release suffix yet).
echo "$NEW" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' || {
echo "error: '$NEW' is not in MAJOR.MINOR.PATCH form" >&2
exit 1
}
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
ROOT=$(dirname "$SCRIPT_DIR")
cd "$ROOT"
CURRENT=$(grep '^version' reef.toml | head -1 | sed 's/.*"\([^"]*\)".*/\1/')
if [ -z "$CURRENT" ]; then
echo "error: could not read current version from reef.toml" >&2
exit 1
fi
if [ "$CURRENT" = "$NEW" ]; then
echo "error: version is already $NEW" >&2
exit 1
fi
echo "zyginit: bumping $CURRENT -> $NEW"
# 1. Root reef.toml — sed in place. Match only the first 'version = "..."'
# in the [package] table (top of file).
# $NEW is safe inside the substitution: the semver regex above guarantees
# digits + dots only — no '/' or '&' to misinterpret.
echo " rewriting reef.toml"
sed -i "0,/^version = \"[^\"]*\"/s//version = \"$NEW\"/" reef.toml
# 2. tools/zygctl/reef.toml
# $NEW is safe inside the substitution: the semver regex above guarantees
# digits + dots only — no '/' or '&' to misinterpret.
echo " rewriting tools/zygctl/reef.toml"
sed -i "0,/^version = \"[^\"]*\"/s//version = \"$NEW\"/" tools/zygctl/reef.toml
# 3. src/version.reef — full regenerate.
echo " regenerating src/version.reef"
gen_reef_module zyginit src/version.reef "$NEW"
# 4. tools/zygctl/src/version.reef — full regenerate.
echo " regenerating tools/zygctl/src/version.reef"
gen_reef_module zygctl tools/zygctl/src/version.reef "$NEW"
# 5. tools/sysv-wrapper/version.h — full regenerate.
echo " regenerating tools/sysv-wrapper/version.h"
gen_c_header tools/sysv-wrapper/version.h "$NEW"
echo
echo "summary of changes:"
hg diff --stat || true
echo
echo "review with 'hg diff' and commit:"
echo " hg ci -m 'Bump version to $NEW'"
|