From 16d326b2c27034366c5b3ca5a6442a596a590643 Mon Sep 17 00:00:00 2001 From: "omegent-app[bot]" <306514130+omegent-app[bot]@users.noreply.github.com> Date: Thu, 6 Aug 2026 08:52:53 +0000 Subject: [PATCH] ci(fork): run PR checks when a PR is retargeted or marked ready MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #357 sat on four required checks that could never report. It was opened against fork/discord, force-pushed, then retargeted to fork/dev and marked ready — and none of those produced a run. The default pull_request activity set is opened, synchronize and reopened. The force-push was a synchronize, but the base was still fork/discord, which #348 removed from this workflow's branch list, so it was filtered out. Retargeting fires "edited", and marking ready fires "ready_for_review"; neither is in the default set. The PR therefore never emitted a watched event while sitting on a watched base, and auto-merge waited on checks that had no way to arrive. List the activity types explicitly and add both missing ones. "edited" also fires for title and body edits, which happen constantly and must not spend a full CI run including a macOS runner. github.event.changes.base is populated only when the base actually changed, so each job skips an edit that did not move the base. Unblocking the PR itself needed a close and reopen: "reopened" is in the default set, so it fires against the current base without adding a commit. Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com> --- .github/workflows/fork-ci.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/.github/workflows/fork-ci.yml b/.github/workflows/fork-ci.yml index 566a632036d..a58781e4e07 100644 --- a/.github/workflows/fork-ci.yml +++ b/.github/workflows/fork-ci.yml @@ -32,6 +32,12 @@ on: # integrationOverlays is empty: the overlays were drained into fork/dev at # cutover. Re-add bases here if one is ever registered again. pull_request: + # Explicit, because the default set (opened, synchronize, reopened) misses + # both ways a PR can become eligible without a new commit: being marked + # ready, and being retargeted onto a listed base. A PR retargeted from a + # branch this workflow does not watch would otherwise sit forever on + # required checks that can never report. + types: [opened, synchronize, reopened, ready_for_review, edited] branches: - fork/base - fork/tim @@ -58,6 +64,11 @@ concurrency: jobs: check: name: Check + # "edited" also fires for title and body edits, which must not spend a full + # CI run. github.event.changes.base is present only when the base changed. + if: >- + github.event_name != 'pull_request' || github.event.action != 'edited' || + github.event.changes.base != null runs-on: ubuntu-24.04 timeout-minutes: 10 steps: @@ -109,6 +120,11 @@ jobs: test: name: Test + # "edited" also fires for title and body edits, which must not spend a full + # CI run. github.event.changes.base is present only when the base changed. + if: >- + github.event_name != 'pull_request' || github.event.action != 'edited' || + github.event.changes.base != null runs-on: ubuntu-24.04 timeout-minutes: 10 steps: @@ -132,6 +148,11 @@ jobs: mobile_native_static_analysis: name: Mobile Native Static Analysis + # "edited" also fires for title and body edits, which must not spend a full + # CI run. github.event.changes.base is present only when the base changed. + if: >- + github.event_name != 'pull_request' || github.event.action != 'edited' || + github.event.changes.base != null runs-on: macos-15 timeout-minutes: 10 steps: @@ -170,6 +191,11 @@ jobs: release_smoke: name: Release Smoke + # "edited" also fires for title and body edits, which must not spend a full + # CI run. github.event.changes.base is present only when the base changed. + if: >- + github.event_name != 'pull_request' || github.event.action != 'edited' || + github.event.changes.base != null runs-on: ubuntu-24.04 timeout-minutes: 10 steps: