-
Notifications
You must be signed in to change notification settings - Fork 10
104 lines (91 loc) · 3.55 KB
/
main-build.yml
File metadata and controls
104 lines (91 loc) · 3.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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@v6
- 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: Delete existing draft releases
if: steps.check-tag.outputs.exists == 'false'
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Checking for existing draft releases..."
gh release list --json isDraft,tagName --jq '.[] | select(.isDraft) | .tagName' | while read -r tag_name; do
echo "Deleting existing draft release: $tag_name"
gh release delete "$tag_name" --yes --cleanup-tag || echo "Failed to delete release $tag_name"
done
- name: Create 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
# 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