ci: require native Windows aggregate verdict

This commit is contained in:
Tianyi Cui
2026-08-22 20:10:55 +08:00
parent c8cecd6079
commit c92c86492d
8 changed files with 100 additions and 36 deletions
+18 -18
View File
@@ -306,10 +306,10 @@ jobs:
targets: node24-linux-x64
ci: true
# The required pull-request Windows signal: the two blocking win32 surfaces
# (workspace build, production site) execute with real, checksum-verified
# Windows Node under Wine on standard hosted Linux. The independent
# windows-native job below keeps the complete native-kernel inventory —
# The pull-request Windows signals cover complementary hosts. The two fast
# win32 toolchain surfaces (workspace build, production site) execute with
# real, checksum-verified Windows Node under Wine on standard hosted Linux.
# The windows-native job below keeps the complete native-kernel inventory —
# including the observational portability gates this lane does not run —
# on real Windows. This job only provisions runner state (caches,
# apt); scripts/wine-windows-gates.sh owns the gate logic and is the same
@@ -396,13 +396,12 @@ jobs:
if: always()
run: wineserver -k 2>/dev/null || true
# Every pull request also gets a real Windows-kernel signal. This job keeps
# its own unmasked conclusion but is deliberately absent from
# all-checks-passed.needs, so it never delays or changes that required
# verdict. Under normal operation it runs on the hosted larger runner; under
# Windows failover (DSH_CI_FAILOVER_WINDOWS=selfhosted) it retargets onto the
# in-house self-hosted Windows pool. Dependabot PRs are excluded from the
# self-hosted pool and stay queued for the hosted runner — see the failover
# Every pull request also gets a real Windows-kernel signal. Its unmasked
# conclusion is a dependency of all-checks-passed, so failure, cancellation,
# or omission blocks the required verdict. Under normal operation it runs on
# the hosted larger runner. DSH_CI_FAILOVER_WINDOWS=selfhosted retargets it
# onto the in-house self-hosted Windows pool. Dependabot PRs are excluded
# from the self-hosted pool and stay queued for the hosted runner — see the failover
# runbook. This Windows switch is independent of the Linux
# DSH_CI_FAILOVER_LINUX variable that retargets the three required Linux jobs
# and the all-checks-passed verdict above.
@@ -461,10 +460,10 @@ jobs:
# Single stable required check for branch protection: require "all checks
# passed" instead of enumerating matrix legs whose names change as lanes and
# node versions evolve. Every blocking job in THIS workflow must be listed in
# `needs`. The required Wine job is listed as `windows`; `windows-native` is
# deliberately absent so its independent result never delays or changes this
# verdict. (`needs` cannot reach across workflow files; the master-only jobs in
# ci-master.yml are intentionally not part of this PR verdict.)
# `needs`, including both the Wine `windows` job and the real-kernel
# `windows-native` job. (`needs` cannot reach across workflow files; the
# master-only jobs in ci-master.yml are intentionally not part of this PR
# verdict.)
# `if: always()` is load-bearing: without it a failed dependency
# would SKIP this job, and GitHub counts a skipped required check as passing
# — so this job always runs and fails on any non-success result, including
@@ -475,14 +474,15 @@ jobs:
# provisioning — and under Linux failover it follows the same selector as
# the worker jobs it aggregates, so a standard-hosted outage cannot strand
# the branch-protection verdict either. It retargets with the Linux switch
# (DSH_CI_FAILOVER_LINUX), not the Windows one, because it aggregates the
# required Linux workers and runs on the vm-backup pool.
# (DSH_CI_FAILOVER_LINUX), not the Windows one, because this bookkeeping job
# itself runs on Linux; the native dependency resolves its Windows pool
# independently.
runs-on: >-
${{ vars.DSH_CI_FAILOVER_LINUX == 'selfhosted'
&& github.event.pull_request.user.login != 'dependabot[bot]'
&& fromJSON('["self-hosted", "linux", "x64", "vm-backup"]')
|| 'ubuntu-latest' }}
needs: [node-24, node-24-coverage, node-24-consumers, node-compat, python-sdk, python-runtime, windows]
needs: [node-24, node-24-coverage, node-24-consumers, node-compat, python-sdk, python-runtime, windows, windows-native]
if: always() && github.event_name == 'pull_request'
steps:
- name: Fail if any needed job did not succeed