Continuous Integration #859
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Continuous Integration | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
schedule: | |
- cron: "0 0 * * 0" | |
jobs: | |
build: | |
name: Build on ${{ matrix.build.OS }} (${{ matrix.build.TARGET }}) | |
runs-on: ${{ matrix.build.OS }} | |
strategy: | |
fail-fast: false | |
matrix: | |
build: | |
- { | |
OS: ubuntu-22.04, | |
TOOLCHAIN: stable, | |
TARGET: x86_64-unknown-linux-gnu, | |
} | |
- { | |
OS: windows-2022, | |
TOOLCHAIN: stable, | |
TARGET: x86_64-pc-windows-msvc, | |
} | |
- { OS: macos-14, TOOLCHAIN: stable, TARGET: x86_64-apple-darwin } | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
if: matrix.build.OS == 'ubuntu-22.04' | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y \ | |
--no-install-recommends \ | |
--allow-unauthenticated \ | |
libasound2-dev \ | |
libxi-dev \ | |
libxtst-dev \ | |
pkg-config | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.build.TOOLCHAIN }} | |
targets: ${{ matrix.build.TARGET }} | |
- name: Cache Cargo dependencies | |
uses: Swatinem/rust-cache@v2 | |
- name: Build the project | |
run: cargo build --locked --verbose | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: daktilo-${{ matrix.build.TARGET }}-assets | |
path: target/debug/daktilo* | |
test: | |
name: Test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y \ | |
--no-install-recommends \ | |
--allow-unauthenticated \ | |
libasound2-dev \ | |
libxi-dev \ | |
libxtst-dev \ | |
pkg-config | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
- name: Install cargo-llvm-cov | |
uses: taiki-e/install-action@cargo-llvm-cov | |
- name: Cache Cargo dependencies | |
uses: Swatinem/rust-cache@v2 | |
- name: Generate code coverage | |
run: cargo llvm-cov --lcov --output-path lcov.info | |
env: | |
OUT_DIR: target | |
- name: Upload coverage to Codecov | |
uses: codecov/codecov-action@v4 | |
with: | |
name: code-coverage-report | |
files: lcov.info | |
fail_ci_if_error: true | |
verbose: true | |
env: | |
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repository | |
if: github.event_name != 'pull_request' | |
uses: actions/checkout@v4 | |
- name: Checkout the repository | |
if: github.event_name == 'pull_request' | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y \ | |
--no-install-recommends \ | |
--allow-unauthenticated \ | |
libasound2-dev \ | |
libxi-dev \ | |
libxtst-dev \ | |
pkg-config | |
- name: Install Rust toolchain | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
components: rustfmt, clippy | |
- name: Cache Cargo dependencies | |
uses: Swatinem/rust-cache@v2 | |
- name: Check code formatting | |
run: cargo fmt --all -- --check | |
- name: Install editorconfig-checker | |
uses: editorconfig-checker/action-editorconfig-checker@main | |
- name: Check file formatting | |
run: editorconfig-checker | |
- name: Check lints | |
run: cargo clippy -- -D warnings | |
- name: Run cargo-deny | |
uses: EmbarkStudios/cargo-deny-action@v2 | |
with: | |
command: check licenses sources | |
- name: Run cargo-audit | |
uses: actions-rs/audit-check@v1 | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Run committed | |
uses: crate-ci/committed@master | |
with: | |
args: "-vv" | |
commits: "HEAD" | |
- name: Run lychee | |
uses: lycheeverse/lychee-action@v1 | |
with: | |
args: -v *.md | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Check typos | |
uses: crate-ci/typos@master | |
- name: Install cargo-binstall | |
uses: taiki-e/install-action@cargo-binstall | |
- name: Install cargo-msrv | |
run: cargo binstall -y --force cargo-msrv | |
- name: Run cargo-msrv | |
shell: bash | |
run: | | |
for package in "daktilo" "daktilo_lib"; do | |
printf "Checking MSRV for $package..." | |
cargo msrv --output-format json --path "crates/$package" verify | tail -n 1 | jq --exit-status '.success' | |
done |