react-native/scripts/circleci/poll-maven.js
Moti Zilberman d6e0bc714a Enable lint/sort-imports everywhere (#41334)
Summary:
Pull Request resolved: https://github.com/facebook/react-native/pull/41334

TSIA.

Changelog: [Internal]

Reviewed By: robhogan

Differential Revision: D51025812

fbshipit-source-id: e10d437be775a6b80946483aa96460f34927f870
2023-11-06 12:59:38 -08:00

85 lines
2.3 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
const fs = require('fs');
const fetch = require('node-fetch');
const baseMavenRepo = 'https://repo1.maven.org/maven2/com/facebook/react';
const artifacts = ['react-native-artifacts', 'react-android', 'hermes-android'];
const humanNames = {
'react-native-artifacts': 'Hermes for iOS',
'react-android': 'React Native for Android',
'hermes-android': 'Hermes for Android',
};
const ping_minutes = 5;
const max_hours = 5;
const ping_interval = ping_minutes * 60 * 1000; // 5 minutes
const max_wait = max_hours * 60 * 60 * 1000; // 5 hours
const startTime = Date.now();
let shouldLogUrl = true;
function logUrlIfNeeded(url) {
if (!shouldLogUrl) {
return;
}
console.log(`Attempting to HEAD at url: ${url}`);
shouldLogUrl = false;
}
async function pingMaven(artifact, rnVersion) {
const url = `${baseMavenRepo}/${artifact}/${rnVersion}`;
logUrlIfNeeded(url);
const response = await fetch(url, {method: 'HEAD'});
if (response.status === 200) {
console.log(`Found artifact for ${humanNames[artifact]}\n`);
return;
} else if (response.status !== 404) {
throw new Error(
`Unexpected response code ${response.status} for ${humanNames[artifact]}`,
);
}
const elapsedTime = Date.now() - startTime;
if (elapsedTime > max_wait) {
throw new Error(`${max_hours} hours has passed. Exiting.`);
}
// Wait a bit
console.log(
`${humanNames[artifact]} not available yet. Waiting ${ping_minutes} minutes.\n`,
);
await new Promise(resolve => setTimeout(resolve, ping_interval));
await pingMaven(url);
}
async function main() {
const package = JSON.parse(
fs.readFileSync('packages/react-native/package.json', 'utf8'),
);
const rnVersion = package.version;
if (rnVersion === '1000.0.0') {
console.log(
'We are not on a release branch when a release has been initiated. Exiting.',
);
return;
}
console.log(`Checking artifacts for React Native version ${rnVersion}\n`);
for (const artifact of artifacts) {
console.log(`Start pinging for ${humanNames[artifact]}`);
await pingMaven(artifact, rnVersion);
shouldLogUrl = true;
}
}
main();