name: CI
permissions:
contents: read
on:
pull_request:
branches:
- main
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
toolchain:
name: Setup Rust toolchain
runs-on: ubuntu-latest
outputs:
stable: ${{ steps.set_toolchain.outputs.stable }}
nightly: ${{ steps.set_toolchain.outputs.nightly }}
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Output toolchain
id: set_toolchain
env:
toolchain_toml: "rust-toolchain.toml"
run: |
stable=$(grep channel rust-toolchain.toml | sed -r 's/channel = "(.*)"/\1/')
echo "stable=$stable" | tee -a "$GITHUB_OUTPUT"
nightly=$(rustc --version | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}' | sed 's/^/nightly-/')
echo "nightly=$nightly" | tee -a "$GITHUB_OUTPUT"
fmt-check:
name: Check Code Format
runs-on: ubuntu-latest
needs: toolchain
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: ${{ needs.toolchain.outputs.nightly }}
components: rustfmt
- name: Install just
uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a with:
tool: just
- name: Setup Rust cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: just fmt-check
run: |
just fmt-check
lint:
runs-on: ubuntu-latest
name: Lint Code
needs: toolchain
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: ${{ needs.toolchain.outputs.stable }}
components: clippy
- name: Install just
uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a with:
tool: just
- name: Setup Rust cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: just lint
run: |
rustup override set ${{ needs.toolchain.outputs.stable }}
just lint
test:
runs-on: ubuntu-latest
name: Run Tests
needs: toolchain
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: ${{ needs.toolchain.outputs.stable }}
- name: Install just
uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a with:
tool: just
- name: Setup Rust cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: just test
run: |
rustup override set ${{ needs.toolchain.outputs.stable }}
just test
doc:
runs-on: ubuntu-latest
name: Create Documentation
needs: toolchain
steps:
- name: Checkout repository
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Install Rust
uses: dtolnay/rust-toolchain@3c5f7ea28cd621ae0bf5283f0e981fb97b8a7af9
with:
toolchain: ${{ needs.toolchain.outputs.stable }}
components: rust-docs
- name: Install just
uses: taiki-e/install-action@6c1f7cf125e42770ff087ea443901b487cc5471a with:
tool: just
- name: Setup Rust cache
uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4
- name: just doc
run: |
just doc