This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
const expectedNodeMajor = 24
|
||||
const expectedPnpmVersion = '10.33.0'
|
||||
|
||||
const actualNodeVersion = process.versions.node
|
||||
const actualNodeMajor = Number.parseInt(
|
||||
actualNodeVersion.split('.')[0] ?? '',
|
||||
10,
|
||||
)
|
||||
const packageManager = process.env.npm_config_user_agent ?? ''
|
||||
const requirePackageManager = process.argv.includes('--require-package-manager')
|
||||
const pnpmMatch = /(?:^|\s)pnpm\/([^\s]+)/u.exec(packageManager)
|
||||
|
||||
const failures = []
|
||||
if (actualNodeMajor !== expectedNodeMajor) {
|
||||
failures.push(
|
||||
`Node.js ${expectedNodeMajor}.x is required; current runtime is ${actualNodeVersion}.`,
|
||||
)
|
||||
}
|
||||
if (requirePackageManager && !pnpmMatch) {
|
||||
failures.push(
|
||||
`pnpm ${expectedPnpmVersion} is required; no pnpm user agent was detected.`,
|
||||
)
|
||||
} else if (
|
||||
pnpmMatch?.[1] !== undefined &&
|
||||
pnpmMatch[1] !== expectedPnpmVersion
|
||||
) {
|
||||
failures.push(
|
||||
`pnpm ${expectedPnpmVersion} is required; current package manager is pnpm ${pnpmMatch[1]}.`,
|
||||
)
|
||||
}
|
||||
|
||||
if (failures.length > 0) {
|
||||
console.error('DevRunbook runtime preflight failed:')
|
||||
for (const failure of failures) console.error(`- ${failure}`)
|
||||
console.error(
|
||||
'Use the versions declared in .nvmrc, .node-version and package.json before installing or verifying.',
|
||||
)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log(
|
||||
`DevRunbook runtime preflight passed: Node.js ${actualNodeVersion}${pnpmMatch ? `, pnpm ${pnpmMatch[1]}` : ''}.`,
|
||||
)
|
||||
Reference in New Issue
Block a user