chore(publish): fix timeout problem without lerna (#3679)
This commit is contained in:
1 parent
1f906963e7
commit
8feb5ee3f9
3 files changed
+61
-22
No files matched your search
+55
-16
@@ -1,24 +1,63 @@
|
||||
import { execa } from 'execa';
|
||||
import fs from 'fs/promises';
|
||||
import glob from 'glob';
|
||||
import path from 'path';
|
||||
|
||||
const MAX_RETRIES = 3;
|
||||
const RETRY_DELAY = 10000; // 10 seconds
|
||||
|
||||
async function run() {
|
||||
const { stdout: branchName } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD']);
|
||||
|
||||
// using the environment variable NPM_TOKEN, create a .npmrc file
|
||||
// and set the token to the value of the environment variable
|
||||
// Publishing each package, if on master/main branch publish beta versions
|
||||
// otherwise publish latest
|
||||
if (branchName === 'release') {
|
||||
await execa('npx', ['lerna', 'publish', 'from-package', '--no-verify-access', '--yes']);
|
||||
} else {
|
||||
await execa('npx', [
|
||||
'lerna',
|
||||
'publish',
|
||||
'from-package',
|
||||
'--no-verify-access',
|
||||
'--yes',
|
||||
'--dist-tag',
|
||||
'beta',
|
||||
]);
|
||||
const lernaJson = JSON.parse(await fs.readFile('lerna.json', 'utf8'));
|
||||
|
||||
const packages = lernaJson.packages;
|
||||
|
||||
const rootDir = process.cwd();
|
||||
|
||||
for (const packagePathPattern of packages) {
|
||||
const matchingDirectories = glob.sync(packagePathPattern);
|
||||
|
||||
for (const packageDirectory of matchingDirectories) {
|
||||
// change back to the root directory
|
||||
process.chdir(rootDir);
|
||||
|
||||
const packageJsonPath = path.join(packageDirectory, 'package.json');
|
||||
|
||||
try {
|
||||
const packageJsonContent = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
|
||||
|
||||
if (packageJsonContent.private) {
|
||||
console.log(`Skipping private package at ${packageDirectory}`);
|
||||
continue;
|
||||
}
|
||||
|
||||
process.chdir(packageDirectory);
|
||||
|
||||
let retries = 0;
|
||||
while (retries < MAX_RETRIES) {
|
||||
try {
|
||||
const publishArgs = ['publish'];
|
||||
|
||||
if (branchName === 'master') {
|
||||
publishArgs.push('--tag', 'beta');
|
||||
}
|
||||
|
||||
await execa('npm', publishArgs);
|
||||
console.log(`Successfully published package at ${packageDirectory}`);
|
||||
break;
|
||||
} catch (error) {
|
||||
retries++;
|
||||
console.error(
|
||||
`Failed to publish package at ${packageDirectory} with error ${error}, retrying... (${retries}/${MAX_RETRIES})`
|
||||
);
|
||||
await new Promise(resolve => setTimeout(resolve, RETRY_DELAY));
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`An error occurred while processing ${packageDirectory}: ${error}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
console.log('Finished');
|
||||
|
||||
Reference in new issue
Block a user