mirror of
https://github.com/fluxerapp/fluxer.git
synced 2026-09-03 05:10:25 +03:00
46 lines
1.2 KiB
Bash
Executable File
46 lines
1.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
set -euo pipefail
|
|
|
|
BUDGET="${BENCH_REGRESSION_BUDGET_PERCENT:-5}"
|
|
MEASUREMENT_TIME="${BENCH_MEASUREMENT_TIME:-5}"
|
|
WARM_UP_TIME="${BENCH_WARM_UP_TIME:-2}"
|
|
|
|
log() { printf '[check-regression] %s\n' "$*" >&2; }
|
|
fail() {
|
|
log "ERROR: $*"
|
|
exit 1
|
|
}
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
fail "usage: $0 <crate-path> <bench-name>"
|
|
fi
|
|
|
|
CRATE_PATH="$1"
|
|
BENCH_NAME="$2"
|
|
|
|
[ -d "$CRATE_PATH" ] || fail "crate path not a directory: $CRATE_PATH"
|
|
[ -f "$CRATE_PATH/Cargo.toml" ] || fail "no Cargo.toml in $CRATE_PATH"
|
|
BASELINE="$CRATE_PATH/benches/baseline.json"
|
|
[ -f "$BASELINE" ] || fail "no baseline.json at $BASELINE"
|
|
command -v cargo >/dev/null || fail "cargo not on PATH"
|
|
command -v python3 >/dev/null || fail "python3 not on PATH"
|
|
|
|
LOG_FILE="$(mktemp -t bench-regression.XXXXXX.log)"
|
|
trap 'rm -f "$LOG_FILE"' EXIT
|
|
|
|
log "running cargo bench --bench $BENCH_NAME in $CRATE_PATH"
|
|
(
|
|
cd "$CRATE_PATH"
|
|
cargo bench --bench "$BENCH_NAME" -- \
|
|
--warm-up-time "$WARM_UP_TIME" \
|
|
--measurement-time "$MEASUREMENT_TIME"
|
|
) >"$LOG_FILE" 2>&1 || {
|
|
tail -50 "$LOG_FILE" >&2
|
|
fail "cargo bench failed; see log above"
|
|
}
|
|
|
|
BUDGET_PERCENT="$BUDGET" BASELINE_PATH="$BASELINE" \
|
|
python3 "$(dirname "$0")/_compare_criterion.py" "$LOG_FILE"
|