1name: Release
2
3on:
4 push:
5 tags: ["v*"]
6
7jobs:
8 create-release:
9 name: "Create Release"
10 runs-on: ubuntu-latest
11 outputs:
12 version: ${{ steps.get_version.outputs.version }}
13 release_id: ${{ steps.create_release.outputs.id }}
14
15 steps:
16 - name: Checkout project
17 uses: actions/checkout@v4
18 with:
19 fetch-depth: 0
20
21 - name: Get version from tag
22 id: get_version
23 run: |
24 VERSION="${GITHUB_REF#refs/tags/v}"
25 echo "version=$VERSION" >> $GITHUB_OUTPUT
26
27 - name: Create GitHub Release
28 id: create_release
29 uses: softprops/action-gh-release@v2
30 with:
31 tag_name: ${{ github.ref }}
32 name: Release ${{ steps.get_version.outputs.version }}
33 draft: true
34 prerelease: false
35
36 build-binaries:
37 name: "Build Binaries"
38 needs: create-release
39 uses: ./.github/workflows/build-binaries.yml
40 with:
41 version: ${{ needs.create-release.outputs.version }}
42 release_id: ${{ needs.create-release.outputs.release_id }}
43 secrets: inherit
44
45 build-docker:
46 name: "Build Docker"
47 needs: create-release
48 uses: ./.github/workflows/build-docker.yml
49 with:
50 version: ${{ needs.create-release.outputs.version }}
51 secrets: inherit
52
53 build-msi:
54 name: "Build MSI"
55 needs: [create-release, build-binaries]
56 uses: ./.github/workflows/build-msi.yml
57 with:
58 version: ${{ needs.create-release.outputs.version }}
59 release_id: ${{ needs.create-release.outputs.release_id }}
60 secrets: inherit
61
62 finalize-release:
63 name: "Finalize Release"
64 needs: [create-release, build-binaries, build-docker, build-msi]
65 uses: ./.github/workflows/finalize-release.yml
66 with:
67 version: ${{ needs.create-release.outputs.version }}
68 release_id: ${{ needs.create-release.outputs.release_id }}
69 secrets: inherit
70
71 cleanup-on-failure:
72 name: "Cleanup on Failure"
73 runs-on: ubuntu-latest
74 needs: [create-release, build-binaries, build-docker, build-msi]
75 if: failure()
76 steps:
77 - name: Delete release
78 uses: actions/github-script@v7
79 with:
80 script: |
81 try {
82 await github.rest.repos.deleteRelease({
83 owner: context.repo.owner,
84 repo: context.repo.repo,
85 release_id: ${{ needs.create-release.outputs.release_id }}
86 });
87 console.log('Release deleted');
88 } catch (e) {
89 console.log('Failed to delete release:', e.message);
90 }
91
92 - name: Delete tag
93 uses: actions/github-script@v7
94 with:
95 script: |
96 try {
97 await github.rest.git.deleteRef({
98 owner: context.repo.owner,
99 repo: context.repo.repo,
100 ref: 'tags/${{ github.ref_name }}'
101 });
102 console.log('Tag deleted');
103 } catch (e) {
104 console.log('Failed to delete tag:', e.message);
105 }