nodejs / nodejs/node-core-utils

pr_checker: ignore superseded GitHub Actions check suites when a head SHA is reused

Ouverte
#1,151 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
JavaScript
Étoiles
313
Forks
137
Merge moyen
2 j 8 h
PR mergées (30 j)
24

Description

PRChecker.checkGitHubCI() can incorrectly report a PR as having failed GitHub CI when its current head commit has both:

  • an older cancelled/failed GitHub Actions run; and
  • a newer successful run of the same workflow.

This can happen when a PR branch is force-pushed away from a commit and later force-pushed back to exactly the same SHA. GitHub
keeps both sets of check suites attached to that commit.

This occurred on nodejs/node#64803, https://github.com/nodejs/node/pull/64601 whose current head SHA is:

ee1ca501264411a3e993d4ed487f833fb0ffa841
a23d7a9a84a190e3804f9b2fb200feb833f3114a

Timeline:

  1. An Actions run was started for this SHA:
    https://github.com/nodejs/node/actions/runs/30359390795
  2. The PR branch was updated, causing that run to be cancelled by the workflow's cancel-in-progress configuration.
  3. The branch was subsequently force-pushed back to the same SHA:
    https://github.com/nodejs/node/pull/64803#event-28598521231
  4. A new run for the same SHA completed successfully:
    https://github.com/nodejs/node/actions/runs/30360481950
  5. The latest Jenkins CI also completed successfully:
    https://ci.nodejs.org/job/node-test-pull-request/75495/

However, the commit queue reported one failed and 15 cancelled GitHub Actions jobs from the older, superseded runs:

https://github.com/nodejs/node/pull/64803#issuecomment-5226872042

The commit checks page contains both the old cancelled suites and the newer successful suites:

https://github.com/nodejs/node/commit/ee1ca501264411a3e993d4ed487f833fb0ffa841/checks

The reported macOS failure was also produced while the old workflow was being cancelled, rather than by a test failure:

https://github.com/nodejs/node/actions/runs/30359390795/job/90275679554

The GraphQL query retrieves up to 100 check suites associated with the current commit:

https://github.com/nodejs/node-core-utils/blob/v7.0.1/lib/queries/PRCommits.gql#L28-L44

checkGitHubCI() then iterates over every GitHub Actions suite and treats any non-successful historical suite as a current
failure:

https://github.com/nodejs/node-core-utils/blob/v7.0.1/lib/pr_checker.js#L461-L515

It does not identify whether an older suite has been superseded by a newer run of the same workflow.

As a result, an obsolete cancelled or failed run can permanently prevent the commit queue from accepting that SHA, even though
all current CI runs succeeded.

For each GitHub Actions workflow, only the latest applicable run for the current head SHA should determine the CI result. Older
runs superseded by a newer run of the same workflow should be ignored.

Refs: https://github.com/nodejs/node/pull/64601#issuecomment-5226071594
Refs: https://github.com/nodejs/node/pull/64803#issuecomment-5226872042

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par lib/pr_checker.js : checkGitHubCI() parcourt les suites renvoyées par lib/queries/PRCommits.gql. Utilisez les exemples liés de nodejs/node pour comprendre les exécutions dupliquées pour un même head SHA, puis vérifiez que seule l’exécution applicable la plus récente de chaque workflow affecte le résultat et que les anciennes exécutions remplacées ne bloquent pas l’acceptation.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
github-actions, javascript
Domaine
ci-cd, tooling
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
68/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.