7373 echo "has_changesets=true" >> $GITHUB_OUTPUT
7474 else
7575 echo "has_changesets=false" >> $GITHUB_OUTPUT
76- echo "No changesets found. Exiting."
77- exit 1
76+ echo "No changesets found. Proceeding with release without changesets."
7877 fi
7978
8079 - name : Determine version bump
8483 # Use the specified release type
8584 npm run version:bump -- --type=${{ github.event.inputs.release_type }}
8685 else
87- # Auto-detect release type from changesets
88- npm run version:bump
86+ # Auto-detect release type from changesets, or default to patch if none found
87+ if [[ "${{ steps.check_changesets.outputs.has_changesets }}" == "true" ]]; then
88+ npm run version:bump
89+ else
90+ npm run version:bump -- --type=patch
91+ fi
8992 fi
9093
9194 # Get the new version after bump
@@ -155,10 +158,22 @@ jobs:
155158
156159 # Check if the file has content
157160 if [ ! -s /tmp/release-notes/release_notes.md ]; then
158- # If empty, provide a default message
161+ # If empty, provide a more informative default message
159162 echo "## Release Notes" > /tmp/release-notes/release_notes.md
160163 echo "" >> /tmp/release-notes/release_notes.md
161- echo "No changesets found. No changes to release at this time." >> /tmp/release-notes/release_notes.md
164+
165+ if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
166+ echo "This release was manually triggered with version bump type: ${{ github.event.inputs.release_type || 'auto' }}" >> /tmp/release-notes/release_notes.md
167+ elif [[ "${{ github.event_name }}" == "schedule" ]]; then
168+ echo "This is a scheduled release." >> /tmp/release-notes/release_notes.md
169+ else
170+ echo "This release was triggered by merging a PR from develop to main." >> /tmp/release-notes/release_notes.md
171+ fi
172+
173+ echo "" >> /tmp/release-notes/release_notes.md
174+ echo "No changesets were found for this release. This typically means:" >> /tmp/release-notes/release_notes.md
175+ echo "- No features, fixes, or breaking changes were added, or" >> /tmp/release-notes/release_notes.md
176+ echo "- The changes made did not require a changeset" >> /tmp/release-notes/release_notes.md
162177 else
163178 # If there is content, replace "Upcoming Changes" with "Release Notes" if present
164179 sed -i 's/## Upcoming Changes/## Release Notes/g' /tmp/release-notes/release_notes.md
@@ -246,6 +261,7 @@ jobs:
246261
247262 - name : Handle release creation failure
248263 if : (github.event_name == 'pull_request_target' || github.event_name == 'workflow_dispatch') && steps.create_release.outcome == 'failure'
264+ id : handle_failure
249265 run : |
250266 echo "Failed to create release. This could be because the tag already exists."
251267 echo "Checking if release exists..."
@@ -256,9 +272,11 @@ jobs:
256272 "https://api.github.com/repos/${{ github.repository }}/releases/tags/v${{ steps.version_bump.outputs.version }}")
257273
258274 if [[ "$RELEASE_EXISTS" == "200" ]]; then
259- echo "Release for v${{ steps.version_bump.outputs.version }} already exists. Skipping release creation."
275+ echo "Release for v${{ steps.version_bump.outputs.version }} already exists. Marking as successful."
276+ echo "release_exists=true" >> $GITHUB_OUTPUT
260277 else
261278 echo "Release creation failed for an unknown reason."
279+ echo "release_exists=false" >> $GITHUB_OUTPUT
262280
263281 # Check for rate limiting
264282 RATE_LIMIT=$(curl -s \
@@ -299,6 +317,7 @@ jobs:
299317 --title "Release v${{ steps.version_bump.outputs.version }}" \
300318 --notes-file "${{ github.workspace }}/release_notes.md"; then
301319 echo "Successfully created release using GitHub CLI"
320+ echo "release_exists=true" >> $GITHUB_OUTPUT
302321 else
303322 echo "::error::Failed to create release using GitHub CLI with notes file."
304323
@@ -308,8 +327,10 @@ jobs:
308327 --title "Release v${{ steps.version_bump.outputs.version }}" \
309328 --notes "${{ steps.release_notes.outputs.content }}"; then
310329 echo "Successfully created release using GitHub CLI with inline notes"
330+ echo "release_exists=true" >> $GITHUB_OUTPUT
311331 else
312332 echo "::error::Failed to create release using all methods. Please check logs for details."
333+ echo "release_exists=false" >> $GITHUB_OUTPUT
313334 exit 1
314335 fi
315336 fi
@@ -320,8 +341,10 @@ jobs:
320341 --title "Release v${{ steps.version_bump.outputs.version }}" \
321342 --notes "${{ steps.release_notes.outputs.content }}"; then
322343 echo "Successfully created release using GitHub CLI with inline notes"
344+ echo "release_exists=true" >> $GITHUB_OUTPUT
323345 else
324346 echo "::error::Failed to create release using all methods. Please check logs for details."
347+ echo "release_exists=false" >> $GITHUB_OUTPUT
325348 exit 1
326349 fi
327350 fi
@@ -350,14 +373,15 @@ jobs:
350373 fi
351374
352375 - name : Delete processed changesets
353- if : github.event_name == 'pull_request_target' || github.event_name == 'workflow_dispatch'
376+ # Only delete changesets if the release was successful or already exists
377+ if : (github.event_name == 'pull_request_target' || github.event_name == 'workflow_dispatch') && (steps.create_release.outcome == 'success' || steps.handle_failure.outputs.release_exists == 'true')
354378 run : |
355379 # Configure Git
356380 git config --global user.name "GitHub Actions"
357381 git config --global user.email "[email protected] " 358382
359383 # Check if the .changesets directory exists and contains files
360- if [ -d ".changesets" ]; then
384+ if [ -d ".changesets" ] && [ "$(find .changesets -type f -name "*.md" | wc -l)" -gt 0 ] ; then
361385 # List all changesets before deleting (for logging purposes)
362386 echo "Changesets found in directory:"
363387 ls -la .changesets/
@@ -385,7 +409,7 @@ jobs:
385409 exit 1
386410 fi
387411 else
388- echo "No .changesets directory found"
412+ echo "No changeset files found to delete "
389413 fi
390414
391415 - name : Update develop branch
0 commit comments