@@ -34,11 +34,56 @@ jobs:
3434 - name : Run Tests
3535 run : cargo test
3636
37+ release :
38+ name : Semantic Release
39+ needs : tests
40+ runs-on : ubuntu-latest
41+ if : github.ref == 'refs/heads/main'
42+ permissions :
43+ contents : write
44+ issues : write
45+ pull-requests : write
46+ outputs :
47+ new_release_published : ${{ steps.semantic.outputs.new_release_published }}
48+ new_release_version : ${{ steps.semantic.outputs.new_release_version }}
49+ steps :
50+ - name : Generate Token
51+ id : generate_token
52+ uses : actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
53+ with :
54+ app-id : ${{ secrets.BOT_APP_ID }}
55+ private-key : ${{ secrets.BOT_APP_PRIVATE_KEY }}
56+
57+ - name : Checkout repository
58+ uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
59+ with :
60+ fetch-depth : 0
61+ token : ${{ steps.generate_token.outputs.token }}
62+
63+ - name : Semantic Release
64+ id : semantic
65+ uses : cycjimmy/semantic-release-action@b12c8f6015dc215fe37bc154d4ad456dd3833c90 # v6.0.0
66+ with :
67+ tag_format : v${version}
68+ branches : |
69+ ['main']
70+ extra_plugins : |
71+ @semantic-release/commit-analyzer
72+ @semantic-release/release-notes-generator
73+ @semantic-release/github
74+ @semantic-release/changelog
75+ @semantic-release/git
76+ @semantic-release/exec
77+ conventional-changelog-conventionalcommits
78+ env :
79+ GITHUB_TOKEN : ${{ steps.generate_token.outputs.token }}
80+ CARGO_REGISTRY_TOKEN : ${{ secrets.CARGO_REGISTRY_TOKEN }}
81+
3782 build :
3883 name : Build / ${{ matrix.os }}
39- needs : tests
84+ needs : release
4085 runs-on : ${{ matrix.os }}
41- if : github.ref == 'refs/heads/main '
86+ if : needs.release.outputs.new_release_published == 'true '
4287 strategy :
4388 matrix :
4489 include :
58103 steps :
59104 - name : Checkout repository
60105 uses : actions/checkout@v4
106+ with :
107+ ref : v${{ needs.release.outputs.new_release_version }}
61108
62109 - name : Install Rust toolchain
63110 uses : dtolnay/rust-toolchain@stable
@@ -76,61 +123,10 @@ jobs:
76123 shell : bash
77124 run : tar -C target/${{ matrix.target }}/release -czf ${{ matrix.asset_name }}.tar.gz ${{ matrix.artifact_name }}
78125
79- - name : Upload artifact
80- uses : actions/upload-artifact@v4
81- with :
82- name : ${{ matrix.asset_name }}
83- path : ${{ matrix.asset_name }}.tar.gz
84- retention-days : 1
85-
86- release :
87- name : Semantic Release
88- needs : build
89- runs-on : ubuntu-latest
90- if : github.ref == 'refs/heads/main'
91- permissions :
92- contents : write
93- issues : write
94- pull-requests : write
95- steps :
96- - name : Generate Token
97- id : generate_token
98- uses : actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2
99- with :
100- app-id : ${{ secrets.BOT_APP_ID }}
101- private-key : ${{ secrets.BOT_APP_PRIVATE_KEY }}
102-
103- - name : Checkout repository
104- uses : actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
126+ - name : Upload to Release
127+ uses : softprops/action-gh-release@v2
105128 with :
106- fetch-depth : 0
107- token : ${{ steps.generate_token.outputs.token }}
108-
109- - name : Download all artifacts
110- uses : actions/download-artifact@v4
111- with :
112- path : artifacts/
113-
114- - name : Move artifacts to root
115- run : |
116- find artifacts -name "*.tar.gz" -exec mv {} . \;
117- ls -la *.tar.gz
118-
119- - name : Semantic Release
120- id : semantic
121- uses : cycjimmy/semantic-release-action@b12c8f6015dc215fe37bc154d4ad456dd3833c90 # v6.0.0
122- with :
123- tag_format : v${version}
124- branches : |
125- ['main']
126- extra_plugins : |
127- @semantic-release/commit-analyzer
128- @semantic-release/release-notes-generator
129- @semantic-release/github
130- @semantic-release/changelog
131- @semantic-release/git
132- @semantic-release/exec
133- conventional-changelog-conventionalcommits
129+ tag_name : v${{ needs.release.outputs.new_release_version }}
130+ files : ${{ matrix.asset_name }}.tar.gz
134131 env :
135- GITHUB_TOKEN : ${{ steps.generate_token.outputs.token }}
136- CARGO_REGISTRY_TOKEN : ${{ secrets.CARGO_REGISTRY_TOKEN }}
132+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments