@@ -21,6 +21,40 @@ print_error() {
2121 echo -e " ${RED} [ERROR]${NC} $1 "
2222}
2323
24+ # Track if release completed successfully
25+ RELEASE_SUCCESSFUL=false
26+
27+ # Trap handler for automatic cleanup on failure
28+ cleanup_on_failure () {
29+ local exit_code=$?
30+
31+ # Only clean up if release failed (non-zero exit) and wasn't successful
32+ if [ $exit_code -ne 0 ] && [ " $RELEASE_SUCCESSFUL " = false ]; then
33+ print_error " Release failed! Rolling back changes..."
34+
35+ # Clean up Maven release artifacts
36+ mvn release:clean 2> /dev/null || true
37+
38+ # Delete release tag if it exists
39+ if [ -n " $RELEASE_TAG " ]; then
40+ git tag -d " $RELEASE_TAG " 2> /dev/null || true
41+ fi
42+
43+ # Switch back to develop branch
44+ git checkout develop 2> /dev/null || true
45+
46+ # Delete release branch if it exists
47+ if [ -n " $RELEASE_BRANCH " ]; then
48+ git branch -D " $RELEASE_BRANCH " 2> /dev/null || true
49+ fi
50+
51+ print_status " Rollback complete. You're back on develop branch."
52+ exit $exit_code
53+ fi
54+ }
55+
56+ trap cleanup_on_failure EXIT
57+
2458# Check if we're on develop branch
2559CURRENT_BRANCH=$( git rev-parse --abbrev-ref HEAD)
2660if [ " $CURRENT_BRANCH " != " develop" ]; then
@@ -40,6 +74,22 @@ if ! git diff-index --quiet HEAD --; then
4074 exit 1
4175fi
4276
77+ # Check if GPG is installed and configured
78+ if ! command -v gpg & > /dev/null; then
79+ print_error " GPG is not installed. Maven release requires GPG to sign artifacts."
80+ print_error " Install GPG with: brew install gnupg"
81+ exit 1
82+ fi
83+
84+ # Check if GPG has at least one secret key
85+ if ! gpg --list-secret-keys --keyid-format=long 2> /dev/null | grep -q " sec" ; then
86+ print_error " No GPG secret key found. You need a GPG key to sign Maven artifacts."
87+ print_error " Generate one with: gpg --gen-key"
88+ exit 1
89+ fi
90+
91+ print_status " GPG check passed"
92+
4393# Get current version from pom.xml
4494CURRENT_VERSION=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout)
4595print_status " Current version: $CURRENT_VERSION "
@@ -123,6 +173,9 @@ if git ls-remote --heads origin "$RELEASE_BRANCH" | grep -q "$RELEASE_BRANCH"; t
123173 fi
124174fi
125175
176+ # Mark release as successful to prevent rollback
177+ RELEASE_SUCCESSFUL=true
178+
126179print_status " Release $RELEASE_VERSION completed successfully!"
127180print_status " - Master branch contains release version $RELEASE_VERSION "
128181print_status " - Develop branch contains next development version"
0 commit comments