#!/bin/bash # versionbump.sh - Script to bump version numbers in the VERSION file and update all relevant files # Usage: ./versionbump.sh [major|minor|patch|set VERSION] set -e VERSION_FILE="VERSION" DOCKER_COMPOSE_FILE="docker-compose.yml" # Check if VERSION file exists if [ ! -f "$VERSION_FILE" ]; then echo "Error: $VERSION_FILE does not exist." exit 1 fi # Read current version CURRENT_VERSION=$(cat "$VERSION_FILE") echo "Current version: $CURRENT_VERSION" # Function to update version in all necessary files update_version_everywhere() { NEW_VERSION=$1 # 1. Update VERSION file echo "$NEW_VERSION" > "$VERSION_FILE" echo "Updated $VERSION_FILE to $NEW_VERSION" # 2. Log the version change echo "$(date): Version changed from $CURRENT_VERSION to $NEW_VERSION" >> version_history.log # 3. Update version in console log messages # This ensures the version is visible in logs when the app starts sed -i.bak "s/print(f\"Connected to PostgreSQL at/print(f\"Ploughshares v$NEW_VERSION - Connected to PostgreSQL at/" docker/ploughshares/app.py rm -f docker/ploughshares/app.py.bak echo "Updated version in app.py console logs" # 4. Update version in docker-compose.yml sed -i.bak "s/APP_VERSION=.*/APP_VERSION=$NEW_VERSION/" "$DOCKER_COMPOSE_FILE" rm -f "$DOCKER_COMPOSE_FILE.bak" echo "Updated version in $DOCKER_COMPOSE_FILE" echo "Version update complete! New version: $NEW_VERSION" echo "Remember to rebuild and restart the application for changes to take effect." } # Process command if [ "$1" = "set" ]; then if [ -z "$2" ]; then echo "Error: No version specified. Usage: $0 set VERSION" exit 1 fi NEW_VERSION="$2" echo "Setting version to: $NEW_VERSION" update_version_everywhere "$NEW_VERSION" exit 0 fi # Split version into components IFS='.' read -r MAJOR MINOR PATCH <<< "$CURRENT_VERSION" # Check which part to bump case "$1" in major) MAJOR=$((MAJOR + 1)) MINOR=0 PATCH=0 ;; minor) MINOR=$((MINOR + 1)) PATCH=0 ;; patch) PATCH=$((PATCH + 1)) ;; *) echo "Usage: $0 [major|minor|patch|set VERSION]" echo "Examples:" echo " $0 minor # Bump minor version" echo " $0 set 1.2.3 # Set specific version" exit 1 ;; esac # Create new version string NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}" echo "Bumping to version: $NEW_VERSION" # Update version in all necessary files update_version_everywhere "$NEW_VERSION"