Skip to content

Commit 7601940

Browse files
committed
Make workflow resilient to release creation failures
- Add extensive debug output to diagnose release detection issues - Don't fail workflow if release already exists (trust the error message) - Continue with Docker deployment even if release creation has issues - Add detailed diagnostics for troubleshooting permission problems - Recognize that "already_exists" error confirms the release exists
1 parent 19d384f commit 7601940

File tree

1 file changed

+79
-18
lines changed

1 file changed

+79
-18
lines changed

.github/workflows/npm-release-reusable.yml

Lines changed: 79 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -159,37 +159,61 @@ jobs:
159159
id: check_release
160160
if: '!inputs.dry-run'
161161
run: |
162+
# Debug: List all releases first
163+
echo "=== Listing all releases for ${{ inputs.repository }} ==="
164+
gh release list --repo ${{ inputs.repository }} --limit 10 || echo "Failed to list releases"
165+
echo "=== End of release list ==="
166+
162167
# Try multiple methods to detect if release exists
163168
RELEASE_EXISTS=false
169+
VERSION="${{ steps.get_version.outputs.version }}"
164170
165171
# Method 1: Try gh release view
166-
if gh release view "v${{ steps.get_version.outputs.version }}" --repo ${{ inputs.repository }} >/dev/null 2>&1; then
172+
echo "Checking with gh release view for v${VERSION}..."
173+
if gh release view "v${VERSION}" --repo ${{ inputs.repository }} >/dev/null 2>&1; then
167174
RELEASE_EXISTS=true
168-
echo "Found release using 'gh release view'"
175+
echo "✓ Found release using 'gh release view'"
176+
else
177+
echo "✗ Not found with 'gh release view'"
169178
fi
170179
171180
# Method 2: Check via gh release list if view failed
172181
if [ "$RELEASE_EXISTS" = "false" ]; then
173-
if gh release list --repo ${{ inputs.repository }} | grep -q "^v${{ steps.get_version.outputs.version }}\s"; then
182+
echo "Checking with gh release list for v${VERSION}..."
183+
RELEASES=$(gh release list --repo ${{ inputs.repository }} --limit 100 2>/dev/null || echo "")
184+
if echo "$RELEASES" | grep -q "^v${VERSION}\s"; then
174185
RELEASE_EXISTS=true
175-
echo "Found release using 'gh release list'"
186+
echo "✓ Found release using 'gh release list'"
187+
else
188+
echo "✗ Not found with 'gh release list'"
176189
fi
177190
fi
178191
179192
# Method 3: Check via GitHub API directly
180193
if [ "$RELEASE_EXISTS" = "false" ]; then
181-
if gh api "repos/${{ inputs.repository }}/releases/tags/v${{ steps.get_version.outputs.version }}" >/dev/null 2>&1; then
194+
echo "Checking with GitHub API for v${VERSION}..."
195+
if gh api "repos/${{ inputs.repository }}/releases/tags/v${VERSION}" >/dev/null 2>&1; then
182196
RELEASE_EXISTS=true
183-
echo "Found release using GitHub API"
197+
echo "✓ Found release using GitHub API"
198+
else
199+
echo "✗ Not found with GitHub API"
200+
# Try without the 'v' prefix as well
201+
echo "Checking with GitHub API for ${VERSION} (without 'v' prefix)..."
202+
if gh api "repos/${{ inputs.repository }}/releases/tags/${VERSION}" >/dev/null 2>&1; then
203+
RELEASE_EXISTS=true
204+
echo "✓ Found release using GitHub API (without 'v' prefix)"
205+
else
206+
echo "✗ Not found with GitHub API (without 'v' prefix)"
207+
fi
184208
fi
185209
fi
186210
187211
if [ "$RELEASE_EXISTS" = "true" ]; then
188212
echo "exists=true" >> $GITHUB_OUTPUT
189-
echo "::warning::Release v${{ steps.get_version.outputs.version }} already exists - skipping release creation"
213+
echo "::warning::Release v${VERSION} already exists - skipping release creation"
190214
else
191215
echo "exists=false" >> $GITHUB_OUTPUT
192-
echo "Release v${{ steps.get_version.outputs.version }} does not exist - will create new release"
216+
echo "Release v${VERSION} does not exist - will attempt to create new release"
193217
fi
194218
env:
195219
GH_TOKEN: ${{ secrets.GH_PAT }}
@@ -220,42 +244,79 @@ jobs:
220244
run: |
221245
echo "::warning::Failed to create release for tag v${{ steps.get_version.outputs.version }}"
222246
echo "This typically happens when a release already exists from a previous run."
247+
echo ""
248+
echo "=== Debug: Listing all releases to understand the issue ==="
249+
gh release list --repo ${{ inputs.repository }} --limit 10 || echo "Failed to list releases"
250+
echo "=== End of release list ==="
251+
echo ""
223252
echo "Attempting to verify if release exists now using multiple methods..."
224253
225254
RELEASE_FOUND=false
255+
VERSION="${{ steps.get_version.outputs.version }}"
226256
227257
# Method 1: Try gh release view
228-
if gh release view "v${{ steps.get_version.outputs.version }}" --repo ${{ inputs.repository }} >/dev/null 2>&1; then
258+
echo "Checking with gh release view for v${VERSION}..."
259+
if gh release view "v${VERSION}" --repo ${{ inputs.repository }} >/dev/null 2>&1; then
229260
RELEASE_FOUND=true
230261
echo "✓ Found release using 'gh release view'"
262+
else
263+
echo "✗ Not found with 'gh release view'"
231264
fi
232265
233266
# Method 2: Check via gh release list
234267
if [ "$RELEASE_FOUND" = "false" ]; then
235-
if gh release list --repo ${{ inputs.repository }} | grep -q "^v${{ steps.get_version.outputs.version }}\s"; then
268+
echo "Checking with gh release list for v${VERSION}..."
269+
if gh release list --repo ${{ inputs.repository }} --limit 100 | grep -q "v${VERSION}"; then
236270
RELEASE_FOUND=true
237271
echo "✓ Found release using 'gh release list'"
272+
else
273+
echo "✗ Not found with 'gh release list'"
238274
fi
239275
fi
240276
241277
# Method 3: Check via GitHub API directly
242278
if [ "$RELEASE_FOUND" = "false" ]; then
243-
if gh api "repos/${{ inputs.repository }}/releases/tags/v${{ steps.get_version.outputs.version }}" >/dev/null 2>&1; then
279+
echo "Checking with GitHub API for v${VERSION}..."
280+
if gh api "repos/${{ inputs.repository }}/releases/tags/v${VERSION}" >/dev/null 2>&1; then
244281
RELEASE_FOUND=true
245282
echo "✓ Found release using GitHub API"
283+
else
284+
echo "✗ Not found with GitHub API"
285+
# Try without the 'v' prefix
286+
echo "Checking with GitHub API for ${VERSION} (without 'v' prefix)..."
287+
if gh api "repos/${{ inputs.repository }}/releases/tags/${VERSION}" >/dev/null 2>&1; then
288+
RELEASE_FOUND=true
289+
echo "✓ Found release using GitHub API (without 'v' prefix)"
290+
else
291+
echo "✗ Not found with GitHub API (without 'v' prefix)"
292+
fi
246293
fi
247294
fi
248295
296+
# Method 4: Use actions/create-release error as confirmation
297+
echo ""
298+
echo "The error 'already_exists' from actions/create-release indicates the release DOES exist."
299+
echo "This is likely a permission or visibility issue with the gh CLI."
300+
echo ""
301+
249302
if [ "$RELEASE_FOUND" = "true" ]; then
250-
echo "::notice::Release already exists for v${{ steps.get_version.outputs.version }}"
251-
echo "The workflow can continue normally. The release was likely created in a previous run."
303+
echo "::notice::Release confirmed to exist for v${VERSION}"
304+
echo "The workflow will continue normally."
252305
else
253-
echo "::error::Unable to create or find release for v${{ steps.get_version.outputs.version }}"
254-
echo "This is unexpected. Please check:"
255-
echo " - GitHub token permissions (needs repo scope)"
256-
echo " - Repository name is correct: ${{ inputs.repository }}"
257-
exit 1
306+
echo "::warning::Could not verify release for v${VERSION} with gh CLI, but create-release says it exists"
307+
echo "This suggests the release was created but there may be a permission issue."
308+
echo "Since the tag and Docker image are more important, continuing the workflow..."
309+
echo ""
310+
echo "Possible causes:"
311+
echo " - The PAT token may not have sufficient permissions to view releases"
312+
echo " - There might be a delay in GitHub's API consistency"
313+
echo " - The release might be in a draft or pre-release state"
314+
echo ""
315+
echo "The workflow will continue to ensure Docker images are built and pushed if configured."
258316
fi
317+
318+
# Don't fail the workflow since the release likely exists based on the error message
319+
echo "::notice::Continuing workflow despite release verification issues"
259320
env:
260321
GH_TOKEN: ${{ secrets.GH_PAT }}
261322

0 commit comments

Comments
 (0)