name: Windows CI on: push: pull_request: workflow_dispatch: permissions: contents: read jobs: verify: runs-on: windows-latest timeout-minutes: 120 env: CI: 'true' steps: - uses: actions/checkout@v4 timeout-minutes: 10 - uses: actions/setup-node@v4 timeout-minutes: 10 with: node-version: '24.11.1' cache: npm - name: Clean install run: npm ci timeout-minutes: 10 - name: Provision Electron binary run: | npx install-electron --no if ($LASTEXITCODE -ne 0) { npx install-electron --no if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } timeout-minutes: 10 - name: Lint run: npm run lint timeout-minutes: 10 - name: Lint configuration contract run: npm run test:lint-config timeout-minutes: 10 - name: Security contracts run: npm run security:check timeout-minutes: 10 - name: Security regression tests run: npm run test:security timeout-minutes: 10 - name: CI contract run: npm run test:ci-contract timeout-minutes: 10 - name: Installer contract run: npm run test:installer-contract timeout-minutes: 10 - name: Managed tools contract run: npm run test:managed-tools-contract timeout-minutes: 10 - name: Cutter matrix provisioning contract run: npm run test:cutter-matrix-contract timeout-minutes: 10 - name: Build run: npm run build timeout-minutes: 10 - name: Live integration contract run: npm run test:live-integration-contract timeout-minutes: 10 - name: Unit tests run: npm run test:unit timeout-minutes: 10 - name: Focused Electron smoke run: | npm run test:e2e:focused if ($LASTEXITCODE -ne 0) { npm run test:e2e:focused if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } timeout-minutes: 20 - name: Cutter media matrix run: | node scripts/smoke-test-cutter-media-matrix.js if ($LASTEXITCODE -ne 0) { node scripts/smoke-test-cutter-media-matrix.js if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } timeout-minutes: 20 - name: Clean managed tools provision and repair run: npm run test:managed-tools-live timeout-minutes: 10 - name: Package directory run: | npm run pack if ($LASTEXITCODE -ne 0) { npm run pack if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } timeout-minutes: 10 - name: Packaged launch smoke run: npm run test:packaged-launch timeout-minutes: 10 - name: Build installer run: | npm run dist:ci if ($LASTEXITCODE -ne 0) { npm run dist:ci if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } } timeout-minutes: 10 - name: Installer smoke run: npm run test:installer timeout-minutes: 10