Files
client/increment_and_commit.sh
2026-04-17 16:52:51 -04:00

117 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# increment_and_commit.sh
#
# Automates version bumping based on git tags.
# Git tag is the authoritative source of truth.
#
# Usage:
# ./increment_and_commit.sh "Your commit message here" # Bump patch (default)
# ./increment_and_commit.sh --minor "Your commit message" # Bump minor
# ./increment_and_commit.sh --major "Your commit message" # Bump major
#
# This script coordinates version updates across all files in the project
set -e
VERSION_FILE="www/js/version.json"
BUMP_TYPE="patch"
COMMIT_MSG=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--minor)
BUMP_TYPE="minor"
shift
;;
--major)
BUMP_TYPE="major"
shift
;;
--patch)
BUMP_TYPE="patch"
shift
;;
-*|--*)
echo "Unknown option: $1"
echo "Usage: $0 [--major|--minor|--patch] [commit message]"
exit 1
;;
*)
COMMIT_MSG="$1"
shift
;;
esac
done
# Get the latest git tag (authoritative version)
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
echo "Latest tag: $LATEST_TAG"
# Parse version components
VERSION=${LATEST_TAG#v} # Remove 'v' prefix
MAJOR=$(echo "$VERSION" | cut -d. -f1)
MINOR=$(echo "$VERSION" | cut -d. -f2)
PATCH=$(echo "$VERSION" | cut -d. -f3)
# Increment version based on bump type
case $BUMP_TYPE in
major)
MAJOR=$((MAJOR + 1))
MINOR=0
PATCH=0
;;
minor)
MINOR=$((MINOR + 1))
PATCH=0
;;
patch)
PATCH=$((PATCH + 1))
;;
esac
NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}"
NEW_TAG="v${NEW_VERSION}"
echo "New version: $NEW_TAG ($BUMP_TYPE bump)"
# Prompt for commit message if not provided
if [ -z "$COMMIT_MSG" ]; then
echo ""
echo "Enter commit message (or press Enter for default: \"Release $NEW_TAG\"):"
read -r COMMIT_MSG
if [ -z "$COMMIT_MSG" ]; then
COMMIT_MSG="Release $NEW_TAG"
fi
fi
echo "Commit message: $COMMIT_MSG"
# Update version.json
cat > "$VERSION_FILE" << EOF
{
"VERSION": "$NEW_TAG",
"VERSION_NUMBER": "$NEW_VERSION",
"BUILD_DATE": "$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")"
}
EOF
echo "Updated $VERSION_FILE"
# Stage all changes (version file + any other modified/new files)
git add .
# Commit with the provided message
git commit -m "$COMMIT_MSG"
# Create new tag
git tag "$NEW_TAG"
echo ""
echo "✅ Committed and tagged: $NEW_TAG"
echo ""
# Auto-push to remote
git push origin master --tags
echo "✅ Pushed to remote"