Files

56 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# The local check loop.
#
# scripts/check fmt, clippy, then every test
# scripts/check meeting::query fmt, then only the tests matching the filters
#
# Tests run through cargo-nextest (.config/nextest.toml): each test is its own
# process, and one that hangs is killed and reported by name. Exit codes:
# 10 fmt, 11 clippy, 12 tests, 13 code-shape, 14 Nix pins. NEXTEST_PROFILE=ci
# selects CI's profile.
# Tests build with the `capture` feature, so the debug-only capture
# experiment's code (macOS) is tested too. `crates/capture` and
# `crates/capture-core` sit outside the workspace (Cargo.toml), so on macOS
# they are named to be linted and tested.
set -uo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.."
packages=(--workspace)
if [[ "$(uname -s)" == Darwin ]]; then
# zbus depends on the crates.io `hex`, so the root package is named with its
# version. Not the full `cargo pkgid`: its path URL names this checkout,
# which matches nothing once HiveMind runs cargo in a copy on another Mac.
pkgid="$(cargo pkgid)"
packages=(-p "hex@${pkgid##*[#@]}" -p scrawl-router -p scrawl-capture -p capture-core)
fi
stage() {
printf '\n==> %s\n' "$1"
}
stage "fmt"
cargo fmt --all --check || exit 10
stage "code-shape"
python3 scripts/code-shape.py --check || exit 13
stage "nix pins"
python3 scripts/test-check-nix-git-pins.py || exit 14
python3 scripts/check-nix-git-pins.py || exit 14
if [[ $# -eq 0 ]]; then
stage "clippy"
cargo clippy --locked "${packages[@]}" --all-targets --features onnx-benchmark -- -D warnings || exit 11
fi
if command -v cargo-nextest >/dev/null 2>&1; then
stage "test (nextest${1:+: $*})"
cargo nextest run --locked "${packages[@]}" --no-tests=warn "$@" || exit 12
else
stage "test (cargo test${1:+: $*})"
echo "cargo-nextest is not installed, so a hung test stalls the run without" >&2
echo "a name. Install it with: brew install cargo-nextest" >&2
cargo test --locked "${packages[@]}" -- "$@" || exit 12
fi