name: Release and Publish
on:
release:
types:
- published
jobs:
publish-crate:
name: Publish to crates.io
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
profile: minimal
toolchain: stable
override: true
- name: Check version
id: check_version
run: |
CARGO_VERSION=$(grep '^version = ' Cargo.toml | sed 's/version = "\(.*\)"/\1/')
TAG_VERSION="${GITHUB_REF#refs/tags/v}"
echo "CARGO_VERSION=${CARGO_VERSION}" >> $GITHUB_OUTPUT
echo "TAG_VERSION=${TAG_VERSION}" >> $GITHUB_OUTPUT
if [ "$CARGO_VERSION" != "$TAG_VERSION" ]; then
echo "::error::Version mismatch: Cargo.toml version ($CARGO_VERSION) does not match tag version ($TAG_VERSION)"
exit 1
fi
- name: Cargo login
run: cargo login ${{ secrets.CRATES_TOKEN }}
- name: Cargo package
run: cargo package --allow-dirty
- name: Cargo publish
run: cargo publish --allow-dirty