Files
orca/config/scripts/pr-workflow-parallelism.test.mjs
T
Neil 71733ccc04 Speed up process-host import enforcement in CI (#27124)
Reduce import-scanner work by omitting unused AST parents and the duplicate traversal. Run the mandatory process-host import check alongside static work and explicitly join it before CI can succeed.

Update both workflow phase/enforcement contracts and migrate the newer benchmark to the public subprocess package API. Keep the original package build path, manifests, runtime, test selection, and shard count. Independent native review is clean; validation and timing evidence are in the PR.
2026-10-09 22:12:37 -07:00

58 lines
2.4 KiB
JavaScript

import { readFileSync } from 'node:fs'
import { runInNewContext } from 'node:vm'
import { parse } from 'yaml'
import { describe, expect, it } from 'vitest'
const workflow = parse(readFileSync('.github/workflows/pr.yml', 'utf8'))
const unitTestWorkflow = parse(readFileSync('.github/workflows/unit-tests.yml', 'utf8'))
describe('PR workflow parallelism', () => {
it('enforces process-host boundaries in the required static-analysis checks', () => {
const guard = workflow.jobs.preflight.steps.find((step) =>
step.run?.includes('pnpm run check:process-host-imports')
)
expect(guard?.if).toBe('!cancelled()')
expect(guard?.env.PREFLIGHT_PHASE_SELECTED).toBe(
"${{ needs.code_paths.outputs.static_analysis == 'true' }}"
)
expect(guard?.background).toBe(true)
const typecheckIndex = workflow.jobs.preflight.steps.findIndex(
(step) => step.run === 'pnpm run typecheck'
)
const waitIndex = workflow.jobs.preflight.steps.findIndex((step) => step.wait === guard.id)
expect(waitIndex).toBeGreaterThan(typecheckIndex)
expect(guard?.['continue-on-error']).toBeUndefined()
})
it('keeps advisory unit-selection evidence off the gate', () => {
// It is continue-on-error, so it can never fail a PR. Living inside unit-tests.yml made a
// caller's `needs: test` wait for it anyway, holding verify ~36s past the last shard. Pinned
// here so it cannot drift back onto the critical path.
const evidence = workflow.jobs.unit_selection_evidence
expect(evidence.uses).toBe('./.github/workflows/unit-selection-evidence.yml')
expect(evidence.needs).toEqual(['test'])
for (const [result, cancelled, expected] of [
['success', false, true],
['failure', false, true],
['skipped', false, false],
['cancelled', false, false],
['success', true, false],
['failure', true, false]
]) {
expect(
runInNewContext(evidence.if.slice(3, -2), {
cancelled: () => cancelled,
needs: { test: { result } }
})
).toBe(expected)
}
expect(workflow.jobs.verify.needs).not.toContain('unit_selection_evidence')
expect(unitTestWorkflow.jobs.selection_evidence).toBeUndefined()
const evidenceWorkflow = parse(
readFileSync('.github/workflows/unit-selection-evidence.yml', 'utf8')
)
const job = evidenceWorkflow.jobs.selection_evidence
expect(job['continue-on-error']).toBe(true)
})
})