mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-23 20:59:05 +00:00
42 lines
2.0 KiB
Bash
Executable File
42 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
workflow=".github/workflows/performance-ab.yml"
|
|
|
|
require_absent_pattern() {
|
|
local pattern="$1"
|
|
local description="$2"
|
|
|
|
if grep -Eq -- "$pattern" "$workflow"; then
|
|
echo "invalid performance A/B workflow contract: $description" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_present_pattern() {
|
|
local pattern="$1"
|
|
local description="$2"
|
|
|
|
if ! grep -Eq -- "$pattern" "$workflow"; then
|
|
echo "invalid performance A/B workflow contract: $description" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
require_absent_pattern '(^|[^[:alnum:]_])pull_request(_target)?([^[:alnum:]_]|$)' "the workflow must not contain PR event handling"
|
|
require_absent_pattern 'pull-requests[[:space:]]*:[[:space:]]*write' "the workflow must not receive PR write permission"
|
|
require_absent_pattern 'permissions[[:space:]]*:[[:space:]]*write-all' "the workflow must not receive broad write permission"
|
|
require_absent_pattern '^[[:space:]]*push:' "the workflow must not spend a release build on every main push"
|
|
require_present_pattern 'listWorkflowRuns' "the scheduled baseline must come from workflow history"
|
|
require_present_pattern 'status:[[:space:]]*"success"' "the scheduled baseline must be a successful run"
|
|
require_present_pattern 'SCHEDULED_BASELINE_SHA' "the resolved scheduled baseline must reach the comparison"
|
|
require_present_pattern "SCHEDULED_BASELINE_SHA:-\\\$candidate_sha" "the first scheduled run must seed from its verified candidate"
|
|
require_present_pattern 'git merge-base --is-ancestor' "the scheduled baseline must stay on candidate history"
|
|
require_present_pattern 'Cache successful candidate baseline' "a successful candidate must become the next cached baseline"
|
|
if ! sed -n '/^ warp-ab:/,/^ alert-on-failure:/p' "$workflow" | grep -Eq '^ timeout-minutes:[[:space:]]*180([[:space:]]|$)'; then
|
|
echo "invalid performance A/B workflow contract: the cold-cache path must fit both builds, the A/B run, and evidence publication" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "Performance A/B workflow contract ok."
|