name: CI on: push: branches: - master - main - dev pull_request: env: CARGO_TERM_COLOR: always RUSTFLAGS: -Dwarnings CARGO_INCREMENTAL: "0" SCCACHE_GHA_ENABLED: "true" jobs: checks: name: fmt / clippy / check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable with: components: rustfmt, clippy - name: sccache uses: mozilla-actions/sccache-action@v0.0.9 - uses: Swatinem/rust-cache@v2 with: shared-key: dcr-ci cache-all-crates: true - name: Format run: cargo fmt --all --check - name: Clippy (default features) run: cargo clippy --all-targets -- -D warnings - name: Clippy (all features) run: cargo clippy --all-targets --all-features -- -D warnings - name: Check (all features) run: cargo check --all-targets --all-features test: name: tests (${{ matrix.os }}) needs: checks strategy: fail-fast: false matrix: os: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: sccache uses: mozilla-actions/sccache-action@v0.0.9 - uses: Swatinem/rust-cache@v2 with: shared-key: dcr-ci cache-all-crates: true cache-on-failure: true - name: Cache apt packages if: runner.os == 'Linux' uses: actions/cache@v4 with: path: /var/cache/apt/archives key: apt-${{ runner.os }}-${{ hashFiles('.github/workflows/ci.yml') }} restore-keys: apt-${{ runner.os }}- - name: Install Linux tools if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y \ build-essential \ clang \ nasm \ clang-format \ clang-tidy \ git \ llvm - name: Install macOS tools if: runner.os == 'macOS' run: | brew install nasm llvm || true echo "$(brew --prefix llvm)/bin" >> "$GITHUB_PATH" - name: Install Windows tools if: runner.os == 'Windows' shell: pwsh run: | choco install nasm llvm -y echo "C:\Program Files\NASM" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append if (Test-Path "C:\Program Files\LLVM\bin") { echo "C:\Program Files\LLVM\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append } - name: Unit tests (binary crate) run: cargo test --bins -- --nocapture - name: Integration tests (default features) run: cargo test --tests -- --nocapture - name: Integration tests (archive feature) if: runner.os != 'Windows' run: cargo test --tests --features archive -- --nocapture - name: sccache stats if: always() run: sccache --show-stats || true test-archive-linux: name: archive feature smoke needs: checks runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: sccache uses: mozilla-actions/sccache-action@v0.0.9 - uses: Swatinem/rust-cache@v2 with: shared-key: dcr-ci cache-all-crates: true - name: Install tools run: | sudo apt-get update sudo apt-get install -y build-essential clang nasm llvm - name: Build with archive run: cargo build --features archive - name: Flat-bin + unit suite with archive run: cargo test --features archive --test cli_build --test cli_workspace --test cli_errors -- --nocapture - name: sccache stats if: always() run: sccache --show-stats || true