Skip to content

feat(release): remove old NuGet packages before upload (#84) #5

feat(release): remove old NuGet packages before upload (#84)

feat(release): remove old NuGet packages before upload (#84) #5

Workflow file for this run

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