name: Publish to crates.io
on:
workflow_dispatch: push:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-Dwarnings"
jobs:
verify:
name: Verify before publish
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache dependencies
uses: Swatinem/rust-cache@v2
- name: Check compilation
run: cargo check --all-features
- name: Run tests
run: cargo test --all-features
- name: Check formatting
run: cargo fmt --all -- --check
- name: Run clippy
run: cargo clippy --all-features -- -D warnings
- name: Verify docs
env:
RUSTDOCFLAGS: "-D warnings"
run: cargo doc --no-deps --all-features
publish:
name: Publish to crates.io
needs: verify
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache dependencies
uses: Swatinem/rust-cache@v2
- name: Verify package
run: cargo publish --dry-run
- name: Publish to crates.io
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: cargo publish
notify:
name: Notify on completion
needs: publish
runs-on: ubuntu-latest
if: always()
steps:
- name: Check publish status
if: needs.publish.result == 'success'
run: |
echo "Package successfully published to crates.io!"
- name: Check for failure
if: needs.publish.result != 'success'
run: |
echo "Failed to publish package!"
exit 1