on:
push:
branches:
- main
pull_request:
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
env:
EXTERNAL_DEPENDENCIES: libasound2-dev libudev-dev libwayland-dev wget gzip
RUSTFLAGS: -Awarnings
CARGO_PROFILE_debug_CODEGEN_UNITS: 1
CARGO_PROFILE_debug_INCREMENTAL: false
CARGO_BUILD_JOBS: 2
name: build
jobs:
build-dev:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- uses: rui314/setup-mold@v1
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
- name: Build dev
run: cargo build --workspace --all-features
check:
runs-on: ubuntu-latest
needs: [ build-dev ]
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- run: cargo check --all-features --workspace
semver-check:
runs-on: ubuntu-latest
needs: [ build-dev ]
steps:
- uses: actions/checkout@v4
- name: Check semver
uses: obi1kenobi/cargo-semver-checks-action@v2
unit-test:
runs-on: ubuntu-latest
needs: [ build-dev, check ]
permissions: write-all
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- uses: rui314/setup-mold@v1
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
cache-all-crates: true
save-if: 'false'
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- run: cargo nextest run --workspace --all-features --profile ci-unit -E 'kind(bin) + kind(lib)'
name: Run unit tests
- name: Test Report
uses: dorny/test-reporter@v1
if: success() || failure()
with:
name: Unit Test Results
path: target/nextest/ci-unit/junit.xml
reporter: java-junit
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
integration-test:
needs: [ build-dev, unit-test ]
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- uses: rui314/setup-mold@v1
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
save-if: 'false'
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- run: cargo nextest run --workspace --all-features --profile ci-int -E 'kind(test)'
name: Run integration tests
- name: Test Report
uses: dorny/test-reporter@v1
if: success() || failure()
with:
name: Integration Test Results
path: target/nextest/ci-int/junit.xml
reporter: java-junit
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
fmt:
needs: [ check ]
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal -c rustfmt
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
save-if: 'false'
- name: Check rustfmt
run: cargo fmt -- --check
clippy:
needs: [ fmt ]
permissions: write-all
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust
run: rustup toolchain install stable --profile minimal -c clippy
- name: Install Dependencies
run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
- uses: Swatinem/rust-cache@v2
with:
shared-key: dev
save-if: 'false'
- name: Check rustfmt
run: cargo clippy