Skip to content

Commit 7ed9213

Browse files
Allow2CEOruvnet
andcommitted
Add standardised bump-version.sh script
Unified version bumping across all Allow2 SDKs: ./scripts/bump-version.sh prerelease --preid alpha ./scripts/bump-version.sh [patch|minor|major] Handles language-specific version formats (npm, PEP 440, Gradle, .csproj, CMake, git tags), commits, and tags. Co-Authored-By: claude-flow <ruv@ruv.net>
1 parent ee861ed commit 7ed9213

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

scripts/bump-version.sh

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/usr/bin/env bash
2+
# bump-version.sh — Standardised version bumping for Allow2 Python SDK
3+
# Usage: ./scripts/bump-version.sh [prerelease|patch|minor|major] [--preid alpha|beta|rc]
4+
#
5+
# Python uses PEP 440: 2.0.0a1 (alpha), 2.0.0b1 (beta), 2.0.0rc1 (release candidate)
6+
#
7+
# Examples:
8+
# ./scripts/bump-version.sh prerelease --preid alpha # 2.0.0a1 → 2.0.0a2
9+
# ./scripts/bump-version.sh prerelease --preid beta # 2.0.0a2 → 2.0.0b1
10+
# ./scripts/bump-version.sh patch # 2.0.0a2 → 2.0.1
11+
# ./scripts/bump-version.sh minor # 2.0.1 → 2.1.0
12+
# ./scripts/bump-version.sh major # 2.1.0 → 3.0.0
13+
set -euo pipefail
14+
cd "$(dirname "$0")/.."
15+
16+
VERSION_FILE="pyproject.toml"
17+
BUMP="${1:-prerelease}"
18+
PREID=""
19+
if [[ "${2:-}" == "--preid" ]]; then PREID="${3:-alpha}"; fi
20+
21+
# Map preid to PEP 440 suffix
22+
pep440_suffix() {
23+
case "$1" in
24+
alpha) echo "a" ;;
25+
beta) echo "b" ;;
26+
rc) echo "rc" ;;
27+
*) echo "a" ;;
28+
esac
29+
}
30+
31+
# Read current version from pyproject.toml
32+
OLD=$(grep '^version = ' "$VERSION_FILE" | head -1 | sed 's/version = "\(.*\)"/\1/')
33+
34+
# Parse version: 2.0.0a1 → major=2 minor=0 patch=0 pre_type=a pre_num=1
35+
if [[ "$OLD" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(a|b|rc)?([0-9]+)?$ ]]; then
36+
MAJOR="${BASH_REMATCH[1]}"
37+
MINOR="${BASH_REMATCH[2]}"
38+
PATCH="${BASH_REMATCH[3]}"
39+
PRE_TYPE="${BASH_REMATCH[4]:-}"
40+
PRE_NUM="${BASH_REMATCH[5]:-}"
41+
else
42+
echo "Cannot parse version: $OLD" >&2; exit 1
43+
fi
44+
45+
case "$BUMP" in
46+
prerelease)
47+
SUFFIX=$(pep440_suffix "${PREID:-alpha}")
48+
if [[ "$PRE_TYPE" == "$SUFFIX" && -n "$PRE_NUM" ]]; then
49+
NEW="${MAJOR}.${MINOR}.${PATCH}${SUFFIX}$((PRE_NUM + 1))"
50+
else
51+
NEW="${MAJOR}.${MINOR}.${PATCH}${SUFFIX}1"
52+
fi
53+
;;
54+
patch)
55+
NEW="$MAJOR.$MINOR.$((PATCH + 1))"
56+
;;
57+
minor)
58+
NEW="$MAJOR.$((MINOR + 1)).0"
59+
;;
60+
major)
61+
NEW="$((MAJOR + 1)).0.0"
62+
;;
63+
*)
64+
echo "Usage: $0 [prerelease|patch|minor|major] [--preid alpha|beta|rc]" >&2
65+
exit 1
66+
;;
67+
esac
68+
69+
# Write back
70+
sed -i "s/^version = \"${OLD}\"/version = \"${NEW}\"/" "$VERSION_FILE"
71+
72+
echo "$OLD$NEW"
73+
git add "$VERSION_FILE"
74+
git commit -m "v$NEW"
75+
# Tag uses semver format for CI publish workflow
76+
TAG="v${MAJOR}.${MINOR}.${PATCH}"
77+
if [[ "$NEW" != "${MAJOR}.${MINOR}.${PATCH}" ]]; then
78+
# Convert PEP 440 back to semver for tag: 2.0.0a2 → v2.0.0-alpha.2
79+
TAG_PRE=$(echo "$NEW" | sed "s/${MAJOR}\.${MINOR}\.${PATCH}//")
80+
TAG_PRE=$(echo "$TAG_PRE" | sed 's/^a/-alpha./; s/^b/-beta./; s/^rc/-rc./')
81+
TAG="v${MAJOR}.${MINOR}.${PATCH}${TAG_PRE}"
82+
fi
83+
git tag "$TAG"
84+
echo "Tagged $TAG — push with: git push origin master --tags"

0 commit comments

Comments
 (0)