name: Publish to crates.io
on:
push:
tags:
- 'v*'
jobs:
publish:
name: Publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Verify tag version matches Cargo.toml
run: |
# Extract version from Cargo.toml
CARGO_VERSION=$(grep -m1 'version =' Cargo.toml | cut -d '"' -f2)
# Extract version from git tag
TAG_VERSION=${GITHUB_REF#refs/tags/v}
# Check if versions match
if [ "$CARGO_VERSION" != "$TAG_VERSION" ]; then
echo "Version mismatch: Cargo.toml version ($CARGO_VERSION) does not match tag version ($TAG_VERSION)"
exit 1
fi
echo "Version $CARGO_VERSION matches tag $TAG_VERSION"
- name: Cargo login
run: cargo login ${{ secrets.CRATES_IO_TOKEN }}
- name: Cargo publish
run: cargo publish