diff --git a/lib/api/npm.js b/lib/api/npm.js index 9e2e8e4d2397d4793c2746b7e6a6ada0b1004d79..0f3d3c23181631cc629cefb45e67f9b17c479a4e 100644 --- a/lib/api/npm.js +++ b/lib/api/npm.js @@ -7,25 +7,31 @@ const registryAuthToken = require('registry-auth-token'); const logger = require('winston'); module.exports = { + setNpmrc, getDependency, resetCache, }; let npmCache = {}; +let npmrc = null; function resetCache() { npmCache = {}; } +async function setNpmrc(input) { + npmrc = input; +} + async function getDependency(name) { logger.debug(`getDependency(${name})`); const scope = name.split('/')[0]; - const regUrl = registryUrl(scope); + const regUrl = registryUrl(scope, { npmrc }); const pkgUrl = url.resolve( regUrl, encodeURIComponent(name).replace(/^%40/, '@') ); - const authInfo = registryAuthToken(regUrl); + const authInfo = registryAuthToken(regUrl, { npmrc }); const headers = {}; // Reduce metadata https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md diff --git a/lib/index.js b/lib/index.js index 612d478fbbac1175b55f25880c75fd3ef86e3478..5ff6f4899a2ca5fe6596ac84ccd7e528abf661c4 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,7 +3,9 @@ const logger = require('./logger'); const configParser = require('./config'); const githubApi = require('./api/github'); const gitlabApi = require('./api/gitlab'); +const npmApi = require('./api/npm'); const defaultsParser = require('./config/defaults'); +const ini = require('ini'); // Require main source const worker = require('./worker'); @@ -11,6 +13,7 @@ const worker = require('./worker'); module.exports = { start, processRepo, + setNpmrc, }; // This will be github or others @@ -53,6 +56,7 @@ async function processRepo(repo) { if (isConfigured === false) { return; } + await setNpmrc(); await findPackageFiles(config); const upgrades = await getAllRepoUpgrades(config); await worker.processUpgrades(upgrades); @@ -61,6 +65,21 @@ async function processRepo(repo) { } } +// Check for config in `renovate.json` +async function setNpmrc() { + try { + let npmrc = null; + const npmrcContent = await api.getFileContent('.npmrc'); + if (npmrcContent) { + logger.debug('Found .npmrc file in repository'); + npmrc = ini.parse(npmrcContent); + } + npmApi.setNpmrc(npmrc); + } catch (err) { + logger.error('Failed to set .npmrc'); + } +} + // Check for config in `renovate.json` async function mergeRenovateJson(config) { const renovateJson = await api.getFileJson('renovate.json'); diff --git a/package.json b/package.json index b5652ab43a9102a146b78cdffe90f0f0468e4af8..d83f9cbd39b8410f771c8f41da3e0d3548cae393 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "gl-got": "6.0.2", "got": "7.0.0", "handlebars": "4.0.10", + "ini": "1.3.4", "json-stringify-pretty-compact": "1.0.4", "jsonwebtoken": "7.4.1", "lodash": "4.17.4", diff --git a/yarn.lock b/yarn.lock index 3e7e1aef8fe3b8eedb36d997ff3db4974fa4b3cc..4bfa0e38b84bb4f09f8ada6ad6a64434bc387875 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1586,7 +1586,7 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@~1.3.0: +ini@1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"