|
|
@@ -397,63 +397,152 @@ 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
|
|
|
- # 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.
|
|
|
- windows-native:
|
|
|
+ # Every pull request also gets real Windows-kernel signals. The former
|
|
|
+ # monolithic windows-native job is split into smaller jobs so one slow
|
|
|
+ # coverage gate does not hold up build/static results, while the total
|
|
|
+ # per-job process count stays lower. Observational checks are non-blocking.
|
|
|
+ # Dependabot PRs are excluded from the self-hosted pool and stay queued for
|
|
|
+ # the hosted runner.
|
|
|
+ windows-build:
|
|
|
if: github.event_name == 'pull_request'
|
|
|
runs-on: >-
|
|
|
${{ vars.DSH_CI_FAILOVER_WINDOWS == 'selfhosted'
|
|
|
&& github.event.pull_request.user.login != 'dependabot[bot]'
|
|
|
&& fromJSON('["self-hosted", "dsh-win-ci", "windows"]')
|
|
|
|| 'dsh-windows-2025-16core' }}
|
|
|
- name: windows node 24 / native complete
|
|
|
+ name: windows node 24 / build
|
|
|
+ timeout-minutes: 60
|
|
|
+ steps:
|
|
|
+ - uses: actions/checkout@v6
|
|
|
+ with:
|
|
|
+ persist-credentials: false
|
|
|
+ - name: Enable Developer Mode (symlink support)
|
|
|
+ shell: pwsh
|
|
|
+ run: >-
|
|
|
+ reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
|
|
|
+ /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
|
|
+ - uses: pnpm/action-setup@v4
|
|
|
+ with:
|
|
|
+ dest: ${{ runner.temp }}/setup-pnpm-js
|
|
|
+ - uses: actions/setup-node@v6
|
|
|
+ with:
|
|
|
+ node-version: ${{ env.PRIMARY_NODE_VERSION }}
|
|
|
+ - name: Install (immutable)
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm install --frozen-lockfile
|
|
|
+ - name: Run blocking Windows builds
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm run check:ci:windows-blocking
|
|
|
+
|
|
|
+ windows-coverage:
|
|
|
+ if: github.event_name == 'pull_request'
|
|
|
+ runs-on: >-
|
|
|
+ ${{ vars.DSH_CI_FAILOVER_WINDOWS == 'selfhosted'
|
|
|
+ && github.event.pull_request.user.login != 'dependabot[bot]'
|
|
|
+ && fromJSON('["self-hosted", "dsh-win-ci", "windows"]')
|
|
|
+ || 'dsh-windows-2025-16core' }}
|
|
|
+ name: windows node 24 / coverage
|
|
|
timeout-minutes: 120
|
|
|
env:
|
|
|
DSH_COVERAGE_MAX_WORKERS: '6'
|
|
|
- DSH_COVERAGE_PARTITIONS: '8'
|
|
|
- # Instrumented process and polling fixtures can exceed Vitest's defaults
|
|
|
- # under the complete lane's concurrent gate load.
|
|
|
+ DSH_COVERAGE_PARTITIONS: '4'
|
|
|
DSH_COVERAGE_TEST_TIMEOUT_MS: '30000'
|
|
|
- DSH_GATE_CONCURRENCY: '4'
|
|
|
- DSH_PUBLINT_CONCURRENCY: '8'
|
|
|
+ DSH_GATE_CONCURRENCY: '3'
|
|
|
steps:
|
|
|
- uses: actions/checkout@v6
|
|
|
with:
|
|
|
persist-credentials: false
|
|
|
-
|
|
|
- name: Enable Developer Mode (symlink support)
|
|
|
shell: pwsh
|
|
|
run: >-
|
|
|
reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
|
|
|
/t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
|
|
-
|
|
|
- uses: pnpm/action-setup@v4
|
|
|
with:
|
|
|
dest: ${{ runner.temp }}/setup-pnpm-js
|
|
|
-
|
|
|
- uses: actions/setup-node@v6
|
|
|
with:
|
|
|
node-version: ${{ env.PRIMARY_NODE_VERSION }}
|
|
|
-
|
|
|
- # Extracting the many-file pnpm store cache is slower than a clean
|
|
|
- # install on hosted Windows runners, and saving it adds latency after
|
|
|
- # the gates. The self-hosted VM's persistent store makes caching
|
|
|
- # redundant.
|
|
|
- name: Install (immutable)
|
|
|
shell: pwsh
|
|
|
run: pnpm install --frozen-lockfile
|
|
|
+ - name: Build before coverage
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm run build
|
|
|
+ - name: Run Windows coverage
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm run check:ci:coverage
|
|
|
|
|
|
- - name: Run complete native Windows gate inventory
|
|
|
+ windows-native-tests:
|
|
|
+ if: github.event_name == 'pull_request'
|
|
|
+ runs-on: >-
|
|
|
+ ${{ vars.DSH_CI_FAILOVER_WINDOWS == 'selfhosted'
|
|
|
+ && github.event.pull_request.user.login != 'dependabot[bot]'
|
|
|
+ && fromJSON('["self-hosted", "dsh-win-ci", "windows"]')
|
|
|
+ || 'dsh-windows-2025-16core' }}
|
|
|
+ name: windows node 24 / native tests
|
|
|
+ timeout-minutes: 60
|
|
|
+ steps:
|
|
|
+ - uses: actions/checkout@v6
|
|
|
+ with:
|
|
|
+ persist-credentials: false
|
|
|
+ - name: Enable Developer Mode (symlink support)
|
|
|
+ shell: pwsh
|
|
|
+ run: >-
|
|
|
+ reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
|
|
|
+ /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
|
|
+ - uses: pnpm/action-setup@v4
|
|
|
+ with:
|
|
|
+ dest: ${{ runner.temp }}/setup-pnpm-js
|
|
|
+ - uses: actions/setup-node@v6
|
|
|
+ with:
|
|
|
+ node-version: ${{ env.PRIMARY_NODE_VERSION }}
|
|
|
+ - name: Install (immutable)
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm install --frozen-lockfile
|
|
|
+ - name: Run Windows-specific native tests
|
|
|
+ shell: pwsh
|
|
|
+ run: >-
|
|
|
+ pnpm exec vitest run
|
|
|
+ packages/shell/tool-pwsh/tests/loader.spec.ts
|
|
|
+ packages/workflow/workflow-worker-thread/tests/workflow-worker-thread.spec.ts
|
|
|
+ packages/workflow/tool-ralph/tests/integration.spec.ts
|
|
|
+ packages/subprocess/subprocess-local/tests/process-exit.spec.ts
|
|
|
+ packages/session/session-persistence-sqlite/tests/differential.spec.ts
|
|
|
+
|
|
|
+ windows-observational:
|
|
|
+ if: github.event_name == 'pull_request'
|
|
|
+ continue-on-error: true
|
|
|
+ runs-on: >-
|
|
|
+ ${{ vars.DSH_CI_FAILOVER_WINDOWS == 'selfhosted'
|
|
|
+ && github.event.pull_request.user.login != 'dependabot[bot]'
|
|
|
+ && fromJSON('["self-hosted", "dsh-win-ci", "windows"]')
|
|
|
+ || 'dsh-windows-2025-16core' }}
|
|
|
+ name: windows node 24 / observational
|
|
|
+ timeout-minutes: 60
|
|
|
+ env:
|
|
|
+ DSH_PUBLINT_CONCURRENCY: '8'
|
|
|
+ steps:
|
|
|
+ - uses: actions/checkout@v6
|
|
|
+ with:
|
|
|
+ persist-credentials: false
|
|
|
+ - name: Enable Developer Mode (symlink support)
|
|
|
+ shell: pwsh
|
|
|
+ run: >-
|
|
|
+ reg add "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock"
|
|
|
+ /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1"
|
|
|
+ - uses: pnpm/action-setup@v4
|
|
|
+ with:
|
|
|
+ dest: ${{ runner.temp }}/setup-pnpm-js
|
|
|
+ - uses: actions/setup-node@v6
|
|
|
+ with:
|
|
|
+ node-version: ${{ env.PRIMARY_NODE_VERSION }}
|
|
|
+ - name: Install (immutable)
|
|
|
+ shell: pwsh
|
|
|
+ run: pnpm install --frozen-lockfile
|
|
|
+ - name: Run Windows observational gates
|
|
|
shell: pwsh
|
|
|
- run: pnpm run check:ci:windows-complete
|
|
|
+ run: pnpm run check:ci:windows-observational
|
|
|
|
|
|
# Single stable required check for branch protection: require "all checks
|
|
|
# passed" instead of enumerating matrix legs whose names change as lanes and
|
|
|
@@ -479,7 +568,7 @@ jobs:
|
|
|
&& 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-build, windows-coverage, windows-native-tests]
|
|
|
if: always() && github.event_name == 'pull_request'
|
|
|
steps:
|
|
|
- name: Fail if any needed job did not succeed
|