Skip to content

Commit 1caac95

Browse files
committed
fix(ci): stop weekly-refresh dying at the 6h ceiling before it dumps
Every run since at least 2026-08-03 has ended at 6:00:2x, always in "Enrich benchmarks (all sources)". GitHub reports a job that hits its 6h ceiling as *cancelled* rather than failed, so nothing ever appeared in the failed-run list while validate, integrity, the static dump and the refresh PR were skipped every single week. The cost is not theoretical: the published dump has drifted away from data/ because the dump step never ran. 565 of 2,030 gpu pages, and 93 more across soc/watch/pda/brand, currently advertise a `verified` value the record no longer has. Give collection a 200-minute budget it checks between sources, so the remainder of the pipeline always gets to run, and rotate the starting point by ISO week so sources at the tail of the list are not starved once the budget starts biting. Add a 330-minute job timeout so this can never again be silently truncated by the platform ceiling. Refs #1
1 parent c841b53 commit 1caac95

1 file changed

Lines changed: 30 additions & 3 deletions

File tree

.github/workflows/weekly-refresh.yml

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ concurrency:
3333
jobs:
3434
refresh:
3535
runs-on: ubuntu-latest
36+
# A job that runs into GitHub's 6h ceiling is reported as *cancelled*,
37+
# not failed, so it never surfaces as a broken run. Stop short of it.
38+
timeout-minutes: 330
3639
env:
3740
SLEEP: ${{ inputs.sleep || '1.0' }}
3841
TECHAPI_TOKEN: ${{ secrets.TECHAPI_TOKEN }}
@@ -80,11 +83,35 @@ jobs:
8083
fi
8184
echo "::endgroup::"
8285
}
83-
for s in passmark cinebench-legacy cinebench-r23 cinebench-2024 \
84-
cinebench-nbc geekbench-nbc spec-cpu2006 topcpu-cpu; do
86+
# The scrape grew past GitHub's 6h job ceiling, and an over-running
87+
# job is reported as "cancelled" rather than failed — so nothing looked
88+
# broken while validate, the static dump and the refresh PR were being
89+
# skipped every week. Give collection a budget it cannot exceed and
90+
# leave the remainder to the rest of the pipeline.
91+
BUDGET_S=$(( 200 * 60 ))
92+
DEADLINE=$(( $(date +%s) + BUDGET_S ))
93+
budget_left() {
94+
if [ "$(date +%s)" -ge "$DEADLINE" ]; then
95+
echo "::warning::collection budget spent; remaining sources deferred to the next run"
96+
return 1
97+
fi
98+
}
99+
# Rotate where the list starts each week: with a fixed order the tail
100+
# is starved forever once the budget begins to bite.
101+
rotate() {
102+
local -n _a="$1"
103+
local n=${#_a[@]} off=$(( 10#$(date -u +%V) % ${#_a[@]} ))
104+
printf '%s\n' "${_a[@]:off}" "${_a[@]:0:off}"
105+
}
106+
CPU_SOURCES=(passmark cinebench-legacy cinebench-r23 cinebench-2024
107+
cinebench-nbc geekbench-nbc spec-cpu2006 topcpu-cpu)
108+
GPU_SOURCES=(blender timespy passmark-gpu topcpu-gpu)
109+
for s in $(rotate CPU_SOURCES); do
110+
budget_left || break
85111
run_enrich cpu "$s"
86112
done
87-
for s in blender timespy passmark-gpu topcpu-gpu; do
113+
for s in $(rotate GPU_SOURCES); do
114+
budget_left || break
88115
run_enrich gpu "$s"
89116
done
90117

0 commit comments

Comments
 (0)