ci(R-1297 A): heavy suites by path on a branch push, all on a tag and nightly; no second full gate run
gates / gates (push) Successful in 3m23s

- script_tests_gate.py: test_gate_decoys / test_due_checks_gate / dooplex-offsite run on a CI branch push only
  when one of their paths changed (FELHOM_CHANGED_FILES); no list, an empty or unreadable list = every suite
- gates.yml: nightly schedule 03:20 UTC; the list is set only for push:refs/heads/*; a trimmed commits array
  (total_commits > listed) is an unknown list
- test_repo_gates.py and test_due_checks_gate.py group G drive the real runner with GATES narrowed to their
  labels, instead of the whole gate set a second time (130 s each in CI)
- red-proved: filter cases, workflow pins (old gates.yml), inert run_gate, unregistered due-checks
This commit is contained in:
admin committed 2026-10-26 18:14:23 +01:00
1 parent 8143a2c872
commit ecd82abab8
5 files changed
+194 -10

No files matched your search

+23
View File
@@ -18,8 +18,13 @@
name: gates
# R-1129: `workflow_dispatch` is the manual PROOF that the failure mail can be sent. A push run is
# unchanged by it: the proof step below is skipped on a push, and `force_alarm` is then empty.
# R-1297 (A, 2026-10-26): the nightly schedule is the run that still executes the three path-filtered suites when no
# push touched their files (scripts/script_tests_gate.py PATH_FILTERED). It sets no file list, so every suite runs —
# like a release tag (a tag push) and a manual dispatch. 03:20 UTC: after the 01:40 release copy and the night chain.
on:
push:
schedule:
- cron: "20 3 * * *"
workflow_dispatch:
inputs:
force_alarm:
@@ -149,6 +154,12 @@ jobs:
if not commits:
sys.stderr.write("the payload carries no commits array - unknown\n")
raise SystemExit(0)
# R-1297: Gitea trims the payload's commits array (the newest few only); a push of more commits than it
# lists has files nobody named here. That list is UNKNOWN, never short - so nothing is printed.
total = ev.get("total_commits")
if isinstance(total, int) and total > len(commits):
sys.stderr.write("the payload lists %d of %d commits - the file list is unknown\n" % (len(commits), total))
raise SystemExit(0)
seen = []
for c in commits:
for key in ("added", "modified", "removed"):
@@ -172,6 +183,18 @@ jobs:
[ "$SCOPE" = "docs" ] || SCOPE=code
echo "PUSH_SCOPE=$SCOPE" >> "$GITHUB_ENV"
echo "scope: $SCOPE"
# R-1297 (A): the heavy suites read this list and skip themselves when none of their paths changed. ONLY a
# branch push with a known list sets it; a tag, the nightly schedule and a dispatch run every suite.
case "${GITHUB_EVENT_NAME:-}:${GITHUB_REF:-}" in
push:refs/heads/*)
if [ -s /tmp/pushed-files.txt ]; then
echo "FELHOM_CHANGED_FILES=/tmp/pushed-files.txt" >> "$GITHUB_ENV"
echo "suite filter: ON (a branch push with a known file list)"
else
echo "suite filter: OFF (no usable file list) - every suite runs"
fi ;;
*) echo "suite filter: OFF (${GITHUB_EVENT_NAME:-?} ${GITHUB_REF:-?}) - every suite runs" ;;
esac
- name: Run the gate entry point
# The ONLY thing CI runs. No go build, no go test, no linting, no deploy — those are either