Skip to content

fix(ci): prefer GitHub Actions PR-event head SHA over GITHUB_SHA#1469

Draft
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55cfrom
devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55
Draft

fix(ci): prefer GitHub Actions PR-event head SHA over GITHUB_SHA#1469
jd wants to merge 1 commit into
devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55cfrom
devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55

Conversation

@jd
Copy link
Copy Markdown
Member

@jd jd commented May 27, 2026

On GitHub Actions pull_request builds, GITHUB_SHA points at
the synthetic merge commit GitHub creates by pre-merging the PR
head into the base — not the actual code the tests ran against.
The contributor's real head SHA lives in the event payload at
pull_request.head.sha, and that's the value Mergify dashboards
correlate with. Without this fix, every ci junit-process run
on a PR was uploading the wrong vcs.ref.head.revision resource
attribute.

get_github_actions_head_sha now reads
GITHUB_EVENT_PATH, looks for pull_request.head.sha, and falls
back to GITHUB_SHA if the payload is missing, malformed, or
the build isn't a pull_request event — matching Python's
get_github_actions_head_sha. The PR-event JSON read is shared
across the pull-request-number lookup (existing) and the head-SHA
lookup (new); the number lookup stays strict about parse errors
because it's load-bearing for scopes-send dispatch, while the
SHA lookup stays lenient because GITHUB_SHA is a sane fallback.

Three unit tests pin: payload-wins-over-env, no-PR-field-falls-
back-to-env, and missing-event-file-still-uses-env.

The CircleCI PR-build API fallback Python implements stays
Python-side for now — it requires a GitHub REST API client we
don't have on the Rust side yet.

Co-Authored-By: Claude Opus 4.7 noreply@anthropic.com

Depends-On: #1468

@jd
Copy link
Copy Markdown
Member Author

jd commented May 27, 2026

This pull request is part of a Mergify stack:

# Pull Request Link
1 fix(cli): accept --debug on the Rust binary and actually toggle it in Python #1464
2 refactor(rust): share test scaffolding via mergify-test-support crate #1439
3 refactor(core): introduce CommandContext for the queue+freeze prelude #1441
4 refactor(ci): consolidate the CI-env scrubber into a shared testing module #1442
5 refactor: drop stale Phase X.Y doc markers and one inline color branch #1443
6 refactor(tui): share StyledGlyph across queue show/status renderers #1444
7 refactor(queue): drop indexmap, group_by_scope returns a Vec<(K, V)> #1445
8 refactor(ci): swap uuid for getrandom in the GHA heredoc delimiter #1446
9 refactor(config): standardize the workspace on serde_yaml_ng for YAML parsing #1447
10 test(ci): add live smoke test for ci scopes select-all path #1460
11 feat(rust): port ci scopes to native Rust #1461
12 feat(ci): parse JUnit XML reports in native Rust #1465
13 feat(ci): encode JUnit cases as OTLP and upload to Mergify CI Insights #1466
14 feat(ci): promote ci junit-process from shim to native Rust #1467
15 feat(ci): promote ci junit-upload from shim to native as a deprecated alias #1468
16 fix(ci): prefer GitHub Actions PR-event head SHA over GITHUB_SHA #1469 👈

@mergify
Copy link
Copy Markdown
Contributor

mergify Bot commented May 27, 2026

Merge Protections

Your pull request matches the following merge protections and will not be merged until they are valid.

🔴 ⛓️ Depends-On Requirements

Waiting for

This rule is failing.

Requirement based on the presence of Depends-On in the body of the pull request

🔴 👀 Review Requirements

Waiting for

  • #approved-reviews-by>=2
This rule is failing.
  • any of:
    • #approved-reviews-by>=2
    • author = dependabot[bot]
    • author = mergify-ci-bot
    • author = renovate[bot]

🔴 🔎 Reviews

Waiting for

  • #review-requested = 0
This rule is failing.
  • #review-requested = 0
  • #changes-requested-reviews-by = 0
  • #review-threads-unresolved = 0

🟢 🤖 Continuous Integration

Wonderful, this rule succeeded.
  • all of:
    • check-success=ci-gate

🟢 Enforce conventional commit

Wonderful, this rule succeeded.

Make sure that we follow https://www.conventionalcommits.org/en/v1.0.0/

  • title ~= ^(fix|feat|docs|style|refactor|perf|test|build|ci|chore|revert|ui)(?:\(.+\))?:

🟢 📕 PR description

Wonderful, this rule succeeded.
  • body ~= (?ms:.{48,})

@jd jd force-pushed the devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55c branch from 57bb83b to bd85763 Compare May 27, 2026 08:27
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from 73d824f to 53e9e75 Compare May 27, 2026 08:27
@jd jd temporarily deployed to func-tests-live May 27, 2026 08:27 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 27, 2026 08:27 — with GitHub Actions Inactive
@jd
Copy link
Copy Markdown
Member Author

jd commented May 27, 2026

Revision history

# Type Changes Reason Date
1 initial 73d824f 2026-05-27 08:27 UTC
2 rebase 73d824f → 53e9e75 (rebase only) 2026-05-27 08:27 UTC
3 rebase 53e9e75 → eb452fa (rebase only) 2026-05-27 08:46 UTC
4 rebase eb452fa → ab01533 (rebase only) 2026-05-27 09:00 UTC
5 rebase ab01533 → dbb0765 (rebase only) 2026-05-27 09:18 UTC
6 rebase dbb0765 → edcef26 (rebase only) 2026-05-27 10:04 UTC
7 rebase edcef26 → 1573dd6 (rebase only) 2026-05-27 10:15 UTC

@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 08:29 Failure
@mergify mergify Bot requested a review from a team May 27, 2026 08:40
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from 53e9e75 to eb452fa Compare May 27, 2026 08:46
@jd jd force-pushed the devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55c branch from bd85763 to c994e93 Compare May 27, 2026 08:46
@jd jd temporarily deployed to func-tests-live May 27, 2026 08:46 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 27, 2026 08:46 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 08:46 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from eb452fa to ab01533 Compare May 27, 2026 09:00
@jd jd temporarily deployed to func-tests-live May 27, 2026 09:00 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 09:00 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55c branch from 8460659 to de0921a Compare May 27, 2026 09:18
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from ab01533 to dbb0765 Compare May 27, 2026 09:18
@jd jd temporarily deployed to func-tests-live May 27, 2026 09:18 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 27, 2026 09:18 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 09:19 Failure
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from dbb0765 to edcef26 Compare May 27, 2026 10:04
@jd jd temporarily deployed to func-tests-live May 27, 2026 10:04 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 10:06 Failure
On GitHub Actions `pull_request` builds, `GITHUB_SHA` points at
the synthetic merge commit GitHub creates by pre-merging the PR
head into the base — not the actual code the tests ran against.
The contributor's real head SHA lives in the event payload at
`pull_request.head.sha`, and that's the value Mergify dashboards
correlate with. Without this fix, every `ci junit-process` run
on a PR was uploading the wrong `vcs.ref.head.revision` resource
attribute.

`get_github_actions_head_sha` now reads
`GITHUB_EVENT_PATH`, looks for `pull_request.head.sha`, and falls
back to `GITHUB_SHA` if the payload is missing, malformed, or
the build isn't a `pull_request` event — matching Python's
`get_github_actions_head_sha`. The PR-event JSON read is shared
across the pull-request-number lookup (existing) and the head-SHA
lookup (new); the number lookup stays strict about parse errors
because it's load-bearing for `scopes-send` dispatch, while the
SHA lookup stays lenient because `GITHUB_SHA` is a sane fallback.

Three unit tests pin: payload-wins-over-env, no-PR-field-falls-
back-to-env, and missing-event-file-still-uses-env.

The CircleCI PR-build API fallback Python implements stays
Python-side for now — it requires a GitHub REST API client we
don't have on the Rust side yet.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Change-Id: I99912b552f5841c3364c1a84e29a73486d6c083e
@jd jd force-pushed the devs/jd/worktree-rust-port/promote-ci-junit-upload-shim-native-deprecated--c316f55c branch from a823367 to 7a63271 Compare May 27, 2026 10:15
@jd jd force-pushed the devs/jd/worktree-rust-port/prefer-github-actions-pr-event-head-sha-over--99912b55 branch from edcef26 to 1573dd6 Compare May 27, 2026 10:15
@jd jd temporarily deployed to func-tests-live May 27, 2026 10:15 — with GitHub Actions Inactive
@jd jd temporarily deployed to func-tests-live May 27, 2026 10:15 — with GitHub Actions Inactive
@mergify mergify Bot had a problem deploying to Mergify Merge Protections May 27, 2026 10:15 Failure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant