Skip to content

Commit 7ad4fc4

Browse files
committed
Create GitHub release in publish step
Automate the last step in publishing, so that pushing a tag does everything required. The generated GitHub release notes aren't the prettiest, but sufficient for a project of this size and change frequency.
1 parent 6cd40fe commit 7ad4fc4

1 file changed

Lines changed: 40 additions & 0 deletions

File tree

.github/workflows/publish.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ jobs:
1616
runs-on: ubuntu-latest
1717
environment:
1818
name: crates-io
19+
outputs:
20+
prerelease: ${{ steps.version.outputs.prerelease }}
1921

2022
permissions:
2123
id-token: write # for Trusted Publishing to crates.io
@@ -25,10 +27,48 @@ jobs:
2527
with:
2628
persist-credentials: false
2729

30+
- name: Check tag matches crate version
31+
id: version
32+
run: |
33+
crate_version="$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].version')"
34+
tag_version="${GITHUB_REF_NAME#v}"
35+
36+
if [[ "${tag_version}" != "${crate_version}" ]]; then
37+
echo "::error::Tag ${GITHUB_REF_NAME} does not match crate version ${crate_version}"
38+
exit 1
39+
fi
40+
41+
if [[ "${crate_version%%+*}" == *-* ]]; then
42+
echo "prerelease=true" >> "${GITHUB_OUTPUT}"
43+
else
44+
echo "prerelease=false" >> "${GITHUB_OUTPUT}"
45+
fi
46+
2847
- uses: rust-lang/crates-io-auth-action@bbd81622f20ce9e2dd9622e3218b975523e45bbe # v1.0.4
2948
id: auth
3049

3150
- name: Publish to crates.io
3251
run: cargo publish
3352
env:
3453
CARGO_REGISTRY_TOKEN: "${{ steps.auth.outputs.token }}"
54+
55+
release:
56+
name: Create GitHub release
57+
runs-on: ubuntu-latest
58+
needs: publish
59+
60+
permissions:
61+
contents: write # for creating GitHub releases
62+
63+
steps:
64+
- name: Create GitHub release
65+
run: |
66+
if [[ "${PRERELEASE}" == "true" ]]; then
67+
gh release create "${GITHUB_REF_NAME}" --verify-tag --title "${GITHUB_REF_NAME}" --generate-notes --prerelease
68+
else
69+
gh release create "${GITHUB_REF_NAME}" --verify-tag --title "${GITHUB_REF_NAME}" --generate-notes
70+
fi
71+
env:
72+
GH_TOKEN: ${{ github.token }}
73+
GH_REPO: ${{ github.repository }}
74+
PRERELEASE: ${{ needs.publish.outputs.prerelease }}

0 commit comments

Comments
 (0)