---
name: Cargo Build & Test
on: push:
pull_request:
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-Dwarnings"
jobs:
build_and_test:
name: Rust project - latest
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- stable
- beta
- nightly
steps:
- name: Install dependencies
run: >
sudo apt-get update
&& sudo apt-get install --no-install-recommends --yes
bzip2 lz4 lzop pigz xz-utils zstd
- uses: actions/checkout@v4
- run: >
rustup update ${{ matrix.toolchain }}
&& rustup default ${{ matrix.toolchain }}
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo build --verbose
- run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-${{ matrix.toolchain }}
path: ./lcov.info
build_and_test_minimal:
name: Build and test with minimal deps
runs-on: ubuntu-latest
steps:
- name: Install dependencies
run: >
sudo apt-get update
&& sudo apt-get install --no-install-recommends --yes
bzip2 lz4 xz-utils zstd
- uses: actions/checkout@v4
- run: >
rustup update stable
&& rustup default stable
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo build --verbose
- run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-minimal
path: ./lcov.info
build_and_test_root:
name: Build and test as root
runs-on: ubuntu-latest
steps:
- name: Install dependencies
run: >
sudo apt-get update
&& sudo apt-get install --no-install-recommends --yes
bzip2 lz4 lzop pigz xz-utils zstd
- uses: actions/checkout@v4
- run: >
rustup update stable
&& rustup default stable
- name: Install cargo-llvm-cov
uses: taiki-e/install-action@cargo-llvm-cov
- run: cargo build --verbose
- run: >
CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_RUNNER='sudo -E'
cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-root
path: ./lcov.info
clippy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Clippy
run: cargo clippy --all-targets --all-features
rustfmt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run rustfmt
run: cargo fmt --all --check
upload-to-codecov:
if: ${{ always() }}
needs:
- build_and_test
- build_and_test_minimal
- build_and_test_root
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: true
man:
runs-on: ubuntu-latest
steps:
- name: Install asciidoctor
run: >
sudo apt-get update
&& sudo apt-get install --no-install-recommends --yes
asciidoctor
- uses: actions/checkout@v4
- name: Build man pages
run: asciidoctor -b manpage man/3cpio.1.adoc