name: Publish to crates.io
on:
push:
branches:
- master
- main
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- run: cargo install cargo-readme
- run: make ci
publish:
needs: check
runs-on: ubuntu-latest
environment: release permissions:
id-token: write contents: write steps:
- uses: actions/checkout@v6
- uses: rust-lang/crates-io-auth-action@v1
id: auth
- name: Publish
id: publish
run: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
- name: Tag the released version
if: steps.publish.outcome == 'success'
run: |
version="$(cargo metadata --format-version 1 --no-deps | jq -r '.packages[0].version')"
tag="v${version}"
git fetch --tags --force --quiet
if git rev-parse -q --verify "refs/tags/${tag}" >/dev/null; then
echo "Tag ${tag} already exists; nothing to do."
else
git tag "${tag}"
git push origin "${tag}"
echo "Created and pushed ${tag}."
fi