-
Notifications
You must be signed in to change notification settings - Fork 24.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add scripts and pipeline to poll for maven (#38980)
- Loading branch information
1 parent
ff27568
commit 33fc55d
Showing
2 changed files
with
88 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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(); |