chore(release): enhance version format validation to support prerelease tags

This commit is contained in:
Julian Pawlowski 2025-12-25 22:48:01 +00:00
parent 15e09fa210
commit e851cb0670
3 changed files with 23 additions and 14 deletions

View file

@ -51,8 +51,8 @@ echo "Subject: $COMMIT_SUBJECT"
echo "Date: $COMMIT_DATE"
echo ""
# Check if commit is in any version tag (v*.*.*)
TAGS=$(git tag --contains "$COMMIT" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+' || true)
# Check if commit is in any version tag (vX.Y.Z or vX.Y.ZbN)
TAGS=$(git tag --contains "$COMMIT" | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(b[0-9]+)?$' || true)
if [[ -z $TAGS ]]; then
printf '%b✓ NOT RELEASED%b\n' "$GREEN" "$NC"

View file

@ -9,9 +9,10 @@
# ./scripts/release/prepare [VERSION|--suggest]
#
# Examples:
# ./scripts/release/prepare --suggest # Show version suggestion
# ./scripts/release/prepare 0.3.0 # Bump to version 0.3.0
# ./scripts/release/prepare 1.0.0 # Bump to version 1.0.0
# ./scripts/release/prepare --suggest # Show version suggestion
# ./scripts/release/prepare 0.3.0 # Bump to version 0.3.0
# ./scripts/release/prepare 1.0.0 # Bump to version 1.0.0
# ./scripts/release/prepare 0.25.0b0 # Bump to beta version 0.25.0b0
set -euo pipefail
@ -42,15 +43,15 @@ fi
# Parse version argument
VERSION="${1:-}"
if [[ -z $VERSION ]]; then
die "No version specified.\n\nUsage: $0 VERSION\n\nExamples:\n $0 0.3.0 # Bump to version 0.3.0\n $0 1.0.0 # Bump to version 1.0.0"
die "No version specified.\n\nUsage: $0 VERSION\n\nExamples:\n $0 0.3.0 # Bump to version 0.3.0\n $0 1.0.0 # Bump to version 1.0.0\n $0 0.25.0b0 # Bump to beta version 0.25.0b0"
fi
# Strip 'v' prefix if present
VERSION="${VERSION#v}"
# Validate version format (X.Y.Z)
if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
die "Invalid version format: $VERSION\nExpected format: X.Y.Z (e.g., 0.3.0, 1.0.0)"
# Validate version format (X.Y.Z or X.Y.ZbN for prerelease/beta)
if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(b[0-9]+)?$'; then
die "Invalid version format: $VERSION\nExpected format: X.Y.Z or X.Y.ZbN (e.g., 0.3.0, 1.0.0, 0.25.0b0)"
fi
TAG="v$VERSION"

View file

@ -55,12 +55,20 @@ log_header "Analyzing commits since $FROM_TAG"
echo ""
# Parse current version (from the tag we're analyzing from)
CURRENT_VERSION="${FROM_TAG#v}"
MAJOR=$(echo "$CURRENT_VERSION" | cut -d. -f1)
MINOR=$(echo "$CURRENT_VERSION" | cut -d. -f2)
PATCH=$(echo "$CURRENT_VERSION" | cut -d. -f3)
parse_version() {
local version="$1"
printf "Current released version: %bv%s.%s.%s%b\n" "$BOLD" "$MAJOR" "$MINOR" "$PATCH" "$NC"
if [[ $version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(b[0-9]+)?$ ]]; then
echo "${BASH_REMATCH[1]} ${BASH_REMATCH[2]} ${BASH_REMATCH[3]} ${BASH_REMATCH[4]}"
else
die "Unsupported version format: $version\nExpected formats: X.Y.Z or X.Y.ZbN (e.g., 0.3.0, 1.0.0, 0.25.0b0)"
fi
}
CURRENT_VERSION="${FROM_TAG#v}"
read -r MAJOR MINOR PATCH PRERELEASE <<< "$(parse_version "$CURRENT_VERSION")"
printf "Current released version: %bv%s.%s.%s%s%b\n" "$BOLD" "$MAJOR" "$MINOR" "$PATCH" "$PRERELEASE" "$NC"
if [[ $MANIFEST_VERSION != "$CURRENT_VERSION" ]]; then
log_warning "Manifest.json version: $MANIFEST_VERSION (not yet tagged)"
fi