name: Upload Crates.io Package
on:
push:
tags:
- v*.*.*
permissions:
contents: read
jobs:
test:
name: Test
strategy:
matrix:
os: [ ubuntu-latest, macOS-latest, "windows-latest" ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
shared-key: publish-${{ runner.os }}
- name: cargo fetch
run: cargo fetch
- name: cargo build
run: cargo build --tests
- name: cargo test
run: cargo test
cargo-deny:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: EmbarkStudios/cargo-deny-action@v2
publish_check:
name: Publish check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
shared-key: publish-check
- name: cargo fetch
run: cargo fetch
- name: cargo publish
run: cargo publish --dry-run
- name: docs check
run: cargo doc --no-deps
publish:
name: Publish
runs-on: ubuntu-latest
needs: [ test, cargo-deny, publish_check ]
if: startsWith(github.ref, 'refs/tags/')
permissions:
contents: write
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
shared-key: publish
- name: cargo fetch
run: cargo fetch
- name: cargo publish
env:
CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
run: cargo publish
- name: Create Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.ref_name }}
name: ${{ github.ref_name }}
generate_release_notes: true