@@ -105,20 +105,20 @@ jobs:
105105 echo " GitHub: ${GITHUB_VERSION}"
106106 echo " Git: ${GIT_VERSION}"
107107
108- # Function to compare versions
109- version_compare () {
110- printf '%s\n%s\n' "$1 " "$2 " | sort -V | head -n1
108+ # Function to compare versions (returns 0 if v1 > v2, 1 if v1 <= v2)
109+ version_gt () {
110+ [ "$( printf '%s\n%s\n' "$2 " "$1 " | sort -V | head -n1)" != "$1" ]
111111 }
112112
113- # Find the highest published version
114- HIGHEST_VERSION ="0.0.0"
115- for ver in "$NPM_VERSION" "$GITHUB_VERSION" "$GIT_VERSION" ; do
116- if [ "$(version_compare "$HIGHEST_VERSION" "$ ver")" = "$HIGHEST_VERSION " ] && [ "$ver" != "$HIGHEST_VERSION" ] ; then
117- HIGHEST_VERSION ="$ver"
113+ # Find the highest PUBLISHED version (exclude git tags - they're just markers)
114+ HIGHEST_PUBLISHED ="0.0.0"
115+ for ver in "$NPM_VERSION" "$GITHUB_VERSION"; do
116+ if [ "$ver" ! = "0.0.0 " ] && version_gt "$ver" "$HIGHEST_PUBLISHED" ; then
117+ HIGHEST_PUBLISHED ="$ver"
118118 fi
119119 done
120120
121- echo "🔍 Highest published version: ${HIGHEST_VERSION }"
121+ echo "🔍 Highest published version: ${HIGHEST_PUBLISHED }"
122122
123123 # Determine version bump type
124124 if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.force_version }}" ]; then
@@ -145,7 +145,7 @@ jobs:
145145 fi
146146
147147 # Calculate new version based on highest published version
148- IFS='.' read -r major minor patch <<< "$HIGHEST_VERSION "
148+ IFS='.' read -r major minor patch <<< "$HIGHEST_PUBLISHED "
149149 case $BUMP_TYPE in
150150 major)
151151 NEW_VERSION="$((major + 1)).0.0"
@@ -164,13 +164,31 @@ jobs:
164164 SHOULD_RELEASE="true"
165165 VERSION_CHANGED="true"
166166
167+ # Check against published versions only (not git tags)
167168 for ver in "$NPM_VERSION" "$GITHUB_VERSION"; do
168- if [ "$ver" != "0.0.0" ] && [ "$(version_compare "$NEW_VERSION" "$ver")" != "$NEW_VERSION" ] ; then
169+ if [ "$ver" != "0.0.0" ] && ! version_gt "$NEW_VERSION" "$ver"; then
169170 echo "❌ New version ${NEW_VERSION} is not higher than published version ${ver}"
170171 SHOULD_RELEASE="false"
171172 fi
172173 done
173174
175+ # Special case: if this is a manual release and the version already exists,
176+ # but we want to republish (e.g., failed previous attempt), allow it
177+ if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "$SHOULD_RELEASE" = "false" ]; then
178+ echo "🔄 Manual release mode - checking if we should allow republishing..."
179+ # Allow republishing if the new version equals the highest published version
180+ # but is higher than at least one published source
181+ if [ "$NEW_VERSION" = "$HIGHEST_PUBLISHED" ]; then
182+ for ver in "$NPM_VERSION" "$GITHUB_VERSION"; do
183+ if [ "$ver" != "0.0.0" ] && version_gt "$NEW_VERSION" "$ver"; then
184+ echo "✅ Allowing republish: ${NEW_VERSION} > ${ver}"
185+ SHOULD_RELEASE="true"
186+ break
187+ fi
188+ done
189+ fi
190+ fi
191+
174192 # Check if package.json needs updating
175193 if [ "$PACKAGE_VERSION" = "$NEW_VERSION" ]; then
176194 VERSION_CHANGED="false"
0 commit comments