Files
stack/scripts/version-bump.sh
Jason Woltje 635fd7af73
Some checks failed
ci/woodpecker/push/api Pipeline failed
ci/woodpecker/push/web Pipeline failed
ci/woodpecker/push/orchestrator Pipeline failed
fix: enforce alpha versioning (0.0.x), delete erroneous 0.1.x releases
Deleted v0.1.0, v0.1.1, v0.1.3 tags and Gitea releases — project is
alpha and should never have crossed 0.1.0. All package.json files
synced to 0.0.20. Added version-bump.sh script that hard-rejects any
version >= 0.1.0. Added versioning hard gate to AGENTS.md so agents
cannot repeat the mistake.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 19:21:36 -06:00

70 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# version-bump.sh — Bump version across all workspace packages
#
# Usage:
# scripts/version-bump.sh <new-version>
# scripts/version-bump.sh 0.0.21
#
# Enforces:
# - Version MUST be 0.0.x (alpha constraint)
# - All package.json files are updated atomically
# - Rejects 0.1.0+ until explicitly unlocked
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
if [[ $# -ne 1 ]]; then
echo "Usage: $0 <version>"
echo "Example: $0 0.0.21"
exit 1
fi
NEW_VERSION="$1"
# Hard gate: alpha constraint (0.0.x only)
if [[ ! "$NEW_VERSION" =~ ^0\.0\.[0-9]+$ ]]; then
echo "ERROR: Version must be 0.0.x (alpha). Got: $NEW_VERSION"
echo ""
echo "This project is in ALPHA. Versions >= 0.1.0 are not allowed."
echo "If this constraint needs to change, update AGENTS.md and this script."
exit 1
fi
# Patch number must be > 0
PATCH="${NEW_VERSION##0.0.}"
if [[ "$PATCH" -lt 1 ]]; then
echo "ERROR: Patch version must be >= 1. Got: $NEW_VERSION"
exit 1
fi
# Find all package.json files in the monorepo
PACKAGE_FILES=(
"$REPO_ROOT/package.json"
)
for dir in "$REPO_ROOT"/apps/*/package.json "$REPO_ROOT"/packages/*/package.json; do
[[ -f "$dir" ]] && PACKAGE_FILES+=("$dir")
done
echo "Bumping all packages to $NEW_VERSION"
echo ""
for pkg in "${PACKAGE_FILES[@]}"; do
REL_PATH="${pkg#"$REPO_ROOT"/}"
OLD_VERSION=$(grep -o '"version": "[^"]*"' "$pkg" | head -1 | cut -d'"' -f4)
# Use node for reliable JSON editing (preserves formatting better than sed)
node -e "
const fs = require('fs');
const path = '$pkg';
const raw = fs.readFileSync(path, 'utf8');
const updated = raw.replace(/\"version\": \"[^\"]*\"/, '\"version\": \"$NEW_VERSION\"');
fs.writeFileSync(path, updated);
"
echo " $REL_PATH: $OLD_VERSION -> $NEW_VERSION"
done
echo ""
echo "Done. $NEW_VERSION applied to ${#PACKAGE_FILES[@]} packages."
echo "Next steps: commit, tag (v$NEW_VERSION), push."