name: Publish crates (single or workspace)
on:
push:
branches: [ master ]
tags: [ "v*" ]
workflow_dispatch:
jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Lint & Test
run: |
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo build --workspace --all-features
cargo test --workspace --all-features -- --nocapture
- name: Prevent duplicate shared structs
run: ./scripts/deny_dupes.sh
- name: Verify published schema IDs
run: ./scripts/check_schema_ids.sh
msrv:
runs-on: ubuntu-latest
strategy:
matrix:
profile:
- { name: default, args: "" }
- { name: schema, args: "--features schema" }
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.85.0
- uses: Swatinem/rust-cache@v2
- name: Cargo check (${{ matrix.profile.name }})
run: cargo check --workspace ${{ matrix.profile.args }}
publish:
if: github.event_name == 'push'
needs: [build-test, msrv]
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Publish changed crates
uses: katyo/publish-crates@v2
with:
path: .
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
ignore-unpublished-changes: true
check-repo: true
dry-run: false