Skip to content

PRs targeting release/** get no pull_request CI, so a release PR is never tested against its merge result #469

Description

@BitHighlander

The gap

.github/workflows/ci.yml:

on:
  push:
    branches: [master, develop, 'feature/**', 'fix/**', 'release/**', 'hotfix/**']
  pull_request:
    branches: [master, develop]

pull_request fires only for PRs whose base is master or develop. A PR targeting release/** therefore produces no pull_request run at all. Its check rollup is populated entirely by the push run on the head branch.

Empirically: of the last 100 workflow runs repo-wide, 35 are event=pull_request and every one has base.ref == develop. Zero with a release/** base.

Why it matters

Every job pins ref: ${{ github.event.pull_request.head.sha || github.sha }} (11 checkout steps). So for a release-targeting PR, CI tests the head commit in isolation — never the base, never the merge result.

Concretely, on PR #443:

  • Checks came from run 32018516938, event=push, headSha=ee15eded1, on branch fix/rng-build-guards.
  • git merge-base ee15eded1 release/7.14.2 = 440619703 — the base as of the rebase. Two commits (885b485c4, 7e07b2d92) had landed since, and no job saw them.
  • The run's own conclusion was cancelled, not success — nine jobs succeeded, python-integration-tests was killed at the 30-minute timeout. A per-job reading says "eight green"; the run says cancelled.

So for release PRs, "the PR is green" is not a statement about what will be on the branch after merge. There is no merge queue (gh api repos/.../rulesets[]) and release/7.14.2 is not protected (branch-protection API → 404), so nothing else closes the gap.

What does work

push on release/** is in the trigger list, so the branch is tested after merge. The validation exists — it just arrives after the decision instead of before it.

Suggested fix

Add 'release/**' (and 'hotfix/**') to the pull_request branch list so release PRs get a merge-result run before merge, rather than a head-only run. Given this repo cuts security releases on release/** branches, that is where pre-merge validation matters most.

Found while merging #443 into release/7.14.2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions