ci: parallelize aggregate lint
This commit is contained in:
1
.github/workflows/ci.yml
vendored
1
.github/workflows/ci.yml
vendored
@@ -849,6 +849,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
DSH_COVERAGE_MAX_WORKERS: ${{ matrix.workers }}
|
DSH_COVERAGE_MAX_WORKERS: ${{ matrix.workers }}
|
||||||
DSH_ESLINT_CACHE: '1'
|
DSH_ESLINT_CACHE: '1'
|
||||||
|
DSH_ESLINT_CONCURRENCY: ${{ matrix.workers }}
|
||||||
DSH_GATE_CONCURRENCY: ${{ matrix.workers }}
|
DSH_GATE_CONCURRENCY: ${{ matrix.workers }}
|
||||||
DSH_PUBLINT_CONCURRENCY: ${{ matrix.workers }}
|
DSH_PUBLINT_CONCURRENCY: ${{ matrix.workers }}
|
||||||
DSH_SNAPSHOT_MAX_CONCURRENCY: ${{ matrix.workers }}
|
DSH_SNAPSHOT_MAX_CONCURRENCY: ${{ matrix.workers }}
|
||||||
|
|||||||
@@ -306,10 +306,12 @@ function ciWindowsObservationalGates(): Gate[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function lintGate(eslintTargets: readonly string[] = ['.']): Gate {
|
function lintGate(eslintTargets: readonly string[] = ['.']): Gate {
|
||||||
|
const concurrencyArgs = eslintConcurrencyArgs()
|
||||||
if (process.env.DSH_ESLINT_CACHE === '1') {
|
if (process.env.DSH_ESLINT_CACHE === '1') {
|
||||||
return pnpmExec('lint', [
|
return pnpmExec('lint', [
|
||||||
'eslint',
|
'eslint',
|
||||||
...eslintTargets,
|
...eslintTargets,
|
||||||
|
...concurrencyArgs,
|
||||||
'--cache',
|
'--cache',
|
||||||
'--cache-location',
|
'--cache-location',
|
||||||
'.cache/eslint/',
|
'.cache/eslint/',
|
||||||
@@ -320,11 +322,28 @@ function lintGate(eslintTargets: readonly string[] = ['.']): Gate {
|
|||||||
env: { NODE_OPTIONS: nodeOptions('--max-old-space-size=8192') },
|
env: { NODE_OPTIONS: nodeOptions('--max-old-space-size=8192') },
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
if (concurrencyArgs.length > 0) {
|
||||||
|
return pnpmExec('lint', ['eslint', ...eslintTargets, ...concurrencyArgs], {
|
||||||
|
label: 'lint',
|
||||||
|
env: { NODE_OPTIONS: nodeOptions('--max-old-space-size=8192') },
|
||||||
|
})
|
||||||
|
}
|
||||||
return pnpmScript('lint', 'lint', {
|
return pnpmScript('lint', 'lint', {
|
||||||
env: { NODE_OPTIONS: nodeOptions('--max-old-space-size=8192') },
|
env: { NODE_OPTIONS: nodeOptions('--max-old-space-size=8192') },
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function eslintConcurrencyArgs(): string[] {
|
||||||
|
const raw = process.env.DSH_ESLINT_CONCURRENCY
|
||||||
|
if (raw === undefined || raw === '') return []
|
||||||
|
if (raw === 'auto') return ['--concurrency=auto']
|
||||||
|
const parsed = Number.parseInt(raw, 10)
|
||||||
|
if (!Number.isSafeInteger(parsed) || parsed < 1 || String(parsed) !== raw) {
|
||||||
|
throw new Error(`run-gates: DSH_ESLINT_CONCURRENCY must be a positive integer or auto, got ${JSON.stringify(raw)}.`)
|
||||||
|
}
|
||||||
|
return [`--concurrency=${raw}`]
|
||||||
|
}
|
||||||
|
|
||||||
function coverageGate(): Gate {
|
function coverageGate(): Gate {
|
||||||
const shard = process.env.DSH_COVERAGE_SHARD
|
const shard = process.env.DSH_COVERAGE_SHARD
|
||||||
return pnpmExec('coverage', [
|
return pnpmExec('coverage', [
|
||||||
|
|||||||
Reference in New Issue
Block a user