Skip to content

Commit 8636f04

Browse files
committed
fix: re-architect release pipeline to ensure version correctness
1 parent 5d8317c commit 8636f04

2 files changed

Lines changed: 56 additions & 78 deletions

File tree

.github/workflows/release.yml

Lines changed: 54 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -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:
@@ -58,6 +103,8 @@ jobs:
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 }}

.releaserc

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,29 +20,11 @@
2020
[
2121
"@semantic-release/exec",
2222
{
23-
"prepareCmd": "sed -i 's/^version = \".*\"/version = \"${nextRelease.version}\"/' Cargo.toml && cargo build --release",
23+
"prepareCmd": "sed -i 's/^version = \".*\"/version = \"${nextRelease.version}\"/' Cargo.toml",
2424
"publishCmd": "cargo publish"
2525
}
2626
],
27-
[
28-
"@semantic-release/github",
29-
{
30-
"assets": [
31-
{
32-
"path": "pvm-*-linux-x86_64.tar.gz",
33-
"label": "Linux x86_64"
34-
},
35-
{
36-
"path": "pvm-*-macos-x86_64.tar.gz",
37-
"label": "macOS x86_64"
38-
},
39-
{
40-
"path": "pvm-*-macos-aarch64.tar.gz",
41-
"label": "macOS Apple Silicon"
42-
}
43-
]
44-
}
45-
],
27+
"@semantic-release/github",
4628
[
4729
"@semantic-release/git",
4830
{

0 commit comments

Comments
 (0)