From 9b339e37cbd6e07d32dcf88bf92e9602421a3ea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20=C3=81ngel?= Date: Mon, 26 Oct 2026 19:29:17 +0000 Subject: [PATCH] fix(ci): the producer integration test list is data, not part of the pinned selection logic (#6467) --- .../producer/scripts/integration-tests.json | 39 +++++++++++++++ .../producer/scripts/test-classification.mjs | 47 ++----------------- .../scripts/test-classification.test.mjs | 10 ++++ scripts/test-reachability.json | 2 +- 4 files changed, 55 insertions(+), 43 deletions(-) create mode 100644 packages/producer/scripts/integration-tests.json diff --git a/packages/producer/scripts/integration-tests.json b/packages/producer/scripts/integration-tests.json new file mode 100644 index 0000000000..c9dd5b9d62 --- /dev/null +++ b/packages/producer/scripts/integration-tests.json @@ -0,0 +1,39 @@ +[ + "tests/distributed/_smoke/webm-concat-copy.test.ts", + "tests/playback-rate-av-parity/playback-rate-av-parity.test.ts", + "src/regression-harness-psnr.test.ts", + "src/regression-harness-audio.test.ts", + "src/services/bundleScriptPolicy.test.ts", + "src/services/coreRuntimeBrowser.test.ts", + "src/services/heifImagePrep.test.ts", + "src/services/htmlCompiler.heif.test.ts", + "src/services/vfxDeterminism.test.ts", + "src/services/distributed/assemble.test.ts", + "src/services/distributed/chunkBoundary.test.ts", + "src/services/distributed/crossWorkerIdempotency.test.ts", + "src/services/distributed/plan.masterBus.test.ts", + "src/services/distributed/plan.test.ts", + "src/services/distributed/planSizeCap.test.ts", + "src/services/distributed/planV2RemoteFiles.test.ts", + "src/services/distributed/renderChunk.test.ts", + "src/services/fileServer.test.ts", + "src/services/fileServer.file-race.test.ts", + "src/services/healthWorker.test.ts", + "src/services/scriptFailureAttribution.test.ts", + "src/services/hyperframeLint.file-race.test.ts", + "src/services/assetMediaType.test.ts", + "src/services/htmlCompiler.mediaType.test.ts", + "src/services/htmlCompiler.naturalDuration.test.ts", + "src/services/render/firstFrameStartingState.integration.test.ts", + "src/services/render/hlsRender.integration.test.ts", + "src/services/render/motionBlurVideo.integration.test.ts", + "src/services/render/renderCancel.integration.test.ts", + "src/services/render/segmentedColorGrading.integration.test.ts", + "src/services/render/wrappedMountTiming.integration.test.ts", + "src/services/render/stages/compileStage.mediaType.test.ts", + "src/services/render/stages/encodeWhileCapturing.test.ts", + "src/services/render/stages/gifEncodeArgs.test.ts", + "src/services/videoFrameBorderClip.test.ts", + "src/utils/audioRegression.test.ts", + "src/utils/streamDurationParity.test.ts" +] diff --git a/packages/producer/scripts/test-classification.mjs b/packages/producer/scripts/test-classification.mjs index 0cd0515ff1..dee11e6f67 100644 --- a/packages/producer/scripts/test-classification.mjs +++ b/packages/producer/scripts/test-classification.mjs @@ -5,48 +5,11 @@ import { fileURLToPath } from "node:url"; export const PRODUCER_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), ".."); -// These tests need host capabilities such as Chrome, ffmpeg, worker threads, -// or local sockets. Keep the list explicit so a filename-only rename does not -// make Git/fallow re-audit thousands of unchanged test lines as new code. -const INTEGRATION_TEST_FILES = new Set([ - "tests/distributed/_smoke/webm-concat-copy.test.ts", - "tests/playback-rate-av-parity/playback-rate-av-parity.test.ts", - "src/regression-harness-psnr.test.ts", - "src/regression-harness-audio.test.ts", - "src/services/bundleScriptPolicy.test.ts", - "src/services/coreRuntimeBrowser.test.ts", - "src/services/heifImagePrep.test.ts", - "src/services/htmlCompiler.heif.test.ts", - "src/services/vfxDeterminism.test.ts", - "src/services/distributed/assemble.test.ts", - "src/services/distributed/chunkBoundary.test.ts", - "src/services/distributed/crossWorkerIdempotency.test.ts", - "src/services/distributed/plan.masterBus.test.ts", - "src/services/distributed/plan.test.ts", - "src/services/distributed/planSizeCap.test.ts", - "src/services/distributed/planV2RemoteFiles.test.ts", - "src/services/distributed/renderChunk.test.ts", - "src/services/fileServer.test.ts", - "src/services/fileServer.file-race.test.ts", - "src/services/healthWorker.test.ts", - "src/services/scriptFailureAttribution.test.ts", - "src/services/hyperframeLint.file-race.test.ts", - "src/services/assetMediaType.test.ts", - "src/services/htmlCompiler.mediaType.test.ts", - "src/services/htmlCompiler.naturalDuration.test.ts", - "src/services/render/firstFrameStartingState.integration.test.ts", - "src/services/render/hlsRender.integration.test.ts", - "src/services/render/motionBlurVideo.integration.test.ts", - "src/services/render/renderCancel.integration.test.ts", - "src/services/render/segmentedColorGrading.integration.test.ts", - "src/services/render/wrappedMountTiming.integration.test.ts", - "src/services/render/stages/compileStage.mediaType.test.ts", - "src/services/render/stages/encodeWhileCapturing.test.ts", - "src/services/render/stages/gifEncodeArgs.test.ts", - "src/services/videoFrameBorderClip.test.ts", - "src/utils/audioRegression.test.ts", - "src/utils/streamDurationParity.test.ts", -]); +// The tests that need host capabilities such as Chrome, ffmpeg, worker threads or local sockets, one path per +// line, so adding one never edits (or re-pins) the selection logic below. +const INTEGRATION_TEST_FILES = new Set( + JSON.parse(readFileSync(resolve(PRODUCER_ROOT, "scripts/integration-tests.json"), "utf8")), +); function collectTestFiles(directory, files = []) { for (const entry of readdirSync(directory, { withFileTypes: true })) { diff --git a/packages/producer/scripts/test-classification.test.mjs b/packages/producer/scripts/test-classification.test.mjs index 6d76baa334..6d994161d2 100644 --- a/packages/producer/scripts/test-classification.test.mjs +++ b/packages/producer/scripts/test-classification.test.mjs @@ -1,4 +1,5 @@ import assert from "node:assert/strict"; +import { readFileSync } from "node:fs"; import { describe, it } from "node:test"; import { classifyTestSource, @@ -7,6 +8,15 @@ import { } from "./test-classification.mjs"; describe("producer test classification", () => { + it("keeps the integration list out of the selection logic the reachability check pins", () => { + const logic = readFileSync(new URL("./test-classification.mjs", import.meta.url), "utf8"); + assert.doesNotMatch(logic, /["'][^"']*\/[^"']*\.test\.tsx?["']/); + const listed = JSON.parse( + readFileSync(new URL("./integration-tests.json", import.meta.url), "utf8"), + ); + assert.equal(new Set(listed).size, listed.length); + }); + it("classifies each supported runner into one lane", () => { assert.deepEqual(classifyTestSource("src/a.test.ts", 'import { it } from "bun:test";'), { file: "src/a.test.ts", diff --git a/scripts/test-reachability.json b/scripts/test-reachability.json index 781a5f6d9a..3c4fdee9f0 100644 --- a/scripts/test-reachability.json +++ b/scripts/test-reachability.json @@ -47,7 +47,7 @@ ], "sources": { "packages/producer/scripts/run-test-lane.mjs": "638885e14480d03290803389325a655f3749442167d784e07bb3af3404598af7", - "packages/producer/scripts/test-classification.mjs": "c434da94aa74aef060ef41736af798fd5a9af9236684a47d07a19661c1f78b9b", + "packages/producer/scripts/test-classification.mjs": "e0874fac79225203b38778b144adb753a656afa0f78e08758001ff32ba9a0c62", ".github/workflows/ci.yml#job#producer-source-tests": "45da72aa6cf08cdfd5bcf5311e89f12af4842f9eebc6735df19da8c02f4d4864", "packages/producer/package.json#script#test:unit": "ae6beda8319d166774be958ea5593cd27dbf7f6c9bce1d787a3fe28dfc3477b1", "packages/producer/package.json#script#test:integration": "008589f37d026877595a13501cbb66abd5cbe50e21fdcac6904f45466c3f475d",