name: Rust
on:
push:
branches: [main]
pull_request:
env:
CARGO_TERM_COLOR: always
jobs:
ci:
needs: [style, build, test-matrix, coverage]
name: CI
runs-on: "ubuntu-latest"
steps:
- name: Done
run: exit 0
style:
name: Style
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v7
- name: Formatting
run: cargo fmt --check
- name: Clippy
run: cargo clippy --all-targets --all-features -- -D warnings
build:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Build
run: cargo build --verbose
test-matrix:
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
build: [debug, release]
include:
- build: debug
build_flag: ""
- build: release
build_flag: "--release"
name: Test ${{ matrix.os }} ${{ matrix.build }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
- name: Run Tests
run: cargo test --verbose ${{ matrix.build_flag }}
coverage:
name: Coverage
runs-on: "ubuntu-latest"
steps:
- uses: actions/checkout@v7
- name: Install LLVM-Coverage
uses: taiki-e/install-action@cargo-llvm-cov
- name: Measure Coverage
run: cargo llvm-cov --lcov --output-path coverage.lcov
- name: Upload Coverage
uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage.lcov