puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts

87 lines
2.8 KiB
TypeScript
Raw Permalink Normal View History

/**
2024-01-03 10:11:33 +00:00
* @license
* Copyright 2020 Google Inc.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* This script ensures that the pinned version of devtools-protocol in
* package.json is the right version for the current revision of Chrome that
* Puppeteer ships with.
*
* The devtools-protocol package publisher runs every hour and checks if there
* are protocol changes. If there are, it will be versioned with the revision
* number of the commit that last changed the .pdl files.
*
* Chrome branches/releases are figured out at a later point in time, so it's
* not true that each Chrome revision will have an exact matching revision
* version of devtools-protocol. To ensure we're using a devtools-protocol that
* is aligned with our revision, we want to find the largest package number
* that's \<= the revision that Puppeteer is using.
*
* This script uses npm's `view` function to list all versions in a range and
* find the one closest to our Chrome revision.
*/
import {execSync} from 'child_process';
2023-10-23 11:59:10 +00:00
import packageJson from '../package.json' assert {type: 'json'};
import {PUPPETEER_REVISIONS} from '../src/revisions.js';
async function main() {
const currentProtocolPackageInstalledVersion =
packageJson.dependencies['devtools-protocol'];
/**
* Ensure that the devtools-protocol version is pinned.
*/
if (/^[^0-9]/.test(currentProtocolPackageInstalledVersion)) {
console.log(
`ERROR: devtools-protocol package is not pinned to a specific version.\n`
);
process.exit(1);
}
const chromeVersion = PUPPETEER_REVISIONS.chrome;
// find the right revision for our Chrome version.
const req = await fetch(
2023-10-23 11:59:10 +00:00
`https://googlechromelabs.github.io/chrome-for-testing/known-good-versions.json`
);
2023-10-23 11:59:10 +00:00
const releases = await req.json();
const chromeRevision = releases.versions.find(release => {
return release.version === chromeVersion;
2023-10-23 11:59:10 +00:00
}).revision;
console.log(`Revisions for ${chromeVersion}: ${chromeRevision}`);
const command = `npm view "devtools-protocol@<=0.0.${chromeRevision}" version | tail -1`;
console.log(
'Checking npm for devtools-protocol revisions:\n',
`'${command}'`,
'\n'
);
const output = execSync(command, {
encoding: 'utf8',
});
const bestRevisionFromNpm = output.split(' ')[1]!.replace(/'|\n/g, '');
if (currentProtocolPackageInstalledVersion !== bestRevisionFromNpm) {
console.log(`ERROR: bad devtools-protocol revision detected:
Current Puppeteer Chrome revision: ${chromeRevision}
Current devtools-protocol version in package.json: ${currentProtocolPackageInstalledVersion}
Expected devtools-protocol version: ${bestRevisionFromNpm}`);
process.exit(1);
}
console.log(
`Correct devtools-protocol version found (${bestRevisionFromNpm}).`
);
process.exit(0);
}
void main();