diff options
Diffstat (limited to 'remote/test/puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts')
-rw-r--r-- | remote/test/puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/remote/test/puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts b/remote/test/puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts new file mode 100644 index 0000000000..5c0d74cbcd --- /dev/null +++ b/remote/test/puppeteer/packages/puppeteer-core/tools/ensure-correct-devtools-protocol-package.ts @@ -0,0 +1,97 @@ +/** + * Copyright 2020 Google Inc. All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * 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. + */ + +// eslint-disable-next-line import/extensions +import {execSync} from 'child_process'; + +import packageJson from '../package.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( + `https://chromiumdash.appspot.com/fetch_releases?channel=stable` + ); + const stableReleases = await req.json(); + const chromeRevision = stableReleases.find(release => { + return release.version === chromeVersion; + }).chromium_main_branch_position; + 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(); |