name: Release
on:
push:
tags:
- 'v*.*.*'
permissions:
contents: write
id-token: write
jobs:
lints:
name: Lints
env:
RUSTFLAGS: "-D warnings"
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
arch: x86_64
- os: ubuntu-24.04-arm
arch: aarch64
- os: macos-15-intel
arch: x86_64
- os: macos-latest
arch: aarch64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- uses: Swatinem/rust-cache@v2
with:
key: rust-${{ runner.os }}-${{ matrix.arch }}-stable
- name: Cargo check (lib)
run: cargo check
- name: Cargo check (tests)
run: cargo check --tests
- name: Cargo check (examples)
run: cargo check --examples
examples:
needs: lints
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04-arm
arch: aarch64
- os: macos-15-intel
arch: x86_64
- os: ubuntu-latest
arch: x86_64
- os: macos-latest
arch: aarch64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Cache
uses: Swatinem/rust-cache@v2
with:
key: rust-${{ runner.os }}-${{ matrix.arch }}-stable
cache-on-failure: true
- name: Example (FrozenFile)
run: |
cargo run --release --example ff w
cargo run --release --example ff r
- name: Example (FrozenMMap)
run: |
cargo run --release --example fm
- name: Example (Crc32)
run: |
cargo run --release --example crc
- name: Example (BPool)
run: |
cargo run --release --example bp
- name: Example (MPSCQ)
run: |
cargo run --release --example mq
- name: Example (FrozenPipe)
run: |
cargo run --release --example fp
release:
needs: examples
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Draft Release
uses: softprops/action-gh-release@v1
with:
name: Release ${{ github.ref_name }}
tag_name: ${{ github.ref_name }}
draft: true
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
publish:
needs: release
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Toolchain
uses: actions-rust-lang/setup-rust-toolchain@v1
with:
toolchain: stable
- name: Auth
uses: rust-lang/crates-io-auth-action@v1
id: auth
- name: Dry Run
run: cargo publish --dry-run --locked
- name: Publish to `crates.io`
run: cargo publish --locked
env:
CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}