name: Release on: push: tags: - 'v*' permissions: contents: write jobs: verify: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Verify Cargo.toml version matches tag run: | CARGO_VER="v$(grep '^version' Cargo.toml | head -1 | sed 's/.*"\(.*\)"/\1/')" if [ "$CARGO_VER" != "${{ github.ref_name }}" ]; then echo "::error::Cargo.toml says $CARGO_VER but tag is ${{ github.ref_name }}" exit 1 fi echo "Version match: $CARGO_VER" test: needs: verify runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@1.86.0 - run: cargo test publish: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@1.86.0 - name: Publish to crates.io run: cargo publish env: CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} release: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: generate_release_notes: true