|
|
@@ -34,6 +34,7 @@ export type Mode =
|
|
|
| 'ci-windows-observational'
|
|
|
| 'node-compat'
|
|
|
| 'check-all'
|
|
|
+ | 'hygiene'
|
|
|
| 'doc-sync'
|
|
|
|
|
|
type GateResultStatus = 'passed' | 'failed' | 'skipped'
|
|
|
@@ -124,11 +125,12 @@ function parseMode(raw: string | undefined): Mode {
|
|
|
case 'ci-windows-observational':
|
|
|
case 'node-compat':
|
|
|
case 'check-all':
|
|
|
+ case 'hygiene':
|
|
|
case 'doc-sync':
|
|
|
return raw
|
|
|
default:
|
|
|
throw new Error(
|
|
|
- `run-gates: expected mode ci-primary | ci-linux-primary | ci-static | ci-lint-contracts-ready | ci-coverage | ci-snapshot | ci-artifacts | ci-consumers | ci-windows-blocking | ci-windows-complete | ci-windows-observational | node-compat | check-all | doc-sync, got ${JSON.stringify(raw)}.`,
|
|
|
+ `run-gates: expected mode ci-primary | ci-linux-primary | ci-static | ci-lint-contracts-ready | ci-coverage | ci-snapshot | ci-artifacts | ci-consumers | ci-windows-blocking | ci-windows-complete | ci-windows-observational | node-compat | check-all | hygiene | doc-sync, got ${JSON.stringify(raw)}.`,
|
|
|
)
|
|
|
}
|
|
|
}
|
|
|
@@ -148,7 +150,7 @@ export function defaultConcurrency(
|
|
|
if (selectedMode === 'ci-consumers') return { workers: total, source: 'ci-consumers gate count' }
|
|
|
// Local modes cap workers: several doc gates each build a full ts.Program,
|
|
|
// so an uncapped default on a large host trades wall clock for memory blowups.
|
|
|
- const localCap = selectedMode === 'check-all' || selectedMode === 'doc-sync'
|
|
|
+ const localCap = selectedMode === 'check-all' || selectedMode === 'hygiene' || selectedMode === 'doc-sync'
|
|
|
const modeLimit = localCap ? Math.min(4, available) : available
|
|
|
return {
|
|
|
workers: Math.min(total, modeLimit),
|
|
|
@@ -249,6 +251,13 @@ export function gatesForMode(selected: Mode): Gate[] {
|
|
|
}),
|
|
|
pnpmScript('module-graph', 'verify-module-graph', { label: 'module graph' }),
|
|
|
]
|
|
|
+ case 'hygiene':
|
|
|
+ return [
|
|
|
+ ...hygieneLeafGates(),
|
|
|
+ pnpmScript('cordis-config', 'verify-cordis-config', { label: 'Cordis config' }),
|
|
|
+ pnpmScript('runtime-closure', 'verify-runtime-closure', { label: 'runtime closure' }),
|
|
|
+ pnpmScript('vendored-links', 'verify-vendored-links', { label: 'vendored links' }),
|
|
|
+ ]
|
|
|
case 'doc-sync':
|
|
|
return docSyncLeafGates()
|
|
|
}
|
|
|
@@ -640,38 +649,38 @@ function docSyncLeafGates(options: {
|
|
|
if (options.docTypecheckNeeds !== undefined) docTypecheckOptions.needs = options.docTypecheckNeeds
|
|
|
if (options.docTypecheckEnv !== undefined) docTypecheckOptions.env = options.docTypecheckEnv
|
|
|
return [
|
|
|
+ // Stable FIFO starts the longest leaves first; only docs-site-build writes website/.generated.
|
|
|
...options.includeDocTypecheck === false
|
|
|
? []
|
|
|
: [pnpmScript('doc-typecheck', options.docTypecheckScript ?? 'doc-typecheck', docTypecheckOptions)],
|
|
|
+ pnpmScript('docs-site-build', options.docsBuildScript ?? 'docs:build', { label: 'documentation build' }),
|
|
|
+ pnpmScript('doc-graphs', 'verify-doc-graphs', { label: 'doc graphs' }),
|
|
|
+ pnpmScript('markdown-links', 'verify-md-links', { label: 'markdown links' }),
|
|
|
+ pnpmScript('type-equivalence', 'verify-type-equiv', { label: 'type equivalence' }),
|
|
|
pnpmScript('cordis-catalog', 'verify-cordis-catalog', { label: 'cordis catalog' }),
|
|
|
+ pnpmScript('mermaid', 'verify-mermaid'),
|
|
|
+ pnpmScript('scoped-events', 'verify-scoped-events', { label: 'scoped events' }),
|
|
|
+ pnpmScript('translation-pairing', 'verify-translation-pairing', { label: 'translation pairing' }),
|
|
|
+ pnpmScript('markdown-wrap', 'verify-md-wrap', { label: 'markdown wrap' }),
|
|
|
pnpmScript('client-catalog', 'verify-client-catalog', { label: 'client catalog' }),
|
|
|
pnpmScript('export-jsdoc', 'verify-export-jsdoc', { label: 'export jsdoc' }),
|
|
|
pnpmScript('tool-catalog', 'verify-tool-catalog', { label: 'tool catalog' }),
|
|
|
pnpmScript('config-catalog', 'verify-config-catalog', { label: 'config catalog' }),
|
|
|
pnpmScript('persistence-catalog', 'verify-persistence-catalog', { label: 'persistence catalog' }),
|
|
|
- pnpmScript('doc-graphs', 'verify-doc-graphs', { label: 'doc graphs' }),
|
|
|
- pnpmScript('scoped-events', 'verify-scoped-events', { label: 'scoped events' }),
|
|
|
- pnpmScript('markdown-wrap', 'verify-md-wrap', { label: 'markdown wrap' }),
|
|
|
- pnpmScript('markdown-links', 'verify-md-links', { label: 'markdown links' }),
|
|
|
pnpmScript('public-repository-links', 'verify-public-repository-links', { label: 'public repository links' }),
|
|
|
pnpmScript('doc-refs', 'verify-doc-refs', { label: 'doc refs' }),
|
|
|
pnpmScript('package-paths', 'verify-package-paths', { label: 'package paths' }),
|
|
|
pnpmScript('config-source-ownership', 'verify-config-source-ownership', { label: 'config source ownership' }),
|
|
|
pnpmScript('package-readme-model-experience', 'verify-package-readme-model-experience', { label: 'package README model experience' }),
|
|
|
- pnpmScript('mermaid', 'verify-mermaid'),
|
|
|
pnpmScript('agent-note-classification', 'verify-agent-note-classification', { label: 'agent note classification' }),
|
|
|
pnpmScript('agent-note-format', 'verify-agent-note-format', { label: 'agent note format' }),
|
|
|
pnpmScript('archived-agent-notes', 'verify-archived-agent-notes', { label: 'archived agent notes' }),
|
|
|
- pnpmScript('type-equivalence', 'verify-type-equiv', { label: 'type equivalence' }),
|
|
|
pnpmScript('skill-invocation-metadata', 'verify-skill-invocation-metadata', { label: 'skill invocation metadata' }),
|
|
|
pnpmScript('translation-prompt', 'verify-translation-prompt', { label: 'translation prompt' }),
|
|
|
- pnpmScript('translation-pairing', 'verify-translation-pairing', { label: 'translation pairing' }),
|
|
|
pnpmScript('doc-budgets', 'verify-doc-budgets', { label: 'doc budgets' }),
|
|
|
pnpmExec('docs-site-projection', ['vitest', 'run', 'scripts/project-doc-site.spec.ts', 'scripts/verify-doc-site-fragments.spec.ts'], {
|
|
|
label: 'documentation site checks',
|
|
|
}),
|
|
|
- // Keep the VitePress build itself in one gate because projection rewrites website/.generated.
|
|
|
- pnpmScript('docs-site-build', options.docsBuildScript ?? 'docs:build', { label: 'documentation build' }),
|
|
|
pnpmScript('package-readme-limitations', 'verify-package-readme-limitations', { label: 'package README limitations' }),
|
|
|
]
|
|
|
}
|