name: CI
on:
push:
branches: [main, develop]
paths-ignore:
- '**.md'
- 'justfile'
- 'LICENSE'
pull_request:
branches: [main, develop]
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
actionlint:
name: Lint Actions
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run actionlint
uses: rhysd/actionlint@v1.7.10
check:
name: Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libasound2-dev
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('rust-toolchain*') }}
- name: Check formatting
run: cargo fmt --all -- --check
- name: Run clippy
run: cargo clippy --all-targets -- -A dead_code -A clippy::too_many_arguments -A clippy::unnecessary_lazy_evaluations -A clippy::derivable_impls -A clippy::map_unwrap_or -A clippy::needless_borrow -A clippy::needless_return -A clippy::field_reassign_with_default -A clippy::overly_complex_bool_expr -A unused_variables -A unused_mut -A unused_imports -D warnings
test:
name: Test
runs-on: ubuntu-latest
needs: check
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y libasound2-dev
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
shared-key: ${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}-${{ hashFiles('rust-toolchain*') }}
- name: Build binary for integration tests
run: cargo build
- name: Run tests
run: cargo test --all-features
security:
name: Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install cargo-audit
uses: taiki-e/install-action@v2.67.4
with:
tool: cargo-audit
- name: Run cargo audit
run: cargo audit