name: Continuous Integration
on:
pull_request:
push:
branches:
- main
jobs:
check:
name: Compile and Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dsherret/rust-toolchain-file@v1
- name: Rust Cache
uses: Swatinem/rust-cache@v2
- name: Install Nextest
uses: taiki-e/install-action@nextest
- name: Install cargo-hack
uses: taiki-e/install-action@cargo-hack
- name: Type Checking
run: cargo check --workspace --verbose --locked
- name: Build
run: cargo build --workspace --verbose --locked
- name: Test
run: cargo nextest run --workspace --verbose --locked
- name: Test feature powerset
run: cargo hack test --feature-powerset --exclude-features unstable-doc-cfg
lints:
name: Linting and Formatting
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Rust Cache
uses: Swatinem/rust-cache@v2
- name: Setup Rust
uses: dsherret/rust-toolchain-file@v1
- name: Check Formatting
run: cargo fmt --all --verbose --check
- name: Clippy
run: cargo clippy --workspace --verbose
api-docs:
name: Publish API Docs to GitHub Pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Rust
uses: dtolnay/rust-toolchain@nightly
- name: Rust Cache
uses: Swatinem/rust-cache@v2
- name: Generate API docs
run: cargo doc --workspace --verbose --locked
- name: Redirect top-level GitHub Pages
run: 'echo ''<meta http-equiv="refresh" content="0; url=gcode/index.html" />'' > target/doc/index.html'
shell: bash
- name: Upload API Docs
uses: JamesIves/github-pages-deploy-action@4.1.1
if: github.ref == 'refs/heads/main'
with:
branch: gh-pages
folder: target/doc
workflow-times:
name: Workflow Timings
runs-on: ubuntu-latest
needs:
- check
steps:
- name: Time Reporter
uses: Michael-F-Bryan/workflow-timer@v0.2.3
with:
token: ${{ secrets.GITHUB_TOKEN }}
jobs: |
Compile and Test