| // Copyright 2025 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import assert from 'node:assert/strict'; | |
| import {readFile} from 'node:fs/promises'; | |
| import {parseArgs} from 'node:util'; | |
| import process from 'node:process'; | |
| function extractExpectedVersion(contents) { | |
| const NODE_VERSION_REGEX = /\s*NODE_VERSION\s*=\s*"(?<version>[^"]+)"/; | |
| const match = contents.match(NODE_VERSION_REGEX); | |
| assert.ok(match !== null, 'Could not extract NodeJS version.'); | |
| return match.groups['version']; | |
| } | |
| async function main() { | |
| const options = { | |
| expected_version_file: {type: 'string'}, | |
| }; | |
| const parsed = parseArgs({options}); | |
| const args = parsed.values; | |
| assert.ok( | |
| !!args.expected_version_file, | |
| 'Missing required \'expected_version_file\' flag'); | |
| let contents = | |
| await readFile(args.expected_version_file, {encoding: 'utf-8'}); | |
| const expectedVersion = extractExpectedVersion(contents); | |
| const errorMessage = | |
| `Failed NodeJS version check: Expected version '${expectedVersion}', ` + | |
| `but found '${process.version}'. Did you run 'gclient sync'? If the ` + | |
| `problem persists try running 'gclient sync -f' instead, or deleting ` + | |
| `third_party/node/{linux,win,mac} folders and trying again.`; | |
| assert.equal(expectedVersion, process.version, errorMessage); | |
| } | |
| main(); |