104 lines
3.2 KiB
JavaScript
104 lines
3.2 KiB
JavaScript
|
/**
|
||
|
* Copyright 2023 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
|
||
|
*
|
||
|
* https://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.
|
||
|
*/
|
||
|
|
||
|
import {execSync} from 'child_process';
|
||
|
import {writeFile, readFile} from 'fs/promises';
|
||
|
|
||
|
import actions from '@actions/core';
|
||
|
import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
|
||
|
|
||
|
import packageJson from '../packages/puppeteer-core/package.json' assert {type: 'json'};
|
||
|
import {versionsPerRelease, lastMaintainedChromeVersion} from '../versions.js';
|
||
|
|
||
|
const CHROME_CURRENT_VERSION = PUPPETEER_REVISIONS.chrome;
|
||
|
const VERSIONS_PER_RELEASE_COMMENT =
|
||
|
'// In Chrome roll patches, use `NEXT` for the Puppeteer version.';
|
||
|
|
||
|
async function replaceInFile(filePath, search, replace) {
|
||
|
const buffer = await readFile(filePath);
|
||
|
const update = buffer.toString().replace(search, replace);
|
||
|
|
||
|
await writeFile(filePath, update);
|
||
|
}
|
||
|
|
||
|
async function getVersionAndRevisionForStable() {
|
||
|
const result = await fetch(
|
||
|
'https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json'
|
||
|
).then(response => {
|
||
|
return response.json();
|
||
|
});
|
||
|
|
||
|
const {version, revision} = result.channels['Stable'];
|
||
|
|
||
|
return {
|
||
|
version,
|
||
|
revision,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
async function updateDevToolsProtocolVersion(revision) {
|
||
|
const currentProtocol = packageJson.dependencies['devtools-protocol'];
|
||
|
const command = `npm view "devtools-protocol@<=0.0.${revision}" version | tail -1`;
|
||
|
|
||
|
const bestNewProtocol = execSync(command, {
|
||
|
encoding: 'utf8',
|
||
|
})
|
||
|
.split(' ')[1]
|
||
|
.replace(/'|\n/g, '');
|
||
|
|
||
|
await replaceInFile(
|
||
|
'./packages/puppeteer-core/package.json',
|
||
|
`"devtools-protocol": "${currentProtocol}"`,
|
||
|
`"devtools-protocol": "${bestNewProtocol}"`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
async function updateVersionFileLastMaintained(updateVersion) {
|
||
|
const versions = [...versionsPerRelease.keys()];
|
||
|
if (version.indexOf(updateVersion) !== -1) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
await replaceInFile(
|
||
|
'./versions.js',
|
||
|
VERSIONS_PER_RELEASE_COMMENT,
|
||
|
`${VERSIONS_PER_RELEASE_COMMENT}\n ['${version}', 'NEXT'],`
|
||
|
);
|
||
|
|
||
|
const lastMaintainedIndex = versions.indexOf(lastMaintainedChromeVersion);
|
||
|
const nextMaintainedVersion = versions[lastMaintainedIndex - 1];
|
||
|
|
||
|
await replaceInFile(
|
||
|
'./versions.js',
|
||
|
`const lastMaintainedChromeVersion = '${lastMaintainedChromeVersion}';`,
|
||
|
`const lastMaintainedChromeVersion = '${nextMaintainedVersion}';`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const {version, revision} = await getVersionAndRevisionForStable();
|
||
|
|
||
|
await replaceInFile(
|
||
|
'./packages/puppeteer-core/src/revisions.ts',
|
||
|
CHROME_CURRENT_VERSION,
|
||
|
version
|
||
|
);
|
||
|
|
||
|
await updateVersionFileLastMaintained(version);
|
||
|
await updateDevToolsProtocolVersion(revision);
|
||
|
|
||
|
actions.setOutput('version', version);
|
||
|
actions.setOutput('revision', revision);
|