From 839f09514c8a50e870575a12f1f35301aa40de9f Mon Sep 17 00:00:00 2001 From: Teddy Katz Date: Thu, 19 Jul 2018 22:10:02 -0700 Subject: [PATCH] Breaking: use a separate script to publish to the npm registry (refs https://github.com/eslint/eslint/issues/10631) This updates the release API to not publish to npm when initially called, and to only publish to npm when invoked as a separate process. This will make it possible to pause the build to ask the user for a TOTP code before publishing, provided that consumers of the package are updated accordingly. --- bin/eslint-ci-release.js | 0 bin/eslint-gh-release.js | 0 bin/eslint-prerelease.js | 0 bin/eslint-publish.js | 14 ++++++++++++++ bin/eslint-release.js | 0 lib/release-ops.js | 25 +++++++++++++++++-------- package.json | 3 ++- 7 files changed, 33 insertions(+), 9 deletions(-) mode change 100644 => 100755 bin/eslint-ci-release.js mode change 100644 => 100755 bin/eslint-gh-release.js mode change 100644 => 100755 bin/eslint-prerelease.js create mode 100755 bin/eslint-publish.js mode change 100644 => 100755 bin/eslint-release.js diff --git a/bin/eslint-ci-release.js b/bin/eslint-ci-release.js old mode 100644 new mode 100755 diff --git a/bin/eslint-gh-release.js b/bin/eslint-gh-release.js old mode 100644 new mode 100755 diff --git a/bin/eslint-prerelease.js b/bin/eslint-prerelease.js old mode 100644 new mode 100755 diff --git a/bin/eslint-publish.js b/bin/eslint-publish.js new file mode 100755 index 0000000..40ea2d1 --- /dev/null +++ b/bin/eslint-publish.js @@ -0,0 +1,14 @@ +#!/usr/bin/env node + +/** + * @fileoverview CLI to publish a package to npm after changelog and package.json have been updated + * @author Teddy Katz + * @copyright jQuery Foundation and other contributors, https://jquery.org/ + * MIT License + */ + +"use strict"; + +var ReleaseOps = require("../lib/release-ops"); + +ReleaseOps.publishReleaseToNpm(); diff --git a/bin/eslint-release.js b/bin/eslint-release.js old mode 100644 new mode 100755 diff --git a/lib/release-ops.js b/lib/release-ops.js index 9740ebf..17587a1 100644 --- a/lib/release-ops.js +++ b/lib/release-ops.js @@ -415,13 +415,7 @@ function release(prereleaseId, ciRelease) { fs.writeFileSync(".npmrc", "//registry.npmjs.org/:_authToken=${NPM_TOKEN}"); } - // if there's a prerelease ID, publish under "next" tag - console.log("Publishing to npm"); - if (prereleaseId) { - ShellOps.exec("npm publish --tag next"); - } else { - ShellOps.exec("npm publish"); - } + console.log("Not publishing to npm. To publish, run: npm publish" + (prereleaseId ? " --tag next" : "")); // undo any differences if (!ciRelease) { @@ -473,6 +467,20 @@ function publishReleaseToGitHub(releaseInfo) { } +function publishReleaseToNpm() { + // if there's a prerelease ID, publish under "next" tag + console.log("Publishing to npm"); + if (!process.env.NPM_OTP) { + throw new TypeError("NPM_OTP environment variable must be set to publish a package"); + } + + if (semver.prerelease(getPackageInfo().version)) { + ShellOps.exec("npm publish --tag next --otp " + process.env.NPM_OTP); + } else { + ShellOps.exec("npm publish --otp" + process.env.NPM_OTP); + } +} + //------------------------------------------------------------------------------ // Public API //------------------------------------------------------------------------------ @@ -483,5 +491,6 @@ module.exports = { calculateReleaseInfo: calculateReleaseInfo, calculateReleaseFromGitLogs: calculateReleaseFromGitLogs, writeChangelog: writeChangelog, - publishReleaseToGitHub: publishReleaseToGitHub + publishReleaseToGitHub: publishReleaseToGitHub, + publishReleaseToNpm: publishReleaseToNpm }; diff --git a/package.json b/package.json index f08efff..bc8a79d 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "eslint-release": "./bin/eslint-release.js", "eslint-ci-release": "./bin/eslint-ci-release.js", "eslint-gh-release": "./bin/eslint-gh-release.js", - "eslint-prerelease": "./bin/eslint-prerelease.js" + "eslint-prerelease": "./bin/eslint-prerelease.js", + "eslint-publish": "./bin/eslint-publish.js" }, "scripts": { "test": "npm run lint && mocha tests/lib/*.js",