87 lines
2.8 KiB
Bash
87 lines
2.8 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
# Bump the project version and push images to the registry.
|
|
#
|
|
# Usage:
|
|
# ./release.sh
|
|
#
|
|
# The current version is stored in VERSION (next to this script).
|
|
# You will be asked whether to bump major, minor, or patch.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
VERSION_FILE="${SCRIPT_DIR}/VERSION"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Read current version
|
|
# ---------------------------------------------------------------------------
|
|
if [[ ! -f "${VERSION_FILE}" ]]; then
|
|
echo "0.0.0" > "${VERSION_FILE}"
|
|
fi
|
|
|
|
CURRENT="$(cat "${VERSION_FILE}")"
|
|
# Strip leading 'v' for arithmetic
|
|
VERSION="${CURRENT#v}"
|
|
|
|
IFS='.' read -r MAJOR MINOR PATCH <<< "${VERSION}"
|
|
|
|
echo "============================================"
|
|
echo " BanGUI — Release"
|
|
echo " Current version: v${MAJOR}.${MINOR}.${PATCH}"
|
|
echo "============================================"
|
|
echo ""
|
|
echo "How would you like to bump the version?"
|
|
echo " 1) patch (v${MAJOR}.${MINOR}.${PATCH} → v${MAJOR}.${MINOR}.$((PATCH + 1)))"
|
|
echo " 2) minor (v${MAJOR}.${MINOR}.${PATCH} → v${MAJOR}.$((MINOR + 1)).0)"
|
|
echo " 3) major (v${MAJOR}.${MINOR}.${PATCH} → v$((MAJOR + 1)).0.0)"
|
|
echo ""
|
|
read -rp "Enter choice [1/2/3]: " CHOICE
|
|
|
|
case "${CHOICE}" in
|
|
1) NEW_TAG="v${MAJOR}.${MINOR}.$((PATCH + 1))" ;;
|
|
2) NEW_TAG="v${MAJOR}.$((MINOR + 1)).0" ;;
|
|
3) NEW_TAG="v$((MAJOR + 1)).0.0" ;;
|
|
*)
|
|
echo "Invalid choice. Aborting." >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo ""
|
|
echo "New version: ${NEW_TAG}"
|
|
read -rp "Confirm? [y/N]: " CONFIRM
|
|
if [[ ! "${CONFIRM}" =~ ^[yY]$ ]]; then
|
|
echo "Aborted."
|
|
exit 0
|
|
fi
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Write new version
|
|
# ---------------------------------------------------------------------------
|
|
echo "${NEW_TAG}" > "${VERSION_FILE}"
|
|
echo "Version file updated → ${VERSION_FILE}"
|
|
|
|
# Keep frontend/package.json in sync so __APP_VERSION__ matches Docker/VERSION.
|
|
FRONT_VERSION="${NEW_TAG#v}"
|
|
FRONT_PKG="${SCRIPT_DIR}/../frontend/package.json"
|
|
sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"${FRONT_VERSION}\"/" "${FRONT_PKG}"
|
|
echo "frontend/package.json version updated → ${FRONT_VERSION}"
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Git tag
|
|
# ---------------------------------------------------------------------------
|
|
cd "${SCRIPT_DIR}/.."
|
|
git add Docker/VERSION frontend/package.json
|
|
git commit -m "chore: release ${NEW_TAG}"
|
|
git tag -a "${NEW_TAG}" -m "Release ${NEW_TAG}"
|
|
git push origin HEAD
|
|
git push origin "${NEW_TAG}"
|
|
echo "Git tag ${NEW_TAG} created and pushed."
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Push
|
|
# ---------------------------------------------------------------------------
|
|
bash "${SCRIPT_DIR}/push.sh" "${NEW_TAG}"
|
|
bash "${SCRIPT_DIR}/push.sh"
|