aboutsummaryrefslogtreecommitdiffstats
path: root/packages
diff options
context:
space:
mode:
Diffstat (limited to 'packages')
-rw-r--r--packages/monorepo-scripts/src/publish.ts67
1 files changed, 4 insertions, 63 deletions
diff --git a/packages/monorepo-scripts/src/publish.ts b/packages/monorepo-scripts/src/publish.ts
index 42d0a374f..7007b75e5 100644
--- a/packages/monorepo-scripts/src/publish.ts
+++ b/packages/monorepo-scripts/src/publish.ts
@@ -178,69 +178,10 @@ async function updateChangeLogsAsync(updatedPublicPackages: Package[]): Promise<
}
async function lernaPublishAsync(packageToNextVersion: { [name: string]: string }): Promise<void> {
- // HACK: Lerna publish does not provide a way to specify multiple package versions via
- // flags so instead we need to interact with their interactive prompt interface.
- const child = spawn('lerna', ['publish', `--skip-git`], {
- cwd: constants.monorepoRootPath,
- });
- let shouldPrintOutput = false;
- let packageName: string;
- let ignoreCounter = 0;
- child.stdout.on('data', (data: Buffer) => {
- if (ignoreCounter !== 0) {
- ignoreCounter--;
- return; // ignore
- }
- const output = data.toString('utf8');
- console.log('-------');
- console.log(output);
- console.log('-------');
- if (shouldPrintOutput) {
- utils.log(output);
- }
- const isVersionPrompt = _.includes(output, 'Select a new version');
- if (isVersionPrompt) {
- const outputStripLeft = output.split('new version for ')[1];
- const packageNameFound = outputStripLeft.split(' ')[0];
- if (packageName === packageNameFound) {
- return; // noop
- }
- packageName = packageNameFound;
- ignoreCounter = 1; // SemVerIndex.Custom is a single digit number
- sleepAndWrite(child.stdin, SemVerIndex.Custom);
- }
- const isCustomVersionPrompt = _.includes(output, 'Enter a custom version');
- if (isCustomVersionPrompt) {
- const versionChange = packageToNextVersion[packageName];
- if (_.isUndefined(versionChange)) {
- throw new Error(`Must have a nextVersion for each packageName. Didn't find one for ${packageName}`);
- }
- ignoreCounter = versionChange.length;
- sleepAndWrite(child.stdin, versionChange);
- }
- const isFinalPrompt = _.includes(output, 'Are you sure you want to publish the above changes?');
- if (isFinalPrompt && !IS_DRY_RUN) {
- ignoreCounter = 'y'.length;
- sleepAndWrite(child.stdin, 'y');
- // After confirmations, we want to print the output to watch the `lerna publish` command
- shouldPrintOutput = true;
- } else if (isFinalPrompt && IS_DRY_RUN) {
- utils.log(
- `Submitted all versions to Lerna but since this is a dry run, did not confirm. You need to CTRL-C to exit.`,
- );
- }
- });
- child.stderr.on('data', (data: Buffer) => {
- const output = data.toString('utf8');
- utils.log('Stderr:', output);
- });
-}
-
-function sleepAndWrite(fileDescriptor: any, input: string | number): void {
- const TIMEOUT = 1000;
- setTimeout(() => {
- fileDescriptor.write(`${input}\n`);
- }, TIMEOUT);
+ const packageVersionString = _.map(packageToNextVersion, (nextVersion: string, packageName: string) => {
+ return `${packageName}@${nextVersion}`;
+ }).join(',');
+ await execAsync('lerna', `--cdVersions=${packageVersionString}`, '--skip-git');
}
function updateVersionNumberIfNeeded(currentVersion: string, proposedNextVersion: string): string {