name: CI
env:
MIN_SUPPORTED_RUST_VERSION: "1.63.0"
on: [push, pull_request]
jobs:
code_quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Install rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
default: true
profile: minimal components: clippy, rustfmt
- name: Install latest just release
uses: extractions/setup-just@v1
- name: Install latest dprint release
uses: taiki-e/install-action@v1
with:
tool: dprint
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Ensure `fmt` has been run
run: just fmt-check
- name: Ensure MSRV is set in `clippy.toml`
run: grep "^msrv = \"${{ env.MIN_SUPPORTED_RUST_VERSION }}\"\$" clippy.toml
- name: Run clippy
run: just lint
msrv:
name: Minimum Supported Rust Version
runs-on: ubuntu-latest
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Install rust toolchain (v${{ env.MIN_SUPPORTED_RUST_VERSION }})
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.MIN_SUPPORTED_RUST_VERSION }}
default: true
profile: minimal
- name: Install latest nextest release
uses: taiki-e/install-action@nextest
- name: Install latest just release
uses: extractions/setup-just@v1
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Run tests
run: just test
build:
name: Build (${{ matrix.job.os }}, ${{ matrix.job.target }})
runs-on: ${{ matrix.job.os }}
strategy:
fail-fast: false
matrix:
job:
- { os: ubuntu-latest, target: x86_64-unknown-linux-gnu }
- { os: ubuntu-latest, target: x86_64-unknown-linux-musl , use-cross: true }
- { os: macos-latest , target: x86_64-apple-darwin }
- { os: windows-latest, target: x86_64-pc-windows-msvc }
steps:
- name: Checkout source code
uses: actions/checkout@v3
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
target: ${{ matrix.job.target }}
override: true
profile: minimal
- name: Cache
uses: Swatinem/rust-cache@v2
- name: Show version information
shell: bash
run: |
gcc --version || true
rustup -V
rustup toolchain list
rustup default
cargo -V
rustc -V
- name: Build
uses: actions-rs/cargo@v1
with:
use-cross: ${{ matrix.job.use-cross }}
command: build
args: --release --target=${{ matrix.job.target }}