diff --git a/lib/utils/config/definitions.js b/lib/utils/config/definitions.js index 67a830448e311..ec54d731beb4c 100644 --- a/lib/utils/config/definitions.js +++ b/lib/utils/config/definitions.js @@ -1970,6 +1970,11 @@ define('user-agent', { .replace(/\{arch\}/gi, process.arch) .replace(/\{ci\}/gi, ciName ? `ci/${ciName}` : '') .trim() + // user-agent is a unique kind of config item that gets set from a template + // and ends up translated. Because of this, the normal "should we set this + // to process.env also doesn't work + obj[key] = flatOptions.userAgent + process.env.npm_config_user_agent = flatOptions.userAgent }, }) diff --git a/test/lib/utils/config/definitions.js b/test/lib/utils/config/definitions.js index b6e1d1d01529e..49e51ace1aa30 100644 --- a/test/lib/utils/config/definitions.js +++ b/test/lib/utils/config/definitions.js @@ -733,10 +733,16 @@ t.test('user-agent', t => { `${process.platform} ${process.arch}` definitions['user-agent'].flatten('user-agent', obj, flat) t.equal(flat.userAgent, expectNoCI) + t.equal(process.env.npm_config_user_agent, flat.userAgent, 'npm_user_config environment is set') + t.equal(obj['user-agent'], flat.userAgent, 'config user-agent template is translated') + obj['ci-name'] = 'foo' + obj['user-agent'] = definitions['user-agent'].default const expectCI = `${expectNoCI} ci/foo` definitions['user-agent'].flatten('user-agent', obj, flat) t.equal(flat.userAgent, expectCI) + t.equal(process.env.npm_config_user_agent, flat.userAgent, 'npm_user_config environment is set') + t.equal(obj['user-agent'], flat.userAgent, 'config user-agent template is translated') t.end() })