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