Skip to content

ci: run Code Quality on every push to an open PR, not only when it opens - #2230

Merged
rubenvdlinde merged 1 commit into
developmentfrom
ci/quality-on-every-push
Jul 31, 2026
Merged

ci: run Code Quality on every push to an open PR, not only when it opens#2230
rubenvdlinde merged 1 commit into
developmentfrom
ci/quality-on-every-push

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

The gap

pull_request.types was [opened, reopened]. So the quality suite runs once, when the PR is opened, and every commit after that merges unchecked — while the PR still shows the first run's green.

Two examples from today, in this repo:

The push: branch list does not cover the gap either — it names feature/**, while the convention in practice is feat/** and fix/**, so most branches get nothing there.

Why this is the bad kind of gap

A PR that has never been checked shows no checks, and someone notices. A PR checked once, three commits ago, shows green — and looks more trustworthy than it is. That is the same failure shape as the defects this suite exists to catch.

Cost

Bounded by the concurrency block already in the file: a new push cancels the in-flight run for the same head ref rather than queueing beside it. So a burst of pushes costs roughly one full run, not one per commit.

For reference, hermiq's copy of this workflow omits types: entirely, which defaults to [opened, synchronize, reopened]. This repo is the outlier.

`pull_request.types` was [opened, reopened]. So the quality suite ran ONCE,
when the PR was opened, and every commit after that merged unchecked while the
PR still showed the first run's green.

Observed here today:

- #2227 was opened, failed phpcs on pre-existing debt, was fixed by a follow-up
  push — and the fix was never verified by CI.
- #2228's only Code Quality run stayed pinned to its first commit across a merge
  from development and two further commits, so its checks were describing code
  that no longer existed. It took a manual workflow_dispatch to find out whether
  the branch was actually green.

The branch list on `push:` does not cover the gap either: it names `feature/**`
while the convention in practice is `feat/**` and `fix/**`.

Cost is bounded by the existing concurrency block — a new push cancels the
in-flight run for the same head ref rather than queueing beside it. hermiq's
copy of this workflow omits `types:` entirely, which defaults to including
synchronize; this repo is the outlier.
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/openregister @ e4f2a6c

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 174/174
npm ✅ 555/555
PHPUnit
Newman
Playwright ⏭️

Quality workflow — 2026-07-31 14:06 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde
rubenvdlinde merged commit 259c130 into development Jul 31, 2026
25 checks passed
@rubenvdlinde
rubenvdlinde deleted the ci/quality-on-every-push branch July 31, 2026 14:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant