#!/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"