feat(release): remove old NuGet packages before upload (#84) #5
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 --jq '.assets[].name' | grep '\.nupkg$' | while read -r asset; do | |
| echo "Deleting old package: $asset" | |
| gh api --method DELETE "/repos/${{ github.repository }}/releases/assets/$(gh release view "$TAG" --json assets --jq ".assets[] | select(.name == \"$asset\") | .id")" || true | |
| 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 |