refactor(ci): colocate the shard timing catalog with sharding (#38409)

This commit is contained in:
Neil
2026-11-04 22:47:35 -08:00
committed by GitHub
parent 4353e3287c
commit 1cdc53d47a
6 changed files with 7 additions and 7 deletions
@@ -14,7 +14,7 @@ const SCAN_ROOTS = ['config', '.github', 'tests']
const SOURCE_ROOTS = 'main|renderer|shared|cli|preload|packages|types|wsl-guest'
const RESOLVED_EXTENSIONS = ['.ts', '.tsx', '.js', '.mjs', '.cjs', '/index.ts']
// Generated timings; a stale row only skews shard balance and is rewritten by its generator.
const EXCLUDED_FILES = new Set(['config/scripts/ci-shard-timings.json'])
const EXCLUDED_FILES = new Set(['config/scripts/ci/sharding/ci-shard-timings.json'])
const GATE_MANIFEST = 'config/reliability-gates.jsonc'
// Command strings in manifests and scripts name paths unquoted; in code only quoted literals count.
const UNQUOTED_ALLOWED = /\.(?:jsonc?|ya?ml|sh|ps1)$/
@@ -91,7 +91,7 @@ describe('isScannedPath', () => {
expect(isScannedPath('tests/e2e/ssh-orcad-terminal-journeys.spec.ts')).toBe(true)
expect(isScannedPath('config/scripts/pr-e2e-source-routing.test.mjs')).toBe(false)
expect(isScannedPath('tests/e2e/helpers/pr-comments-sidebar-fixture.ts')).toBe(false)
expect(isScannedPath('config/scripts/ci-shard-timings.json')).toBe(false)
expect(isScannedPath('config/scripts/ci/sharding/ci-shard-timings.json')).toBe(false)
expect(isScannedPath('config/patches/foo.patch')).toBe(false)
})
})
@@ -48,7 +48,7 @@ export function balanceFiles(files, count, timings, overheadMs = 0) {
}
export function readTimingBaseline(suite) {
const bytes = readFileSync(new URL('../../ci-shard-timings.json', import.meta.url), 'utf8')
const bytes = readFileSync(new URL('./ci-shard-timings.json', import.meta.url), 'utf8')
const baseline = JSON.parse(bytes)
return { ...baseline[suite], baselineSha256: createHash('sha256').update(bytes).digest('hex') }
}
@@ -68,7 +68,7 @@ baseline. Runs from before the fixes are not comparable, because their `pty-subp
files still carried 5-second waits.
```sh
node config/scripts/ci/sharding/ci-unit-timing-import.mjs RUN_DIR... config/scripts/ci-shard-timings.json
node config/scripts/ci/sharding/ci-unit-timing-import.mjs RUN_DIR... config/scripts/ci/sharding/ci-shard-timings.json
```
Each directory holds one run's twelve `unit-shard-node-*` artifacts. Every run is validated
@@ -217,7 +217,7 @@ API, source workflow/config, report provenance and exact file coverage against t
saved assignments, then run:
```sh
node config/scripts/ci/sharding/ci-unit-timing-import.mjs ARTIFACT_DIRECTORY config/scripts/ci-shard-timings.json
node config/scripts/ci/sharding/ci-unit-timing-import.mjs ARTIFACT_DIRECTORY config/scripts/ci/sharding/ci-shard-timings.json
```
The importer rejects missing or duplicate shards, duplicate files, failed unit reports,
@@ -234,7 +234,7 @@ job IDs from the Actions jobs API and fetch each with
lanes or multiple attempts. Then run:
```sh
node config/scripts/ci/sharding/ci-shard-timing-import.mjs LOG_DIRECTORY UNIT_RUN_ID E2E_RUN_ID config/scripts/ci-shard-timings.json
node config/scripts/ci/sharding/ci-shard-timing-import.mjs LOG_DIRECTORY UNIT_RUN_ID E2E_RUN_ID config/scripts/ci/sharding/ci-shard-timings.json
```
The initial source logs are in `/tmp/orca-ci-shard-logs`; two were reused from
@@ -65,7 +65,7 @@ describe('the actual terminal smoke dependency graph', () => {
it.each([
'src/renderer/src/components/Example.tsx',
'src/main/menu/register-app-menu.ts',
'config/scripts/ci-shard-timings.json',
'config/scripts/ci/sharding/ci-shard-timings.json',
'.github/workflows/e2e.yml',
'docs/reference/ci-runner-efficiency.md'
])('skips unrelated inputs: %s', async (file) => {