mirror of
https://github.com/stablyai/orca.git
synced 2026-10-31 00:57:45 +00:00
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.
58 lines
2.4 KiB
JavaScript
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)
|
|
})
|
|
})
|