From ee9c0edf8a0f9da9c1ca90b7be4493f8c07b8b41 Mon Sep 17 00:00:00 2001 From: Menno van Leeuwen Date: Fri, 23 May 2025 15:16:59 +0200 Subject: [PATCH] Add release script for automatic version tagging --- bin/scripts/release.sh | 76 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100755 bin/scripts/release.sh diff --git a/bin/scripts/release.sh b/bin/scripts/release.sh new file mode 100755 index 0000000..6f0596c --- /dev/null +++ b/bin/scripts/release.sh @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +source bin/helpers/func.sh + +printfe "%s\n" "green" "SSH Tunnel Manager Release Script" +printfe "%s\n" "normal" "===============================" + +# Check if git is installed +if ! command -v git &> /dev/null; then + printfe "%s\n" "red" "Error: git is not installed" + exit 1 +fi + +# Check if we're in a git repository +if ! git rev-parse --is-inside-work-tree &> /dev/null; then + printfe "%s\n" "red" "Error: Not in a git repository" + exit 1 +fi + +# Get the latest tag or default to v0.0.0 if no tags exist +LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") + +# Parse the version number +if [[ $LATEST_TAG =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + MAJOR=${BASH_REMATCH[1]} + MINOR=${BASH_REMATCH[2]} + PATCH=${BASH_REMATCH[3]} +else + printfe "%s\n" "red" "Error: Could not parse latest tag: $LATEST_TAG" + exit 1 +fi + +# Calculate the next patch version +NEXT_PATCH=$((PATCH + 1)) +NEXT_VERSION="v$MAJOR.$MINOR.$NEXT_PATCH" + +# Display current version and suggested next version +printfe "%s" "cyan" "Current version: " +printfe "%s\n" "yellow" "$LATEST_TAG" false +printfe "%s" "cyan" "Suggested next version: " +printfe "%s\n" "yellow" "$NEXT_VERSION" false + +# Ask for confirmation or custom version +read -p "Accept suggested version? (y/n) " ACCEPT +if [[ $ACCEPT != "y" && $ACCEPT != "Y" ]]; then + read -p "Enter custom version (format vX.Y.Z): " CUSTOM_VERSION + if [[ $CUSTOM_VERSION =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + NEXT_VERSION=$CUSTOM_VERSION + else + printfe "%s\n" "red" "Error: Invalid version format. Must be vX.Y.Z where X, Y, Z are numbers." + exit 1 + fi +fi + +printfe "%s" "cyan" "Creating and pushing tag: " +printfe "%s\n" "yellow" "$NEXT_VERSION" false + +# Make sure we have the latest changes +printfe "%s\n" "cyan" "Fetching latest tags..." +log_and_run git fetch --tags + +# Create the new tag +printfe "%s\n" "cyan" "Creating new tag..." +log_and_run git tag "$NEXT_VERSION" + +# Push the new tag +printfe "%s\n" "cyan" "Pushing new tag..." +log_and_run git push origin "$NEXT_VERSION" + +# Update the latest tag +printfe "%s\n" "cyan" "Updating 'latest' tag..." +log_and_run git tag -f latest "$NEXT_VERSION" +log_and_run git push -f origin latest + +printfe "%s\n" "green" "Successfully tagged and pushed version $NEXT_VERSION" +printfe "%s\n" "cyan" "Also updated 'latest' tag to point to $NEXT_VERSION" \ No newline at end of file