Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions scripts/ci/merge_dwell.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,21 @@
soit a ecrire :

* `pr-gate-rerun.yml` -- `workflow_run` sur la fin d'un garde ;
* `pr-gate-stale-sweep.yml` -- balayage horaire (`cron: '7 * * * *'`) qui
* `pr-gate-stale-sweep.yml` -- balayage qui repasse a chaque poussee sur
`main` et au minimum une fois par heure (`cron: '7 * * * *'`) ; il
selectionne exactement « une jambe `PR gate` rouge alors que tout le reste
est vert », c'est-a-dire l'etat qu'une PR en attente de plancher presente,
et **re-lance le run d'origine** (un POST d'un check-run homonyme atterrit
dans une suite etrangere et GitHub ANDe les deux -- mesure #11519).

Consequence a assumer et a dire : le plancher est un PLANCHER, pas une
horloge. Une PR devient mergeable au premier balayage horaire suivant
l'ecoulement des 2 h -- donc entre 2 h 00 et 3 h 00 apres son dernier commit,
pas a 2 h 00 pile.
horloge. Une PR devient mergeable au premier balayage suivant l'ecoulement
des 2 h. Ce balayage est surtout porte par les pousses sur main -- 58 des 60
derniers declenchements au 2026-09-14, mediane de levee ~8 min apres le
plancher ; le cron horaire n'est que le plancher de cadence, pire cas mesure
~1 h 40 dans un creux sans poussee (#16092). L'horodatage publie dans le
message est donc le PLANCHER, pas l'heure de levee : « leve au premier
balayage suivant 13:55 » se lit « apres 13:55 », pas « a 13:55 ».

La date lue est celle du COMMITTER, pas de l'auteur
---------------------------------------------------
Expand Down Expand Up @@ -149,7 +154,8 @@ def evaluate(
return False, remaining, (
"tete du {}, {:.0f} min -- plancher {:.0f} min, reste {:.0f} min, "
"leve au premier balayage suivant {}. "
"Le balayage horaire (pr-gate-stale-sweep.yml, cron '7 * * * *') "
"Le balayage (pr-gate-stale-sweep.yml) repasse a chaque poussee sur "
"main et au minimum une fois par heure (cron '7 * * * *') ; il "
"re-agrege cette jambe des que le plancher est ecoule ; aucun geste "
"manuel n'est requis. Urgence (main rouge) : poser le label `{}` sur "
"la PR.".format(stamp, age_min, dwell_min, remaining, lift, WAIVER_LABEL)
Expand Down
7 changes: 4 additions & 3 deletions scripts/pr_gate.py
Original file line number Diff line number Diff line change
Expand Up @@ -1429,7 +1429,8 @@ def verdict_body(message: str, advisory: Sequence[str] = ()) -> str:
"",
"Plancher mecanique -- rien a reparer dans la PR. Ne pas "
"re-pusher (un re-push remet le plancher a zero depuis la "
"nouvelle tete) ; le balayage horaire leve seul.",
"nouvelle tete) ; le balayage leve seul (poussees sur main, "
"minimum horaire).",
]
if advisory:
lines += ["", "Advisory (not blocking):"]
Expand Down Expand Up @@ -1577,8 +1578,8 @@ def main(argv: Iterable[str] | None = None) -> int:
"merge (mandat user 2026-09-07 : 120). 0 = desactive. Evalue "
"APRES que les constituants ont conclu verts, hors de la boucle "
"d'attente : aucun runner n'est tenu a dormir. Le rouge se leve "
"seul au balayage horaire de pr-gate-stale-sweep.yml. Voir "
"scripts/ci/merge_dwell.py."
"seul au balayage de pr-gate-stale-sweep.yml (poussees sur "
"main, minimum horaire). Voir scripts/ci/merge_dwell.py."
),
)
parser.add_argument(
Expand Down
Loading