[DEPRECATED] Go implementation of plcbundle

update bump script

Changed files
+142 -12
scripts
+142 -12
scripts/bump-version.sh
··· 6 6 RED='\033[0;31m' 7 7 GREEN='\033[0;32m' 8 8 YELLOW='\033[1;33m' 9 + BLUE='\033[0;34m' 9 10 NC='\033[0m' # No Color 10 11 11 12 # Check if git is clean ··· 21 22 # Remove 'v' prefix if present 22 23 CURRENT_VERSION=${CURRENT_VERSION#v} 23 24 24 - # Parse version 25 - IFS='.' read -r -a VERSION_PARTS <<< "$CURRENT_VERSION" 26 - MAJOR="${VERSION_PARTS[0]}" 27 - MINOR="${VERSION_PARTS[1]}" 28 - PATCH="${VERSION_PARTS[2]}" 25 + # Parse version (supports semver with pre-release) 26 + # Format: MAJOR.MINOR.PATCH[-PRERELEASE] 27 + if [[ $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. 33 + else 34 + echo -e "${RED}Error: Could not parse version: ${CURRENT_VERSION}${NC}" 35 + exit 1 36 + fi 37 + 38 + # Function to show usage 39 + show_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 + } 29 71 30 - # Bump version based on argument 72 + # Parse optional flags (--minor, --patch) 73 + BUMP_TYPE="" 74 + if [[ "$2" == "--minor" ]]; then 75 + BUMP_TYPE="minor" 76 + elif [[ "$2" == "--patch" ]]; then 77 + BUMP_TYPE="patch" 78 + fi 79 + 80 + # Determine new version based on command 31 81 case "$1" in 32 82 major) 33 83 MAJOR=$((MAJOR + 1)) 34 84 MINOR=0 35 85 PATCH=0 86 + PRERELEASE="" 87 + PRERELEASE_NUM="" 36 88 ;; 37 89 minor) 38 90 MINOR=$((MINOR + 1)) 39 91 PATCH=0 92 + PRERELEASE="" 93 + PRERELEASE_NUM="" 40 94 ;; 41 95 patch) 42 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 43 149 ;; 44 150 *) 45 - echo "Usage: $0 {major|minor|patch}" 46 - exit 1 151 + echo -e "${RED}Error: Invalid command: $1${NC}" 152 + echo "" 153 + show_usage 47 154 ;; 48 155 esac 49 156 50 - NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}" 157 + # Build new version string 158 + if [[ -z "$PRERELEASE" ]]; then 159 + NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}" 160 + else 161 + NEW_VERSION="v${MAJOR}.${MINOR}.${PATCH}-${PRERELEASE}.${PRERELEASE_NUM}" 162 + fi 51 163 164 + # Show version change 165 + echo "" 52 166 echo -e "${YELLOW}Current version: ${CURRENT_VERSION}${NC}" 53 - echo -e "${GREEN}New version: ${NEW_VERSION}${NC}" 167 + echo -e "${GREEN}New version: ${NEW_VERSION#v}${NC}" 168 + 169 + # Show what changed 170 + if [[ -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}" 173 + else 174 + echo -e "${GREEN}✓ Stable release${NC}" 175 + fi 176 + 54 177 echo "" 55 178 56 179 # Confirm ··· 62 185 fi 63 186 64 187 # Create git tag 65 - git tag -a "${NEW_VERSION}" -m "Release ${NEW_VERSION}" 188 + if [[ -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}" 192 + else 193 + # Stable release tag 194 + git tag -a "${NEW_VERSION}" -m "Release ${NEW_VERSION}" 195 + echo -e "${GREEN}✓ Created release tag ${NEW_VERSION}${NC}" 196 + fi 66 197 67 - echo -e "${GREEN}✓ Created tag ${NEW_VERSION}${NC}" 68 198 echo "" 69 199 echo "To push the tag, run:" 70 200 echo " git push origin ${NEW_VERSION}"