@@ -194,54 +194,100 @@ jobs:
194194 && sudo apt install gh -y
195195
196196 - name : Delete old releases
197+ # This step runs after the GitHub CLI setup and release creation
198+ if : github.ref == 'refs/heads/main' && success()
197199 env :
198- # We need to use a token with sufficient permissions
199- # Using GITHUB_TOKEN with proper permissions defined at workflow level
200200 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
201201 run : |
202+ set +e # Don't exit on error
203+
204+ echo "::group::Release Cleanup"
205+
202206 # Get current release tag we're creating
203207 current_tag="v${{ env.VERSION }}"
204- echo "Current release tag: $current_tag"
208+ echo "ℹ️ Current release tag: $current_tag"
209+
210+ # Explicitly authenticate with GitHub CLI using the token
211+ echo "$GITHUB_TOKEN" | gh auth login --with-token
212+
213+ if [ $? -ne 0 ]; then
214+ echo "::warning::Failed to authenticate with GitHub CLI. Skipping release cleanup."
215+ exit 0 # Continue workflow
216+ fi
217+
218+ # List all releases
219+ echo "ℹ️ Listing existing releases..."
220+
221+ # Use simple list format first to check if releases exist
222+ release_count=$(gh release list | wc -l)
223+
224+ if [ $release_count -eq 0 ]; then
225+ echo "ℹ️ No existing releases found. Nothing to clean up."
226+ echo "::endgroup::"
227+ exit 0
228+ fi
205229
206- # List all releases excluding the current one we're creating
207- echo "Listing existing releases..."
230+ echo "ℹ️ Found $release_count releases in total"
208231
209- # Try to get releases, handling potential errors
210- if ! releases=$(gh release list --limit 100 --exclude-drafts --exclude-pre-releases --json tagName,createdAt); then
211- echo "::warning::Unable to list releases, skipping cleanup"
232+ # Get detailed release info with JSON
233+ releases=$(gh release list --limit 100 --json tagName,createdAt 2>/dev/null)
234+
235+ if [ $? -ne 0 ] || [ -z "$releases" ]; then
236+ echo "::warning::Unable to get detailed release information. Skipping cleanup."
237+ echo "::endgroup::"
212238 exit 0
213239 fi
214240
215- # Parse the JSON output and extract tag names sorted by creation date
216- readarray -t old_releases < <(echo "$releases" | jq -r 'sort_by(.createdAt) | .[].tagName')
241+ # Check if jq command is available
242+ if ! command -v jq &> /dev/null; then
243+ echo "::warning::jq command not found. Installing jq..."
244+ sudo apt-get update && sudo apt-get install -y jq
245+ fi
246+
247+ # Parse releases, handling potential JSON parsing errors
248+ if ! old_releases=($(echo "$releases" | jq -r 'sort_by(.createdAt) | .[].tagName' 2>/dev/null)); then
249+ echo "::warning::Failed to parse release information. Skipping cleanup."
250+ echo "::endgroup::"
251+ exit 0
252+ fi
217253
218- # Keep no old releases (excluding current new release )
254+ # Number of releases to keep (0 means delete all old releases )
219255 keep=0
220256 count=0
221257 total=${#old_releases[@]}
222258
223- echo "Found $total existing releases"
259+ echo "ℹ️ Found $total releases after parsing "
224260
225- # Delete all releases except the most recent 'keep' number
261+ # Delete all releases except the most recent 'keep' number and current release
226262 for tag in "${old_releases[@]}"; do
227- # Skip the current release if it somehow appears in the list
263+ # Skip the current release
228264 if [[ "$tag" == "$current_tag" ]]; then
229- echo "Skipping current release: $tag"
265+ echo "ℹ️ Skipping current release: $tag"
230266 continue
231267 fi
232268
233269 ((count++))
234270 if ((count > keep)); then
235- echo "Attempting to delete release: $tag"
236- if gh release delete "$tag" --yes; then
237- echo "Successfully deleted release: $tag"
271+ echo "🗑️ Attempting to delete release: $tag"
272+
273+ # Try to delete the release with a timeout
274+ if timeout 30s gh release delete "$tag" --yes; then
275+ echo "✅ Successfully deleted release: $tag"
238276 else
239- echo "::warning::Failed to delete release $tag - this is non-fatal"
277+ deletion_status=$?
278+ echo "::warning::Failed to delete release $tag (exit code: $deletion_status) - continuing with next release"
240279 fi
280+
281+ # Small delay to avoid rate limiting
282+ sleep 1
241283 else
242- echo "Keeping release: $tag"
284+ echo "🔒 Keeping release: $tag (within keep limit) "
243285 fi
244286 done
245287
246- echo "Release cleanup complete"
288+ echo "🏁 Release cleanup completed"
289+ echo "::endgroup::"
290+
291+ # Always return success to avoid workflow failures
292+ exit 0
247293
0 commit comments