[DEPRECATED] Go implementation of plcbundle
at b94343e542bc77c7115f660f068af5d2c6b67943 202 lines 6.1 kB view raw
1#!/bin/bash 2 3set -e 4 5# Colors 6RED='\033[0;31m' 7GREEN='\033[0;32m' 8YELLOW='\033[1;33m' 9BLUE='\033[0;34m' 10NC='\033[0m' # No Color 11 12# Check if git is clean 13if [[ -n $(git status -s) ]]; then 14 echo -e "${RED}Error: Git working directory is not clean${NC}" 15 echo "Please commit or stash your changes first" 16 exit 1 17fi 18 19# Get current version from git tags 20CURRENT_VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0") 21 22# Remove 'v' prefix if present 23CURRENT_VERSION=${CURRENT_VERSION#v} 24 25# Parse version (supports semver with pre-release) 26# Format: MAJOR.MINOR.PATCH[-PRERELEASE] 27if [[ $CURRENT_VERSION =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)(-([a-zA-Z]+)\.?([0-9]+)?)?$ ]]; then 28 MAJOR="${BASH_REMATCH[1]}" 29 MINOR="${BASH_REMATCH[2]}" 30 PATCH="${BASH_REMATCH[3]}" 31 PRERELEASE="${BASH_REMATCH[5]}" # alpha, beta, rc, etc. 32 PRERELEASE_NUM="${BASH_REMATCH[6]}" # 1, 2, 3, etc. 33else 34 echo -e "${RED}Error: Could not parse version: ${CURRENT_VERSION}${NC}" 35 exit 1 36fi 37 38# Function to show usage 39show_usage() { 40 echo "Usage: $0 {major|minor|patch|alpha|beta|rc|pre|release} [--minor|--patch]" 41 echo "" 42 echo "Stable releases:" 43 echo " major Bump major version (x.0.0)" 44 echo " minor Bump minor version (0.x.0)" 45 echo " patch Bump patch version (0.0.x)" 46 echo "" 47 echo "Pre-releases:" 48 echo " alpha Create/bump alpha (0.x.0-alpha.1 by default)" 49 echo " beta Create/bump beta (0.x.0-beta.1 by default)" 50 echo " rc Create/bump RC (0.x.0-rc.1 by default)" 51 echo " pre Bump current pre-release number" 52 echo "" 53 echo "Combined (create pre-release with specific bump):" 54 echo " alpha --minor Bump minor and create alpha (0.x.0-alpha.1)" 55 echo " alpha --patch Bump patch and create alpha (0.0.x-alpha.1)" 56 echo " beta --minor Bump minor and create beta" 57 echo " rc --patch Bump patch and create rc" 58 echo "" 59 echo "Promotion:" 60 echo " release Remove pre-release suffix (promote to stable)" 61 echo "" 62 echo "Examples:" 63 echo " v0.4.26 → minor → v0.5.0" 64 echo " v0.4.26 → alpha --minor → v0.5.0-alpha.1" 65 echo " v0.4.26 → alpha --patch → v0.4.27-alpha.1" 66 echo " v0.5.0-alpha.1 → pre → v0.5.0-alpha.2" 67 echo " v0.5.0-alpha.2 → beta → v0.5.0-beta.1" 68 echo " v0.5.0-rc.1 → release → v0.5.0" 69 exit 1 70} 71 72# Parse optional flags (--minor, --patch) 73BUMP_TYPE="" 74if [[ "$2" == "--minor" ]]; then 75 BUMP_TYPE="minor" 76elif [[ "$2" == "--patch" ]]; then 77 BUMP_TYPE="patch" 78fi 79 80# Determine new version based on command 81case "$1" in 82 major) 83 MAJOR=$((MAJOR + 1)) 84 MINOR=0 85 PATCH=0 86 PRERELEASE="" 87 PRERELEASE_NUM="" 88 ;; 89 minor) 90 MINOR=$((MINOR + 1)) 91 PATCH=0 92 PRERELEASE="" 93 PRERELEASE_NUM="" 94 ;; 95 patch) 96 PATCH=$((PATCH + 1)) 97 PRERELEASE="" 98 PRERELEASE_NUM="" 99 ;; 100 alpha|beta|rc) 101 # If already on this pre-release type, bump the number 102 if [[ "$PRERELEASE" == "$1" ]]; then 103 PRERELEASE_NUM=$((PRERELEASE_NUM + 1)) 104 else 105 # Creating new pre-release type 106 if [[ -z "$PRERELEASE" ]]; then 107 # Coming from stable - determine what to bump 108 if [[ "$BUMP_TYPE" == "minor" ]]; then 109 MINOR=$((MINOR + 1)) 110 PATCH=0 111 elif [[ "$BUMP_TYPE" == "patch" ]]; then 112 PATCH=$((PATCH + 1)) 113 else 114 # Default: bump minor for new pre-release 115 MINOR=$((MINOR + 1)) 116 PATCH=0 117 fi 118 fi 119 # Set new pre-release 120 PRERELEASE="$1" 121 PRERELEASE_NUM=1 122 fi 123 ;; 124 pre|prerelease) 125 if [[ -z "$PRERELEASE" ]]; then 126 echo -e "${RED}Error: Not currently on a pre-release version${NC}" 127 echo "Current version: ${CURRENT_VERSION}" 128 echo "Use 'alpha', 'beta', or 'rc' to create a pre-release" 129 exit 1 130 fi 131 PRERELEASE_NUM=$((PRERELEASE_NUM + 1)) 132 ;; 133 release|stable) 134 if [[ -z "$PRERELEASE" ]]; then 135 echo -e "${YELLOW}Already on stable version: ${CURRENT_VERSION}${NC}" 136 exit 0 137 fi 138 # Remove pre-release suffix 139 PRERELEASE="" 140 PRERELEASE_NUM="" 141 ;; 142 -h|--help|help) 143 show_usage 144 ;; 145 "") 146 echo -e "${RED}Error: No command specified${NC}" 147 echo "" 148 show_usage 149 ;; 150 *) 151 echo -e "${RED}Error: Invalid command: $1${NC}" 152 echo "" 153 show_usage 154 ;; 155esac 156 157# Build new version string 158if [[ -z "$PRERELEASE" ]]; then 159 NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}" 160else 161 NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}-${PRERELEASE}.${PRERELEASE_NUM}" 162fi 163 164# Show version change 165echo "" 166echo -e "${YELLOW}Current version: ${CURRENT_VERSION}${NC}" 167echo -e "${GREEN}New version: ${NEW_VERSION#v}${NC}" 168 169# Show what changed 170if [[ -n "$PRERELEASE" ]]; then 171 echo -e "${BLUE}Pre-release: ${PRERELEASE}.${PRERELEASE_NUM}${NC}" 172 echo -e "${YELLOW}⚠️ This is a pre-release (no stability guarantees)${NC}" 173else 174 echo -e "${GREEN}✓ Stable release${NC}" 175fi 176 177echo "" 178 179# Confirm 180read -p "Create tag ${NEW_VERSION}? (y/N) " -n 1 -r 181echo 182if [[ ! $REPLY =~ ^[Yy]$ ]]; then 183 echo "Cancelled" 184 exit 0 185fi 186 187# Create git tag 188if [[ -n "$PRERELEASE" ]]; then 189 # Pre-release tag 190 git tag -a "${NEW_VERSION}" -m "Pre-release ${NEW_VERSION}" 191 echo -e "${GREEN}✓ Created pre-release tag ${NEW_VERSION}${NC}" 192else 193 # Stable release tag 194 git tag -a "${NEW_VERSION}" -m "Release ${NEW_VERSION}" 195 echo -e "${GREEN}✓ Created release tag ${NEW_VERSION}${NC}" 196fi 197 198echo "" 199echo "To push the tag, run:" 200echo " git push origin ${NEW_VERSION}" 201echo "" 202echo "Or use 'make release' to push automatically"