@@ -153,3 +153,73 @@ jobs:
153153
154154 gh release upload "${release_tag}" "${artifact_name}" \
155155 -R ${{ github.repository }} --clobber
156+
157+ cleanup-release :
158+ runs-on : ubuntu-latest
159+ if : failure()
160+ needs : [get-extension-matrix, extension, pecl-release]
161+ steps :
162+ - name : Checkout repository
163+ uses : actions/checkout@v4
164+ with :
165+ fetch-depth : 0
166+ token : ${{ secrets.GITHUB_TOKEN }}
167+
168+ - name : Setup git
169+ run : |
170+ git config --global user.name "github-actions[bot]"
171+ git config --global user.email "github-actions[bot]@users.noreply.github.com"
172+
173+ - name : Cleanup Release in Case of Failure
174+ env :
175+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
176+ run : |
177+ set -e
178+
179+ extension=$(basename "${{ inputs.extension-url }}" | tr '[:upper:]' '[:lower:]')
180+ ref="${{ inputs.extension-ref }}"
181+ release_tag="${extension}-${ref}"
182+
183+ echo "=== Starting cleanup for release: $release_tag ==="
184+
185+ echo "=== Deleting all artifacts from this run ==="
186+ artifact_ids=$(gh api repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/artifacts --jq '.artifacts[].id' 2>/dev/null || echo "")
187+ if [ -n "$artifact_ids" ]; then
188+ for artifact_id in $artifact_ids; do
189+ echo "Deleting artifact $artifact_id"
190+ gh api -X DELETE repos/${{ github.repository }}/actions/artifacts/$artifact_id || true
191+ done
192+ else
193+ echo "No artifacts found for this run"
194+ fi
195+
196+ echo "=== Checking if release $release_tag exists ==="
197+ if gh release view "$release_tag" -R ${{ github.repository }} >/dev/null 2>&1; then
198+ echo "Release $release_tag exists, proceeding with cleanup"
199+
200+ echo "=== Deleting all assets from release $release_tag ==="
201+ assets=$(gh release view "$release_tag" -R ${{ github.repository }} --json assets --jq '.assets[].name' 2>/dev/null || echo "")
202+ if [ -n "$assets" ]; then
203+ for asset in $assets; do
204+ echo "Deleting asset: $asset"
205+ gh release delete-asset "$release_tag" "$asset" -R ${{ github.repository }} -y || true
206+ done
207+ else
208+ echo "No assets found in release $release_tag"
209+ fi
210+
211+ echo "=== Deleting release $release_tag ==="
212+ gh release delete "$release_tag" -R ${{ github.repository }} -y || true
213+ else
214+ echo "Release $release_tag does not exist, skipping release cleanup"
215+ fi
216+
217+ echo "=== Checking if tag $release_tag exists ==="
218+ if git rev-parse "refs/tags/$release_tag" >/dev/null 2>&1; then
219+ echo "Tag $release_tag exists, deleting it"
220+ git push origin ":refs/tags/$release_tag" || true
221+ else
222+ echo "Tag $release_tag does not exist, skipping tag deletion"
223+ fi
224+
225+ echo "=== Cleanup completed successfully ==="
0 commit comments