[ci] Fix ci prep script

During params parsing for this script, it previously would call out to
CircleCI for a build ID, but this is no longer needed.

ghstack-source-id: 9c70824498
Pull Request resolved: https://github.com/facebook/react/pull/30499
This commit is contained in:
Lauren Tan
2024-07-29 12:55:35 -04:00
parent 03072a7a11
commit 39acfdb3be
2 changed files with 2 additions and 93 deletions

View File

@@ -1,75 +0,0 @@
'use strict';
const fetch = require('node-fetch');
const POLLING_INTERVAL = 10 * 1000; // 10 seconds
const RETRY_TIMEOUT = 4 * 60 * 1000; // 4 minutes
function wait(ms) {
return new Promise(resolve => {
setTimeout(() => resolve(), ms);
});
}
function scrapeBuildIDFromStatus(status) {
return /\/facebook\/react\/([0-9]+)/.exec(status.target_url)[1];
}
async function getBuildIdForCommit(sha, allowBrokenCI = false) {
const retryLimit = Date.now() + RETRY_TIMEOUT;
retry: while (true) {
const statusesResponse = await fetch(
`https://api.github.com/repos/facebook/react/commits/${sha}/status?per_page=100`
);
if (!statusesResponse.ok) {
if (statusesResponse.status === 404) {
throw Error('Could not find commit for: ' + sha);
}
const {message, documentation_url} = await statusesResponse.json();
const msg = documentation_url
? `${message}\n\t${documentation_url}`
: message;
throw Error(msg);
}
const {statuses, state} = await statusesResponse.json();
if (!allowBrokenCI && state === 'failure') {
throw new Error(`Base commit is broken: ${sha}`);
}
for (let i = 0; i < statuses.length; i++) {
const status = statuses[i];
if (status.context === `ci/circleci: process_artifacts_combined`) {
if (status.state === 'success') {
return scrapeBuildIDFromStatus(status);
}
if (status.state === 'failure') {
throw new Error(`Build job for commit failed: ${sha}`);
}
if (status.state === 'pending') {
if (Date.now() < retryLimit) {
await wait(POLLING_INTERVAL);
continue retry;
}
// GitHub's status API is super flaky. Sometimes it reports a job
// as "pending" even after it completes in CircleCI. If it's still
// pending when we time out, return the build ID anyway.
// TODO: The location of the retry loop is a bit weird. We should
// probably combine this function with the one that downloads the
// artifacts, and wrap the retry loop around the whole thing.
return scrapeBuildIDFromStatus(status);
}
}
}
if (state === 'pending') {
if (Date.now() < retryLimit) {
await wait(POLLING_INTERVAL);
continue retry;
}
throw new Error('Exceeded retry limit. Build job is still pending.');
}
throw new Error('Could not find build for commit: ' + sha);
}
}
module.exports = getBuildIdForCommit;

View File

@@ -3,9 +3,7 @@
'use strict';
const commandLineArgs = require('command-line-args');
const getBuildIdForCommit = require('./get-build-id-for-commit');
const theme = require('../theme');
const {logPromise} = require('../utils');
const paramDefinitions = [
{
@@ -59,22 +57,8 @@ module.exports = async () => {
process.exit(1);
}
if (params.build === null && params.commit === null) {
console.error(
theme.error`Either a --commit or --build param must be specified.`
);
process.exit(1);
}
try {
if (params.build === null) {
params.build = await logPromise(
getBuildIdForCommit(params.commit, params.allowBrokenCI),
theme`Getting build ID for commit "${params.commit}"`
);
}
} catch (error) {
console.error(theme.error(error));
if (params.commit === null) {
console.error(theme.error`A --commit param must be specified.`);
process.exit(1);
}