|

chore: add bump-version.sh script

chore: add bump-version.sh script

Lock-step version bump for reef.toml + src/main.reef fn version().
Adapted from zyginit/scripts/bump-version.sh; semver-validated, GNU-sed
(Linux dev host) guarded, does not auto-commit.
Author: Chris Tusa <chris.tusa@leafscale.com>
Date: Jul 17, 2026 19:22
Changeset: 285ad8675b2922e74581281f15c713f81d5abb0d
Branch: default

Changed files:

Diff

diff -r 88dbd80325ea -r 285ad8675b29 scripts/bump-version.sh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/bump-version.sh	Fri Jul 17 19:22:03 2026 -0500
@@ -0,0 +1,86 @@
+#!/bin/sh
+#
+# Bump the canonical Coral version.
+#
+# Usage: ./scripts/bump-version.sh <new-version>
+#
+# Rewrites in lock-step:
+#   - reef.toml        (canonical; read by scripts/make-release.sh and CI)
+#   - src/main.reef    (the fn version() runtime constant)
+#
+# Does NOT auto-commit or tag. Review with `hg diff`, then commit and tag
+# by hand (see the printed instructions).
+#
+# Modeled on zyginit/scripts/bump-version.sh.
+#
+
+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).
+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 "coral: bumping $CURRENT -> $NEW"
+
+# 1. reef.toml — rewrite the first 'version = "..."' (the [package] table).
+# $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. src/main.reef — rewrite the return inside `fn version()` only, so no
+#    other string-returning function is touched.
+echo "  rewriting src/main.reef (fn version)"
+sed -i "/^fn version()/,/^end version/ s/return \"[^\"]*\"/return \"$NEW\"/" src/main.reef
+
+# Sanity check: both sources now agree on $NEW.
+TOML_V=$(grep '^version' reef.toml | head -1 | sed 's/.*"\([^"]*\)".*/\1/')
+MAIN_V=$(sed -n '/^fn version()/,/^end version/ s/.*return "\([^"]*\)".*/\1/p' src/main.reef | head -1)
+if [ "$TOML_V" != "$NEW" ] || [ "$MAIN_V" != "$NEW" ]; then
+    echo "error: post-bump mismatch (reef.toml='$TOML_V', main.reef='$MAIN_V', expected '$NEW')" >&2
+    exit 1
+fi
+
+echo
+echo "summary of changes:"
+hg diff --stat reef.toml src/main.reef || true
+echo
+echo "review with 'hg diff', then commit and tag:"
+echo "  hg ci -m 'Bump version to $NEW'"
+echo "  hg tag v$NEW"