t3-code-android-nightly/.github/workflows/windows-tests.yml
Julius Marminge f96a220b5b
ci: add on-demand Windows test workflow (#9538)
Co-authored-by: Claude Code <noreply@anthropic.com>
2026-09-03 19:30:37 -07:00

81 lines
2.8 KiB
YAML

# On-demand Windows test lane. Manual only: nothing in the suite passes on
# Windows yet, so this exists to give contributors (and agents) a cloud Windows
# box to iterate against. Once the suite is green here, fold it into ci.yml.
#
# gh workflow run windows-tests.yml --ref <branch> -f package=packages/shared
# gh workflow run windows-tests.yml --ref <branch> -f package=apps/server \
# -f files="src/process/externalLauncher.test.ts src/cli/theme.test.ts"
# gh run watch && gh run view --log-failed
name: Windows Tests
on:
workflow_dispatch:
inputs:
package:
description: "Workspace directory to test, e.g. apps/server or packages/shared. Empty runs every package except apps/server."
type: string
default: ""
files:
description: "Space-separated test files relative to the package directory. Empty runs the package's whole suite. Requires package."
type: string
default: ""
permissions:
contents: read
jobs:
test:
name: Test (${{ inputs.package || 'all non-server' }})
runs-on: blacksmith-8vcpu-windows-2025
timeout-minutes: 45
steps:
- name: Checkout
uses: actions/checkout@v6
with:
sparse-checkout: |
/*
!/.repos/
sparse-checkout-cone-mode: false
# setup-vp's own cache restores a Linux-shaped store on Windows, which is
# slower than no cache (see #7975). Cache pnpm's Windows store directly.
- name: Setup Vite+
uses: voidzero-dev/setup-vp@v1
with:
node-version-file: package.json
cache: false
run-install: false
- name: Resolve package cache path
id: package_cache_path
shell: pwsh
run: '"path=$(vp pm cache dir)" >> $env:GITHUB_OUTPUT'
- name: Cache packages
uses: actions/cache@v6
with:
path: ${{ steps.package_cache_path.outputs.path }}
key: windows-tests-packages-v1-${{ hashFiles('pnpm-lock.yaml') }}
- name: Install
run: vp install
- name: Ensure Electron runtime is installed
if: inputs.package == '' || inputs.package == 'apps/desktop'
run: vp run --filter "@t3tools/desktop" ensure:electron
# `vp run ... test -- <files>` does not forward positional args to vitest,
# so file-scoped runs call `vp test run` inside the package instead.
- name: Test
shell: pwsh
run: |
$package = '${{ inputs.package }}'
$files = '${{ inputs.files }}'
if ($package -eq '') {
vp run --parallel --concurrency-limit 4 --filter '!t3' --filter '!@t3tools/monorepo' test
} elseif ($files -eq '') {
vp run --filter "./$package" test
} else {
Set-Location $package
vp test run $files.Split(' ')
}