release script
This commit is contained in:
parent
d7f844d566
commit
f4d1b58bd8
2 changed files with 64 additions and 0 deletions
1
VERSION
Normal file
1
VERSION
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
0.0.2
|
||||||
63
scripts/release.sh
Executable file
63
scripts/release.sh
Executable file
|
|
@ -0,0 +1,63 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
cd "$ROOT_DIR"
|
||||||
|
|
||||||
|
VERSION_FILE="VERSION"
|
||||||
|
BRANCH="main"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 patch|minor|major" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
BUMP="${1:-}"
|
||||||
|
case "$BUMP" in
|
||||||
|
patch | minor | major) ;;
|
||||||
|
*) usage ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [[ "$(git rev-parse --abbrev-ref HEAD)" != "$BRANCH" ]]; then
|
||||||
|
echo "Error: releases must be cut from $BRANCH" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n "$(git status --porcelain)" ]]; then
|
||||||
|
echo "Error: working tree is not clean; commit or stash first" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
git fetch origin "$BRANCH"
|
||||||
|
if ! git merge-base --is-ancestor "origin/$BRANCH" HEAD; then
|
||||||
|
echo "Error: $BRANCH is behind origin/$BRANCH; pull first" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
CURRENT="$(<"$VERSION_FILE")"
|
||||||
|
if [[ ! "$CURRENT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||||
|
echo "Error: $VERSION_FILE contains '$CURRENT', expected X.Y.Z" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IFS=. read -r MAJOR MINOR PATCH <<<"$CURRENT"
|
||||||
|
case "$BUMP" in
|
||||||
|
major) NEW="$((MAJOR + 1)).0.0" ;;
|
||||||
|
minor) NEW="$MAJOR.$((MINOR + 1)).0" ;;
|
||||||
|
patch) NEW="$MAJOR.$MINOR.$((PATCH + 1))" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# docker-publish.yml only runs tag builds for v* refs, so the tag needs the prefix.
|
||||||
|
TAG="v$NEW"
|
||||||
|
if git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then
|
||||||
|
echo "Error: tag $TAG already exists" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "$NEW" >"$VERSION_FILE"
|
||||||
|
git add "$VERSION_FILE"
|
||||||
|
git commit -m "Release $NEW"
|
||||||
|
git tag -a "$TAG" -m "Release $NEW"
|
||||||
|
git push origin "$BRANCH" "$TAG"
|
||||||
|
|
||||||
|
echo "Released $CURRENT -> $NEW (tag $TAG)"
|
||||||
Loading…
Add table
Add a link
Reference in a new issue