mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-11 06:30:03 +00:00
ci: optimize Windows test lanes (#3579)
This commit is contained in:
@@ -185,9 +185,18 @@ jobs:
|
|||||||
# --frozen-lockfile.
|
# --frozen-lockfile.
|
||||||
run: bun install --frozen-lockfile --linker=hoisted
|
run: bun install --frozen-lockfile --linker=hoisted
|
||||||
|
|
||||||
- name: Build all packages
|
# The CLI bundle consumes Engine and Producer from source, but copies the
|
||||||
|
# built Studio and Player artifacts. Build only that dependency chain;
|
||||||
|
# cloud adapters, SDK playground, and other publish-only packages are not
|
||||||
|
# exercised by this Windows render smoke test.
|
||||||
|
- name: Build render prerequisites
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: bun run build
|
run: |
|
||||||
|
bun run --filter '@hyperframes/{parsers,lint,studio-server}' build
|
||||||
|
bun run --cwd packages/core build
|
||||||
|
bun run --filter @hyperframes/player build
|
||||||
|
bun run --filter @hyperframes/studio build
|
||||||
|
bun run --filter @hyperframes/cli build
|
||||||
|
|
||||||
# -----------------------------------------------------------------
|
# -----------------------------------------------------------------
|
||||||
# Prove the PR #336 fix: hyperframes doctor exercises findFFmpeg()
|
# Prove the PR #336 fix: hyperframes doctor exercises findFFmpeg()
|
||||||
@@ -375,12 +384,28 @@ jobs:
|
|||||||
# trips a bun-on-Windows workspace-symlink quirk reading the
|
# trips a bun-on-Windows workspace-symlink quirk reading the
|
||||||
# producer's transitive `hono` dep.
|
# producer's transitive `hono` dep.
|
||||||
# -------------------------------------------------------------------
|
# -------------------------------------------------------------------
|
||||||
test-windows:
|
test-windows-lane:
|
||||||
name: Tests on windows-latest
|
name: "Tests on windows-latest: ${{ matrix.lane }}"
|
||||||
needs: [changes, preflight]
|
needs: [changes, preflight]
|
||||||
if: needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch'
|
if: needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch'
|
||||||
runs-on: windows-latest
|
runs-on: windows-latest
|
||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Latest successful main run: each half of Studio is roughly 168s.
|
||||||
|
# Adding Core's 81s to one lane and Engine's 102s plus the 45s runtime
|
||||||
|
# contract to the other keeps elapsed work close without running
|
||||||
|
# Studio concurrently with the process-heavy Engine and CLI suites.
|
||||||
|
- lane: studio-core
|
||||||
|
studio_shard: 1/2
|
||||||
|
packages: --filter @hyperframes/core --filter @hyperframes/player --filter @hyperframes/shader-transitions
|
||||||
|
runtime_contract: false
|
||||||
|
- lane: studio-engine-cli
|
||||||
|
studio_shard: 2/2
|
||||||
|
packages: --filter @hyperframes/engine --filter @hyperframes/cli
|
||||||
|
runtime_contract: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Disable Windows Defender real-time monitoring
|
- name: Disable Windows Defender real-time monitoring
|
||||||
@@ -431,20 +456,40 @@ jobs:
|
|||||||
# --frozen-lockfile.
|
# --frozen-lockfile.
|
||||||
run: bun install --frozen-lockfile --linker=hoisted
|
run: bun install --frozen-lockfile --linker=hoisted
|
||||||
|
|
||||||
- name: Build
|
# Vitest loads these workspace packages through their Node dist exports.
|
||||||
|
# No tested package needs the full publish build used by `bun run build`.
|
||||||
|
- name: Build test prerequisites
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: bun run build
|
run: |
|
||||||
|
bun run --filter '@hyperframes/{parsers,lint,studio-server}' build
|
||||||
|
bun run --cwd packages/core build
|
||||||
|
|
||||||
- name: Run tests (all packages except producer + aws-lambda)
|
- name: Run Studio shard ${{ matrix.studio_shard }}
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
# Enumerate the packages we want to test instead of negating —
|
run: bun run --cwd packages/studio test -- --shard=${{ matrix.studio_shard }} --maxWorkers=2
|
||||||
# `bun run --filter "!a" --filter "!b"` composes as a union (any
|
|
||||||
# package matching either negation runs), not an intersection.
|
- name: Run ${{ matrix.lane }} package tests
|
||||||
# That meant `@hyperframes/producer` was effectively still being
|
shell: pwsh
|
||||||
# tested on Windows, which is what we explicitly want skipped
|
# Each package starts its own Vitest pool. Bound every pool so concurrent
|
||||||
# (Docker / LFS-baseline tooling).
|
# package scripts cannot oversubscribe the hosted Windows runner.
|
||||||
run: bun run --filter @hyperframes/core --filter @hyperframes/engine --filter @hyperframes/player --filter @hyperframes/cli --filter @hyperframes/studio --filter @hyperframes/shader-transitions test
|
run: bun run ${{ matrix.packages }} test -- --maxWorkers=2
|
||||||
|
|
||||||
- name: Run runtime contract test
|
- name: Run runtime contract test
|
||||||
|
if: matrix.runtime_contract
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
run: bun run --filter "@hyperframes/core" test:hyperframe-runtime-ci
|
run: bun run --filter "@hyperframes/core" test:hyperframe-runtime-ci
|
||||||
|
|
||||||
|
# Preserve the existing required check name while the two balanced lanes stay
|
||||||
|
# independently visible and rerunnable.
|
||||||
|
test-windows:
|
||||||
|
name: Tests on windows-latest
|
||||||
|
needs: [changes, test-windows-lane]
|
||||||
|
if: always() && (needs.changes.outputs.code == 'true' || github.event_name == 'workflow_dispatch')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 2
|
||||||
|
steps:
|
||||||
|
- name: Require all Windows test lanes
|
||||||
|
if: needs.test-windows-lane.result != 'success'
|
||||||
|
run: |
|
||||||
|
echo "::error::One or more Windows test lanes did not succeed."
|
||||||
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user