Skip to content

Commit 1ea273c

Browse files
authored
Add release workflow for crates.io publishing (#21)
2 parents 307c348 + 7674463 commit 1ea273c

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

.github/workflows/release.yaml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Publish to crates.io
2+
3+
on:
4+
push:
5+
tags: ['v*']
6+
7+
jobs:
8+
test:
9+
runs-on: ubuntu-24.04
10+
11+
steps:
12+
- name: Print environment (debug)
13+
run: env
14+
15+
- name: Fetch sources
16+
uses: actions/checkout@v4
17+
with:
18+
submodules: recursive
19+
20+
- name: Run tests
21+
uses: frequenz-floss/gh-action-cargo-test@v1.0.0
22+
23+
create-github-release:
24+
needs: ["test"]
25+
name: Create GitHub release
26+
runs-on: ubuntu-24.04
27+
permissions:
28+
# We need write permissions on contents to create GitHub releases and on
29+
# discussions to create the release announcement in the discussion forums
30+
contents: write
31+
discussions: write
32+
steps:
33+
- name: Download RELEASE_NOTES.md
34+
run: |
35+
set -ux
36+
gh api \
37+
-X GET \
38+
-f ref=$REF \
39+
-H "Accept: application/vnd.github.raw" \
40+
"/repos/$REPOSITORY/contents/RELEASE_NOTES.md" \
41+
> RELEASE_NOTES.md
42+
env:
43+
REF: ${{ github.ref }}
44+
REPOSITORY: ${{ github.repository }}
45+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46+
47+
- name: Create GitHub release
48+
run: |
49+
set -ux
50+
extra_opts=
51+
if echo "$REF_NAME" | grep -- -; then extra_opts=" --prerelease"; fi
52+
gh release create \
53+
-R "$REPOSITORY" \
54+
--notes-file RELEASE_NOTES.md \
55+
--generate-notes \
56+
$extra_opts \
57+
$REF_NAME
58+
env:
59+
REF_NAME: ${{ github.ref_name }}
60+
REPOSITORY: ${{ github.repository }}
61+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
62+
63+
publish:
64+
needs: ["create-github-release"]
65+
runs-on: ubuntu-24.04
66+
environment: release
67+
permissions:
68+
id-token: write
69+
steps:
70+
- uses: actions/checkout@v5
71+
- uses: rust-lang/crates-io-auth-action@b7e9a28eded4986ec6b1fa40eeee8f8f165559ec # v1.0.3
72+
id: auth
73+
- run: cargo publish
74+
env:
75+
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}

0 commit comments

Comments
 (0)