Skip to content

Commit 695d702

Browse files
author
CI/CD Tester
committed
feat: Handle pre-release tags and fix shellcheck warning
Assign the pre-release tag value to the PRE_RELEASE_TAG variable when parsing arguments for alpha and beta pre-releases. This resolves a shellcheck warning about the variable being unused. Also, include the PRE_RELEASE_TAG in the log output for clarity.
1 parent e78f79d commit 695d702

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

gh-release-manager.sh

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
IFS=
4+
5+
# --- MCP Validation Header ---
6+
# [MCP:REQUIRED] shellcheck validation
7+
# [MCP:REQUIRED] POSIX compliance check
8+
# [MCP:RECOMMENDED] Error handling coverage
9+
10+
# === LOGGING SYSTEM ===
11+
# Reuse existing logging system from gh-issue-manager.sh
12+
13+
# Initialize logging system
14+
log_init() {
15+
# Set default values if not provided
16+
ENABLE_LOGGING=${ENABLE_LOGGING:-false}
17+
LOG_LEVEL=${LOG_LEVEL:-INFO}
18+
LOG_FILE=${LOG_FILE:-./logs/gh-release-manager.log}
19+
20+
# Create log directory if logging is enabled
21+
if [ "$ENABLE_LOGGING" = "true" ]; then
22+
mkdir -p "$(dirname "$LOG_FILE")"
23+
log_info "log_init" "Logging initialized - Level: $LOG_LEVEL, File: $LOG_FILE"
24+
fi
25+
}
26+
27+
# Main logging function
28+
log_message() {
29+
local level="$1"
30+
local function_name="$2"
31+
local message="$3"
32+
local timestamp
33+
local timestamp
34+
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
35+
36+
# Check if logging is enabled
37+
if [ "$ENABLE_LOGGING" != "true" ]; then
38+
return 0
39+
fi
40+
41+
# Check log level
42+
case "$LOG_LEVEL" in
43+
"DEBUG") allowed_levels="DEBUG INFO WARN ERROR" ;;
44+
"INFO") allowed_levels="INFO WARN ERROR" ;;
45+
"WARN") allowed_levels="WARN ERROR" ;;
46+
"ERROR") allowed_levels="ERROR" ;;
47+
*) allowed_levels="INFO WARN ERROR" ;;
48+
esac
49+
50+
if [[ " $allowed_levels " =~ $level ]]; then
51+
echo "[$timestamp] [$level] [$function_name] $message" >> "$LOG_FILE"
52+
53+
# Also output to console for ERROR and WARN
54+
if [ "$level" = "ERROR" ] || [ "$level" = "WARN" ]; then
55+
echo "[$timestamp] [$level] [$function_name] $message" >&2
56+
fi
57+
fi
58+
}
59+
60+
# Logging wrapper functions
61+
log_error() { log_message "ERROR" "$1" "$2"; }
62+
log_warn() { log_message "WARN" "$1" "$2"; }
63+
log_info() { log_message "INFO" "$1" "$2"; }
64+
log_debug() { log_message "DEBUG" "$1" "$2"; }
65+
66+
# Performance timing function
67+
log_timing() {
68+
local function_name="$1"
69+
local start_time="$2"
70+
local end_time
71+
local duration
72+
end_time=$(date +%s.%N)
73+
duration=$(echo "$end_time - $start_time" | bc -l 2>/dev/null || echo "N/A")
74+
log_info "$function_name" "Execution time: ${duration}s"
75+
}
76+
77+
# === CORE FUNCTIONS ===
78+
79+
# Global variables
80+
DRY_RUN=false
81+
VERSION_BUMP="patch"
82+
PRE_RELEASE=false
83+
PRE_RELEASE_TAG=""
84+
85+
86+
# Show usage information
87+
show_usage() {
88+
cat << EOF
89+
GitHub Release Manager
90+
91+
USAGE:
92+
$0 [OPTIONS]
93+
94+
OPTIONS:
95+
-M, --major Increment major version (X.y.z -> X+1.0.0)
96+
-m, --minor Increment minor version (x.Y.z -> x.Y+1.0)
97+
-p, --patch Increment patch version (x.y.Z -> x.y.Z+1) [default]
98+
-a, --alpha TAG Create alpha pre-release (x.y.z-alpha.TAG)
99+
-b, --beta TAG Create beta pre-release (x.y.z-beta.TAG)
100+
-d, --dry-run Show what would be done without making changes
101+
-h, --help Show this help message
102+
103+
EXAMPLES:
104+
$0 # Create patch release (1.2.3 -> 1.2.4)
105+
$0 -m # Create minor release (1.2.3 -> 1.3.0)
106+
$0 -M # Create major release (1.2.3 -> 2.0.0)
107+
$0 -a 1 # Create alpha release (1.2.3 -> 1.2.4-alpha.1)
108+
$0 -d -m # Dry run for minor release
109+
110+
ENVIRONMENT VARIABLES:
111+
ENABLE_LOGGING Enable logging (default: false)
112+
LOG_LEVEL Log level: DEBUG, INFO, WARN, ERROR (default: INFO)
113+
LOG_FILE Log file path (default: ./logs/gh-release-manager.log)
114+
115+
EOF
116+
}
117+
118+
# Parse command line arguments
119+
parse_arguments() {
120+
local start_time
121+
start_time=$(date +%s.%N)
122+
log_debug "parse_arguments" "Parsing command line arguments: $*"
123+
124+
while [[ $# -gt 0 ]]; do
125+
case $1 in
126+
-M|--major)
127+
VERSION_BUMP="major"
128+
log_debug "parse_arguments" "Set version bump to major"
129+
shift
130+
;;
131+
-m|--minor)
132+
VERSION_BUMP="minor"
133+
log_debug "parse_arguments" "Set version bump to minor"
134+
shift
135+
;;
136+
-p|--patch)
137+
VERSION_BUMP="patch"
138+
log_debug "parse_arguments" "Set version bump to patch"
139+
shift
140+
;;
141+
-a|--alpha)
142+
PRE_RELEASE=true
143+
PRE_RELEASE_TAG="alpha.$2"
144+
log_debug "parse_arguments" "Set pre-release to alpha.$2"
145+
shift 2
146+
;;
147+
-b|--beta)
148+
PRE_RELEASE=true
149+
PRE_RELEASE_TAG="beta.$2"
150+
log_debug "parse_arguments" "Set pre-release to beta.$2"
151+
shift 2
152+
;;
153+
-d|--dry-run)
154+
DRY_RUN=true
155+
log_debug "parse_arguments" "Enabled dry-run mode"
156+
shift
157+
;;
158+
-h|--help)
159+
show_usage
160+
exit 0
161+
;;
162+
*)
163+
log_error "parse_arguments" "Unknown option: $1"
164+
echo "Error: Unknown option: $1" >&2
165+
show_usage
166+
exit 1
167+
;;
168+
esac
169+
done
170+
171+
log_info "parse_arguments" "Arguments parsed - Bump: $VERSION_BUMP, Pre-release: $PRE_RELEASE, Pre-release Tag: $PRE_RELEASE_TAG, Dry-run: $DRY_RUN"
172+
log_timing "parse_arguments" "$start_time"
173+
}
174+

0 commit comments

Comments
 (0)