Files
raisfast/scripts/release.sh
T
2026-05-23 08:36:41 +08:00

92 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
REMOTE="github"
BRANCH="master"
REMOTE_BRANCH="main"
usage() {
echo "Usage: $0 <command> [options]"
echo ""
echo "Commands:"
echo " commit <message> Commit and push"
echo " release <version> [message] Bump version, commit, tag, push"
echo ""
echo "Examples:"
echo " $0 commit \"fix: some bug\""
echo " $0 release 0.3.0"
echo " $0 release 0.3.0 \"add new feature\""
exit 1
}
current_version() {
grep '^version' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/'
}
bump_version() {
local new_ver="$1"
sed -i '' "s/^version = \".*\"/version = \"$new_ver\"/" Cargo.toml
echo "Version bumped: $(current_version) -> $new_ver"
}
cmd_commit() {
local msg="$1"
git add -A
if git diff --cached --quiet; then
echo "Nothing to commit."
return
fi
git commit -m "$msg"
git push "$REMOTE" "$BRANCH:$REMOTE_BRANCH"
echo "Pushed to $REMOTE:$REMOTE_BRANCH"
}
cmd_release() {
local ver="$1"
local msg="${2:-release v$ver}"
local tag="v$ver"
if git tag -l "$tag" | grep -q .; then
echo "Tag $tag already exists!"
exit 1
fi
git add -A
if ! git diff --cached --quiet; then
echo "Staged changes detected, committing first..."
git commit -m "$msg"
fi
bump_version "$ver"
if command -v git-cliff &>/dev/null; then
git-cliff --tag "$tag" -o CHANGELOG.md
echo "Changelog generated"
fi
git add -A
git commit -m "release: v$ver"
git tag "$tag"
git push "$REMOTE" "$BRANCH:$REMOTE_BRANCH"
git push "$REMOTE" "$tag"
echo "Released $tag and pushed to $REMOTE"
}
if [ $# -lt 1 ]; then
usage
fi
case "$1" in
commit)
[ $# -lt 2 ] && usage
cmd_commit "$2"
;;
release)
[ $# -lt 2 ] && usage
cmd_release "$2" "${3:-}"
;;
*)
usage
;;
esac