Files
dance-lessons-coach/scripts/version-bump.sh
Gabriel Radureau c8b0dbd0a1
Some checks failed
CI/CD Pipeline / CI Pipeline (push) Failing after 16m21s
feat: automated version badge updates and CI/CD improvements
2026-04-06 19:07:02 +02:00

154 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# DanceLessonsCoach Version Bump Script
# Usage: ./scripts/version-bump.sh [major|minor|patch|pre|release]
set -e
# Load current version
VERSION_FILE="VERSION"
if [ ! -f "$VERSION_FILE" ]; then
echo "❌ Version file not found: $VERSION_FILE"
exit 1
fi
# Source version variables
source "$VERSION_FILE"
# Validate bump type
BUMP_TYPE="${1:-patch}"
case "$BUMP_TYPE" in
major|minor|patch|pre|release)
echo "📋 Bumping version: $BUMP_TYPE"
;;
*)
echo "❌ Invalid bump type: $BUMP_TYPE"
echo "Usage: $0 [major|minor|patch|pre|release]"
exit 1
;;
esac
# Bump version function
bump_version() {
local type="$1"
case "$type" in
major)
MAJOR=$((MAJOR + 1))
MINOR=0
PATCH=0
PRERELEASE=""
;;
minor)
MINOR=$((MINOR + 1))
PATCH=0
PRERELEASE=""
;;
patch)
PATCH=$((PATCH + 1))
PRERELEASE=""
;;
pre)
if [ -z "$PRERELEASE" ]; then
PRERELEASE="alpha.1"
else
# Extract number and increment
if [[ "$PRERELEASE" =~ ^(alpha|beta|rc)\.([0-9]+)$ ]]; then
PRE_TYPE="${BASH_REMATCH[1]}"
PRE_NUM="${BASH_REMATCH[2]}"
PRERELEASE="$PRE_TYPE.$((PRE_NUM + 1))"
else
PRERELEASE="alpha.1"
fi
fi
;;
release)
PRERELEASE=""
;;
esac
}
# Bump the version
bump_version "$BUMP_TYPE"
# Calculate new version
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
if [ -n "$PRERELEASE" ]; then
NEW_VERSION="$NEW_VERSION-$PRERELEASE"
fi
echo "🔢 Current version: $MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}"
echo "🔜 New version: $NEW_VERSION"
# Update VERSION file
cat > "$VERSION_FILE" << VERSION_EOF
# DanceLessonsCoach Version
# Current Version (Semantic Versioning)
MAJOR=$MAJOR
MINOR=$MINOR
PATCH=$PATCH
PRERELEASE="$PRERELEASE"
# Auto-generated fields (do not edit manually)
BUILD_DATE=""
GIT_COMMIT=""
GIT_TAG=""
# Version Format: {MAJOR}.{MINOR}.{PATCH}-{PRERELEASE}
# Example: 1.0.0, 1.0.0-alpha.1, 2.3.4-beta.2
# Semantic Versioning Rules:
# - MAJOR: Breaking changes, major features
# - MINOR: Backwards-compatible features
# - PATCH: Backwards-compatible bug fixes
# - PRERELEASE: alpha, beta, rc (pre-release versions)
# Changelog Reference:
# See AGENT_CHANGELOG.md for version history
VERSION_EOF
echo "✅ Updated VERSION file"
# Update main.go Swagger version (cross-platform)
MAIN_GO="cmd/server/main.go"
if [ -f "$MAIN_GO" ]; then
# Create temporary file
TMP_FILE=$(mktemp)
# Use awk for cross-platform sed replacement
awk -v new_version="$NEW_VERSION" '
{
if ($0 ~ /^\/\/ @version [0-9.]+/) {
print "// @version " new_version
} else {
print $0
}
}' "$MAIN_GO" > "$TMP_FILE"
# Replace original file
mv "$TMP_FILE" "$MAIN_GO"
echo "✅ Updated Swagger version in main.go"
fi
# Update README.md version badge
README_MD="README.md"
if [ -f "$README_MD" ]; then
# Create temporary file
TMP_FILE=$(mktemp)
# Use awk to update version badge
awk -v new_version="$NEW_VERSION" '{
if ($0 ~ /Version.*badge.*version/) {
print "[![Version](https://img.shields.io/badge/version-" new_version "-blue.svg)](https://gitea.arcodange.fr/arcodange/DanceLessonsCoach/releases)"
} else {
print $0
}
}' "$README_MD" > "$TMP_FILE"
# Replace original file
mv "$TMP_FILE" "$README_MD"
echo "✅ Updated version badge in README.md"
fi
echo "🎉 Version bump complete: $NEW_VERSION"