fix(release): improve deletion of old NuGet packages (#85) #6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Main Build | |
| on: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: write | |
| packages: write | |
| jobs: | |
| build-and-test: | |
| name: Build, Test and Pack | |
| uses: ./.github/workflows/build-and-test.yml | |
| with: | |
| create-pack: true | |
| create-draft-release: | |
| name: Create Draft Release | |
| needs: build-and-test | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download NuGet packages | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: nuget-packages | |
| path: ./artifacts | |
| - name: Check if tag exists | |
| id: check-tag | |
| run: | | |
| TAG="v${{ needs.build-and-test.outputs.version }}" | |
| if git rev-parse "$TAG" >/dev/null 2>&1; then | |
| echo "exists=true" >> $GITHUB_OUTPUT | |
| echo "⚠️ Tag $TAG already exists" | |
| else | |
| echo "exists=false" >> $GITHUB_OUTPUT | |
| echo "✅ Tag $TAG does not exist yet" | |
| fi | |
| - name: Create/Update Draft Release | |
| if: steps.check-tag.outputs.exists == 'false' | |
| uses: release-drafter/release-drafter@v6 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| config-name: release-drafter.yml | |
| version: v${{ needs.build-and-test.outputs.version }} | |
| tag: v${{ needs.build-and-test.outputs.version }} | |
| name: Version ${{ needs.build-and-test.outputs.version }} | |
| publish: false | |
| prerelease: false | |
| - name: Upload packages to draft release | |
| if: steps.check-tag.outputs.exists == 'false' | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| TAG="v${{ needs.build-and-test.outputs.version }}" | |
| # Wait a moment for the release to be created | |
| sleep 2 | |
| # Remove old NuGet packages from the draft release | |
| echo "🗑️ Removing old NuGet packages..." | |
| gh release view "$TAG" --json assets -q '.assets[] | select(.name | endswith(".nupkg")) | "\(.id) \(.name)"' | while read -r asset_id asset_name; do | |
| echo "Deleting old package: $asset_name (ID: $asset_id)" | |
| gh api --method DELETE "/repos/${{ github.repository }}/releases/assets/$asset_id" || echo "Failed to delete $asset_name" | |
| done | |
| # Upload new artifacts to the draft release | |
| echo "📦 Uploading new NuGet packages..." | |
| for file in ./artifacts/*.nupkg; do | |
| gh release upload "$TAG" "$file" --clobber | |
| done | |
| echo "✅ Uploaded NuGet packages to draft release" | |
| - name: Summary | |
| if: steps.check-tag.outputs.exists == 'false' | |
| run: | | |
| echo "✅ Draft release created/updated" >> $GITHUB_STEP_SUMMARY | |
| echo "Version: v${{ needs.build-and-test.outputs.version }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Next steps:" >> $GITHUB_STEP_SUMMARY | |
| echo "1. Go to [Releases](../../releases)" >> $GITHUB_STEP_SUMMARY | |
| echo "2. Review the draft release" >> $GITHUB_STEP_SUMMARY | |
| echo "3. Edit release notes if needed" >> $GITHUB_STEP_SUMMARY | |
| echo "4. Publish release to trigger production deployment" >> $GITHUB_STEP_SUMMARY | |
| - name: Release already exists | |
| if: steps.check-tag.outputs.exists == 'true' | |
| run: | | |
| echo "ℹ️ Release v${{ needs.build-and-test.outputs.version }} already exists" >> $GITHUB_STEP_SUMMARY | |
| echo "No action taken" >> $GITHUB_STEP_SUMMARY |