From c55addfbb20f6c7cb9ac3ace96fc9b6c904394a3 Mon Sep 17 00:00:00 2001 From: Pavel Denisjuk Date: Fri, 9 Mar 2018 16:31:54 +0100 Subject: [PATCH] npm authentication (#5) * fix(npm-verify): write NPM_TOKEN to a local .npmrc file * fix(npm plugin): unset npm_* env variables before using `npm` --- src/plugins/npm/publish.js | 8 +++++++- src/plugins/npm/verify.js | 2 +- tests/npmPublish.test.js | 20 ++++++++++++-------- tests/npmVerify.test.js | 2 +- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/plugins/npm/publish.js b/src/plugins/npm/publish.js index c9cc5cd..4f9c0a2 100644 --- a/src/plugins/npm/publish.js +++ b/src/plugins/npm/publish.js @@ -23,7 +23,13 @@ export default () => { fs.writeJsonSync(path.join(pkg.location, "package.json"), pkg.packageJSON, { spaces: 2 }); - const shell = await execa("npm", ["publish", `${pkg.location}`]); + // We need to unset the `npm_` env variables to make sure local `.npmrc` is being read. + // This is required when running scripts with yarn: https://github.com/yarnpkg/yarn/issues/4475 + const shell = await execa.shell( + `unset $(env | awk -F= '$1 ~ /^npm_/ {print $1}') && npm publish ${ + pkg.location + }` + ); logger.log(shell.stdout); pkg.npmPublish = { ...shell diff --git a/src/plugins/npm/verify.js b/src/plugins/npm/verify.js index dc67970..2093467 100644 --- a/src/plugins/npm/verify.js +++ b/src/plugins/npm/verify.js @@ -17,7 +17,7 @@ export default () => { await fs.appendFile("./.npmrc", `\n//registry.npmjs.org/:_authToken=${NPM_TOKEN}`); // We need to unset the `npm_` env variables to make sure local `.npmrc` is being read. // This is required when running scripts with yarn: https://github.com/yarnpkg/yarn/issues/4475 - execa.shellSync("unset $(env | awk -F= '$1 ~ /^npm_/ {print $1}') && npm whoami"); + await execa.shell("unset $(env | awk -F= '$1 ~ /^npm_/ {print $1}') && npm whoami"); next(); } catch (err) { throw new Error("EINVALIDNPMTOKEN: " + err.message); diff --git a/tests/npmPublish.test.js b/tests/npmPublish.test.js index 401a787..daa2979 100644 --- a/tests/npmPublish.test.js +++ b/tests/npmPublish.test.js @@ -55,9 +55,11 @@ describe("npmPublish plugin test", function() { let packageWritten = false; proxyquire("../src/plugins/npm/publish", { - execa: () => { - packageWritten = fileExists(dir + "/package.json"); - return { stdout: pkg.packageJSON.name + "@" + pkg.packageJSON.version }; + execa: { + shell: () => { + packageWritten = fileExists(dir + "/package.json"); + return { stdout: pkg.packageJSON.name + "@" + pkg.packageJSON.version }; + } } }); @@ -105,11 +107,13 @@ describe("npmPublish plugin test", function() { }; proxyquire("../src/plugins/npm/publish", { - execa: stub() - .onFirstCall() - .throws(() => new Error("Invalid package")) - .onSecondCall() - .returns({ stdout: pkg2.packageJSON.name + "@" + pkg2.packageJSON.version }) + execa: { + shell: stub() + .onFirstCall() + .throws(() => new Error("Invalid package")) + .onSecondCall() + .returns({ stdout: pkg2.packageJSON.name + "@" + pkg2.packageJSON.version }) + } }); const { default: npmPublishFactory } = await import("../src/plugins/npm/publish"); diff --git a/tests/npmVerify.test.js b/tests/npmVerify.test.js index ed291b7..69f4efa 100644 --- a/tests/npmVerify.test.js +++ b/tests/npmVerify.test.js @@ -52,7 +52,7 @@ describe("npmVerify plugin test", function() { proxyquire(modulePath, { execa: { - shellSync: async () => { + shell: async () => { const npmrc = await fs.readFile("./.npmrc"); if (npmrc.includes("//registry.npmjs.org/:_authToken=npm-token")) { return true;