95 lines
2.9 KiB
Bash
Executable File
95 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# CI script to handle automatic version bumping
|
|
# Usage: scripts/ci-version-bump.sh <commit_message> [--no-push]
|
|
|
|
set -e
|
|
|
|
if [ -z "$1" ]; then
|
|
echo "Error: Commit message not provided"
|
|
exit 1
|
|
fi
|
|
|
|
LAST_COMMIT=$1
|
|
VERSION_BUMPED="false"
|
|
NO_PUSH=false
|
|
|
|
# Parse flags
|
|
for arg in "$@"; do
|
|
if [ "$arg" = "--no-push" ]; then
|
|
NO_PUSH=true
|
|
fi
|
|
done
|
|
|
|
# Automatic version bump based on commit type
|
|
if echo "$LAST_COMMIT" | grep -q "^✨ feat:"; then
|
|
echo "🎯 Feature commit detected - bumping MINOR version"
|
|
./scripts/version-bump.sh minor
|
|
VERSION_BUMPED="true"
|
|
elif echo "$LAST_COMMIT" | grep -q "^🐛 fix:"; then
|
|
echo "🐛 Fix commit detected - bumping PATCH version"
|
|
./scripts/version-bump.sh patch
|
|
VERSION_BUMPED="true"
|
|
elif echo "$LAST_COMMIT" | grep -q "BREAKING CHANGE"; then
|
|
echo "💥 Breaking change detected - bumping MAJOR version"
|
|
./scripts/version-bump.sh major
|
|
VERSION_BUMPED="true"
|
|
else
|
|
echo "⏭️ No automatic version bump needed"
|
|
fi
|
|
|
|
# Update swagger version regardless of bump
|
|
source VERSION
|
|
NEW_VERSION="$MAJOR.$MINOR.$PATCH${PRERELEASE:+-$PRERELEASE}"
|
|
|
|
# Cross-platform sed command
|
|
# Detect if we're on macOS (BSD sed) or Linux (GNU sed)
|
|
SED_CMD=""
|
|
if [[ "$(uname)" == "Darwin" ]]; then
|
|
# macOS - requires empty string after -i
|
|
SED_CMD="sed -i ''"
|
|
else
|
|
# Linux - standard GNU sed
|
|
SED_CMD="sed -i"
|
|
fi
|
|
|
|
$SED_CMD "s|// @version [0-9.]*|// @version $NEW_VERSION|" cmd/server/main.go
|
|
|
|
# Commit version changes if bumped
|
|
if [ "$VERSION_BUMPED" = "true" ]; then
|
|
git config --global user.name "CI Bot"
|
|
git config --global user.email "ci@arcodange.fr"
|
|
|
|
# Set up credentials using Gitea token
|
|
if [ -n "$PACKAGES_TOKEN" ]; then
|
|
git config --global credential.helper store
|
|
echo "https://${PACKAGES_TOKEN}@gitea.arcodange.lab" > ~/.git-credentials
|
|
fi
|
|
|
|
git add VERSION cmd/server/main.go README.md
|
|
if git commit -m "chore: auto version bump [skip ci]"; then
|
|
# Skip push if --no-push flag is set
|
|
if [ "$NO_PUSH" = true ]; then
|
|
echo "Skipping git push due to --no-push flag"
|
|
echo "Successfully bumped version to $NEW_VERSION (committed locally)"
|
|
exit 0
|
|
fi
|
|
|
|
# Try push with retry logic for race conditions
|
|
for i in 1 2 3; do
|
|
if git push; then
|
|
echo "Successfully bumped version to $NEW_VERSION"
|
|
exit 0
|
|
else
|
|
echo "Version bump push attempt $i failed, retrying..."
|
|
if [ $i -eq 3 ]; then
|
|
echo "Final version bump push attempt failed - another job may have bumped version"
|
|
git pull --rebase || true
|
|
git push || echo "Version bump recovery push also failed"
|
|
fi
|
|
sleep 2
|
|
fi
|
|
done
|
|
else
|
|
echo "No version changes to commit"
|
|
fi
|
|
fi |