scripts/check_test_wiring.py and scripts/check_security_coverage.py import tomllib, which landed in Python 3.11. macOS ships /usr/bin/python3 at 3.9, so `make pre-commit` failed on a clean machine with `ModuleNotFoundError: No module named 'tomllib'` in test-wiring-check, even though the checkers themselves are fine. Add scripts/python_bin.sh, which resolves an interpreter (explicit RUSTFS_PYTHON, then python3.14..3.11/python3/python on PATH, then a `uv run --python 3.12 --no-project` fallback) and execs it, failing with the concrete remediation when nothing usable exists. Route the Make call sites through RUSTFS_PYTHON_BIN. CI workflows keep calling python3 directly because their runners already provide 3.11+.
27 lines
1.5 KiB
Makefile
27 lines
1.5 KiB
Makefile
## —— Coverage --------------------------------------------------------------------------------------
|
|
|
|
# Local equivalent of the weekly coverage workflow (.github/workflows/coverage.yml,
|
|
# backlog#1153 infra-5): same measurement scope (--workspace --exclude e2e_test,
|
|
# nextest `ci` profile) and the same per-crate table. Slow — the instrumented
|
|
# build cannot reuse your normal target cache and then runs the whole suite.
|
|
# Doctests are not measured (needs nightly). Outputs land in target/llvm-cov/.
|
|
.PHONY: coverage
|
|
coverage: core-deps ## Workspace line coverage (cargo-llvm-cov + nextest; slow, writes target/llvm-cov/)
|
|
@if ! command -v cargo-llvm-cov >/dev/null 2>&1; then \
|
|
echo >&2 "❌ cargo-llvm-cov is required for 'make coverage' but was not found."; \
|
|
echo >&2 " Install it with:"; \
|
|
echo >&2 " cargo install cargo-llvm-cov --locked"; \
|
|
echo >&2 " rustup component add llvm-tools-preview"; \
|
|
exit 1; \
|
|
fi
|
|
@if ! command -v cargo-nextest >/dev/null 2>&1; then \
|
|
echo >&2 "❌ cargo-nextest is required for 'make coverage' (see 'make test')."; \
|
|
echo >&2 " Install it with: cargo install cargo-nextest --locked"; \
|
|
exit 1; \
|
|
fi
|
|
NEXTEST_PROFILE=ci cargo llvm-cov nextest --workspace --exclude e2e_test --no-report
|
|
@mkdir -p target/llvm-cov
|
|
cargo llvm-cov report --lcov --output-path target/llvm-cov/lcov.info
|
|
cargo llvm-cov report --json --output-path target/llvm-cov/coverage.json
|
|
$(RUSTFS_PYTHON_BIN) scripts/coverage_per_crate.py target/llvm-cov/coverage.json
|