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"