- Add cliff.toml config for git-cliff with conventional commit parsing
- Create scripts/release.sh for automated version bumping
- Generate CHANGELOG.md from git history with semver tags (v1.0.0, v1.7.2)
- Release workflow: ./scripts/release.sh {major|minor|patch|VERSION}
52 lines
1.3 KiB
Bash
Executable File
52 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Release script: bump version, generate changelog, commit, and tag.
|
|
#
|
|
# Usage:
|
|
# ./scripts/release.sh <major|minor|patch>
|
|
# ./scripts/release.sh 2.0.0 # explicit version
|
|
#
|
|
set -euo pipefail
|
|
|
|
VERSION_FILE="version"
|
|
|
|
current_version=$(cat "$VERSION_FILE")
|
|
echo "Current version: $current_version"
|
|
|
|
IFS='.' read -r major minor patch <<< "$current_version"
|
|
|
|
case "${1:-}" in
|
|
major) new_version="$((major + 1)).0.0" ;;
|
|
minor) new_version="${major}.$((minor + 1)).0" ;;
|
|
patch) new_version="${major}.${minor}.$((patch + 1))" ;;
|
|
"")
|
|
echo "Usage: $0 <major|minor|patch|VERSION>"
|
|
exit 1
|
|
;;
|
|
*)
|
|
# Validate explicit semver
|
|
if [[ ! "$1" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "Error: '$1' is not a valid semver (X.Y.Z)"
|
|
exit 1
|
|
fi
|
|
new_version="$1"
|
|
;;
|
|
esac
|
|
|
|
echo "Bumping to: $new_version"
|
|
|
|
# Update version file
|
|
echo "$new_version" > "$VERSION_FILE"
|
|
|
|
# Generate changelog
|
|
git-cliff --tag "v${new_version}" --output CHANGELOG.md
|
|
|
|
# Commit and tag
|
|
git add "$VERSION_FILE" CHANGELOG.md
|
|
git commit -m "chore(release): v${new_version}"
|
|
git tag "v${new_version}"
|
|
|
|
echo ""
|
|
echo "Released v${new_version}"
|
|
echo "Don't forget to push: git push && git push --tags"
|