mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
@@ -1564,6 +1564,19 @@ jobs:
|
||||
-d "{\"event_type\": \"publish\", \"client_payload\": { \"version\": \"${CIRCLE_TAG:1}\" }}"
|
||||
# END: Stable releases
|
||||
|
||||
poll_maven:
|
||||
docker:
|
||||
- image: cimg/node:current
|
||||
resource_class: small
|
||||
steps:
|
||||
- checkout_code_with_cache
|
||||
- run_yarn
|
||||
- run:
|
||||
name: Poll Maven for Artifacts
|
||||
command: |
|
||||
node scripts/circleci/poll-maven.js
|
||||
|
||||
|
||||
# -------------------------
|
||||
# JOBS: Nightly
|
||||
# -------------------------
|
||||
@@ -1869,6 +1882,9 @@ workflows:
|
||||
- build_hermesc_linux
|
||||
- build_hermes_macos
|
||||
- build_hermesc_windows
|
||||
- poll_maven:
|
||||
requires:
|
||||
- build_and_publish_npm_package
|
||||
|
||||
package_and_publish_release_dryrun:
|
||||
jobs:
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* 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 fetch = require('node-fetch');
|
||||
const fs = require('fs');
|
||||
|
||||
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();
|
||||
|
||||
async function pingMaven(artifact, rnVersion) {
|
||||
const url = `${baseMavenRepo}/${artifact}/${rnVersion}`;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user