Repository: facebook/react
Pull request: [compiler] Clean up publish script


Few small tweaks to make it easier to run adhoc publishes
---
[//]: # (BEGIN SAPLING FOOTER)
Stack created with [Sapling](https://sapling-scm.com). Best reviewed with [ReviewStack](https://reviewstack.dev/facebook/react/pull/31278).
* #31283
* __->__ #31278

Changed files:
filename: .github/workflows/compiler_prereleases.yml
patch: @@ -49,4 +49,4 @@ jobs:
       - name: Publish packages to npm
         run: |
           cp ./scripts/release/ci-npmrc ~/.npmrc
-          scripts/release/publish.js --frfr --ci --tags ${{ inputs.dist_tag }}
+          scripts/release/publish.js --frfr --ci --versionName=0.0.0 --tag ${{ inputs.dist_tag }}

filename: compiler/scripts/release/publish.js
patch: @@ -59,12 +59,19 @@ async function main() {
       type: 'boolean',
       default: false,
     })
-    .option('tags', {
-      description: 'Tags to publish to npm',
-      type: 'string',
+    .option('tag', {
+      description: 'Tag to publish to npm',
+      type: 'choices',
+      choices: ['experimental', 'beta'],
       default: 'experimental',
     })
+    .option('version-name', {
+      description: 'Version name',
+      type: 'string',
+      default: '0.0.0',
+    })
     .help('help')
+    .strict()
     .parseSync();
 
   if (argv.debug === false) {
@@ -82,7 +89,7 @@ async function main() {
     pkgNames = [argv.packages];
   }
   const spinner = ora(
-    `Preparing to publish ${
+    `Preparing to publish ${argv.versionName}@${argv.tag} ${
       argv.forReal === true ? '(for real)' : '(dry run)'
     } [debug=${argv.debug}]`
   ).info();
@@ -118,14 +125,15 @@ async function main() {
       }
     );
     const dateString = await getDateStringForCommit(commit);
-    const otp = argv.ci === false ? await promptForOTP() : null;
+    const otp =
+      argv.ci === false && argv.debug === false ? await promptForOTP() : null;
     const {hash} = await hashElement(path.resolve(__dirname, '../..'), {
       encoding: 'hex',
       folders: {exclude: ['node_modules']},
       files: {exclude: ['.DS_Store']},
     });
     const truncatedHash = hash.slice(0, 7);
-    const newVersion = `0.0.0-experimental-${truncatedHash}-${dateString}`;
+    const newVersion = `${argv.versionName}-${argv.tag}-${truncatedHash}-${dateString}`;
 
     for (const pkgName of pkgNames) {
       const pkgDir = path.resolve(__dirname, `../../packages/${pkgName}`);
@@ -179,29 +187,27 @@ async function main() {
       spinner.succeed(`Successfully published ${pkgName} to npm`);
 
       spinner.start('Pushing tags to npm');
-      if (typeof argv.tags === 'string') {
-        for (const tag of argv.tags.split(',')) {
-          try {
-            let opts = ['dist-tag', 'add', `${pkgName}@${newVersion}`, tag];
-            if (otp != null) {
-              opts.push(`--otp=${otp}`);
-            }
-            if (argv.debug === true) {
-              spinner.info(`dry-run: npm ${opts.join(' ')}`);
-            } else {
-              await spawnHelper('npm', opts, {
-                cwd: pkgDir,
-                stdio: 'inherit',
-              });
-            }
-          } catch (e) {
-            spinner.fail(e.toString());
-            throw e;
+      if (typeof argv.tag === 'string') {
+        try {
+          let opts = ['dist-tag', 'add', `${pkgName}@${newVersion}`, argv.tag];
+          if (otp != null) {
+            opts.push(`--otp=${otp}`);
           }
-          spinner.succeed(
-            `Successfully pushed dist-tag ${tag} for ${pkgName} to npm`
-          );
+          if (argv.debug === true) {
+            spinner.info(`dry-run: npm ${opts.join(' ')}`);
+          } else {
+            await spawnHelper('npm', opts, {
+              cwd: pkgDir,
+              stdio: 'inherit',
+            });
+          }
+        } catch (e) {
+          spinner.fail(e.toString());
+          throw e;
         }
+        spinner.succeed(
+          `Successfully pushed dist-tag ${argv.tag} for ${pkgName} to npm`
+        );
       }
     }