Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[quality] test.yml runs build-test twice per commit on every PR branch — narrow push to main and add a concurrency group

Chiusa Adatta ai principianti
#213 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 2 giorni

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
84/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
github-actions
Ambito
ci-cd

Direzione di ricerca

Leggi .github/workflows/test.yml, in particolare i suoi trigger e la jobs map invariata, quindi confronta le impostazioni proposte con prow-bot.yml:34-36. Applica le modifiche ai trigger e alla concorrenza e verifica che il commit successivo di una PR dello stesso repository produca un’esecuzione di build-test, che le esecuzioni delle PR superate vengano annullate e che le esecuzioni di main non vengano annullate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

agent/quality hive/covered-by-pr hive/hosted-available-lke648397-260827-5q9t kind/cleanup quality testing

Finding

.github/workflows/test.yml:2 is on: [push, pull_request] and the workflow has no concurrency block. Every same-repo branch that has an open pull request therefore runs build-test twice per commit — once for the push event and once for pull_request, same SHA, same steps, same result — and a new push to a branch never cancels the still-running job for the previous commit.

Evidence, main @ 187c5e3:

  • #188 head 8656298: run 36255852284 (push, started 16:33:01) and run 36255855092 (pull_request, started 16:33:04) — identical SHA, both fail on the same step.
  • Of the 30 most recent Build and test code runs, 14 head SHAs appear twice (push + pull_request), across 12 branches: 10 quality/test-* branches, dependabot/npm_and_yarn/dev-dependencies-520f5d8d0e and test/e2e-sandbox (two SHAs). Reproduce: gh run list --workflow test.yml --limit 30 --json headSha,event | jq 'group_by(.headSha)|map(select(length>1))|length'.
  • prow-bot.yml:34-36 already declares a concurrency group for the bot; test.yml is the only pull_request workflow in the repository without one.

Each run is ~1 minute on ubuntu-latest, so the cost today is roughly half of all build-test minutes, not wall-clock latency. It becomes latency whenever a burst of PRs (the 19 hold-gated ones currently open, or a dependabot group) queues on the account's concurrent-job limit.

Recommendation

Fire once per commit and let a newer push to a pull request supersede the pending run. Exact replacement — replace lines 1-5 of .github/workflows/test.yml (name: through contents: read) with:

name: Build and test code
on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read

# One run per branch: a newer push to a pull request supersedes its pending run.
# Runs on main are never cancelled, so every merge keeps its own result.
concurrency:
  group: test-${{ github.head_ref || github.ref_name }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

The jobs: map is unchanged.

Notes for the maintainer applying this:

  • push: branches: [main] removes the duplicate outright: a same-repo PR branch runs only through pull_request; main still runs on every merge. A branch with no open PR gets no build-test run — the check has to be read from the PR, which is where it is consumed anyway.
  • github.head_ref || github.ref_name resolves to the branch name for both event types, so if the push narrowing is not wanted, the concurrency block alone still collapses the pair: the pull_request run (started seconds later) cancels the push run. That variant leaves a cancelled run on the branch's commit page; the narrowing avoids it.
  • cancel-in-progress is false on main on purpose: two merges in quick succession must each keep their own pass/fail.
  • Tag pushes currently also run test.yml; release.yml owns v* tags and runs after main was already green on the same commit, so they are not restated here. Add tags: ['v*'] under push: if that run is wanted back.
  • No path filter is added: build-test backs the PR merge gate and a filtered-out required check blocks the merge instead of skipping it.

Why no PR: the whole change is inside .github/workflows/. This agent's App token is minted at the contributor tier without the Workflows permission, so GitHub rejects any push touching that directory (the same rejection @castrojo hit on #209). It needs a human or an ISSUES_PRS_MERGE-tier agent to land. No part of the fix lies outside .github/workflows/.

Completion criteria

  • test.yml runs push only for main (or otherwise dedupes the push/pull_request pair)
  • test.yml has a concurrency group that cancels superseded pull_request runs and never cancels main
  • The next same-repo PR commit produces exactly one build-test run

Priority

  • Impact: low — ~2× build-test minutes and slower burst throughput; no correctness effect
  • Effort: low

Filed by quality agent (hold-gated mode)

🐝 Hive Agent: quality | Instance: hosted-available-lke648397-260827-5q9t | SHA: 187c5e3

— hive: agent=quality backend=copilot model=claude-fable-5.1 copilot=1.0.88

Lingua principale
TypeScript
Stelle
132
Fork
24
Merge medio
1g 17h
PR unite (30g)
220

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di cncf/prow-github-actions

Tutte le issue di cncf/prow-github-actions

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.