WIP CI Windows #5
Workflow file for this run
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
on: [push, pull_request] | |
name: CI | |
env: | |
CARGO_OUTDATED: 0.14.0 | |
CARGO_AUDIT: 0.18.3 | |
jobs: | |
fmt: | |
name: Format check | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
- name: Install rustfmt | |
run: rustup component add rustfmt | |
- name: Perform format check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
lints: | |
name: Lints | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
toolchain: stable | |
components: clippy | |
override: true | |
- name: Cache cargo tools | |
id: cargo-tools-cache | |
uses: actions/cache@v3 | |
with: | |
path: cargo-tools | |
key: lint-tools-${{ env.CARGO_OUTDATED }}-${{ env.CARGO_AUDIT }} | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/.crates.toml | |
~/.cargo/.crates2.json | |
~/.cargo/bin | |
~/.cargo/registry/index | |
~/.cargo/registry/cache | |
target | |
key: lint-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} | |
- name: Install cargo tools if not cached | |
if: steps.cargo-tools-cache.outputs.cache-hit != 'true' | |
run: | | |
cargo install cargo-outdated --version ${{ env.CARGO_OUTDATED }} --root cargo-tools --target-dir cargo-tools-build | |
cargo install cargo-audit --version ${{ env.CARGO_AUDIT }} --root cargo-tools --target-dir cargo-tools-build | |
- name: Clippy | |
run: cargo clippy --no-deps -- -D warnings | |
- name: Outdated dependencies | |
# TODO: add support for githubActions format in cargo-outdated directly? | |
shell: python | |
run: | | |
import json | |
import subprocess | |
import os | |
env = os.environ.copy() | |
env["PATH"] = os.getcwd() + "/cargo-tools/bin:" + env["PATH"] | |
ps = subprocess.Popen(['cargo', 'outdated', '--format', 'json'], stdout=subprocess.PIPE, env=env) | |
output = json.load(ps.stdout) | |
outdated = output['dependencies'] | |
for dep in outdated: | |
msg = "{}: project: {}, compat: {}, latest: {}, kind: {}".format(dep['name'], dep['project'], dep['compat'], dep['latest'], dep['kind']) | |
print("::warning title=Outdated dependency '{}'::{}".format(dep['name'], msg)) | |
- name: Audit | |
run: | | |
PATH="$PATH:$PWD/cargo-tools/bin" cargo audit | |
test-linux: | |
name: Test on Linux | |
needs: fmt | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/.crates.toml | |
~/.cargo/.crates2.json | |
~/.cargo/bin | |
~/.cargo/registry/index | |
~/.cargo/registry/cache | |
target | |
key: test-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} | |
- name: Test | |
run: cargo test --locked -- --nocapture | |
test-windows: | |
name: Test on Windows | |
needs: fmt | |
runs-on: windows-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: stable | |
override: true | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/.crates.toml | |
~/.cargo/.crates2.json | |
~/.cargo/bin | |
~/.cargo/registry/index | |
~/.cargo/registry/cache | |
target | |
key: test-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} | |
- name: Test | |
# tests must be run in one thread otherwise they attempt to overwrite each other's exe while building | |
run: cargo test --locked -- --nocapture --test-threads=1 | |
msrv: | |
name: MSRV check | |
needs: fmt | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v3 | |
- name: Extract MSRV | |
id: get-msrv | |
run: echo msrv=$(yq .package.rust-version Cargo.toml -oy) | tee -a "$GITHUB_OUTPUT" | |
- name: Setup Rust toolchain | |
uses: actions-rs/toolchain@v1 | |
with: | |
profile: minimal | |
toolchain: ${{ steps.get-msrv.outputs.msrv }} | |
override: true | |
- name: Cache dependencies | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/.crates.toml | |
~/.cargo/.crates2.json | |
~/.cargo/bin | |
~/.cargo/registry/index | |
~/.cargo/registry/cache | |
target | |
key: msrv-${{ runner.os }}-${{ hashFiles('Cargo.lock') }} | |
- name: Perform MSRV check | |
uses: actions-rs/cargo@v1 | |
with: | |
command: check | |
args: --locked |