mirror of
https://github.com/actions/setup-node
synced 2024-12-22 21:22:42 +00:00
Merge pull request #637 from akv-platform/v-sdolin/npmrc-dup
Fix scoped registries are duplicated in npmrc
This commit is contained in:
commit
d1b197b965
3 changed files with 87 additions and 10 deletions
|
@ -123,6 +123,7 @@ describe('authutil tests', () => {
|
||||||
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
expect(rc['registry']).toBe('https://registry.npmjs.org/');
|
||||||
expect(rc['always-auth']).toBe('true');
|
expect(rc['always-auth']).toBe('true');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('It is already set the NODE_AUTH_TOKEN export it ', async () => {
|
it('It is already set the NODE_AUTH_TOKEN export it ', async () => {
|
||||||
process.env.NODE_AUTH_TOKEN = 'foobar';
|
process.env.NODE_AUTH_TOKEN = 'foobar';
|
||||||
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
||||||
|
@ -132,4 +133,84 @@ describe('authutil tests', () => {
|
||||||
expect(rc['always-auth']).toBe('false');
|
expect(rc['always-auth']).toBe('false');
|
||||||
expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar');
|
expect(process.env.NODE_AUTH_TOKEN).toEqual('foobar');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should overwrite non-scoped with non-scoped', async () => {
|
||||||
|
fs.writeFileSync(rcFile, 'registry=NNN');
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should overwrite only non-scoped', async () => {
|
||||||
|
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`@myscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should add non-scoped to scoped', async () => {
|
||||||
|
fs.writeFileSync(rcFile, '@myscope:registry=NNN');
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`@myscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should overwrite scoped with scoped', async () => {
|
||||||
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
|
fs.writeFileSync(rcFile, `@myscope:registry=NNN`);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should overwrite only scoped', async () => {
|
||||||
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
|
fs.writeFileSync(rcFile, `registry=NNN${os.EOL}@myscope:registry=MMM`);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should add scoped to non-scoped', async () => {
|
||||||
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
|
fs.writeFileSync(rcFile, `registry=MMM`);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should overwrite only one scoped', async () => {
|
||||||
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
|
fs.writeFileSync(
|
||||||
|
rcFile,
|
||||||
|
`@otherscope:registry=NNN${os.EOL}@myscope:registry=MMM`
|
||||||
|
);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`@otherscope:registry=NNN${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('configAuthentication should add scoped to another scoped', async () => {
|
||||||
|
process.env['INPUT_SCOPE'] = 'myscope';
|
||||||
|
fs.writeFileSync(rcFile, `@otherscope:registry=MMM`);
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
let contents = fs.readFileSync(rcFile, {encoding: 'utf8'});
|
||||||
|
expect(contents).toBe(
|
||||||
|
`@otherscope:registry=MMM${os.EOL}//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}${os.EOL}@myscope:registry=https://registry.npmjs.org/${os.EOL}always-auth=true`
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
8
dist/setup/index.js
vendored
8
dist/setup/index.js
vendored
|
@ -72945,7 +72945,7 @@ function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
|
||||||
scope = '@' + scope;
|
scope = '@' + scope;
|
||||||
}
|
}
|
||||||
if (scope) {
|
if (scope) {
|
||||||
scope = scope.toLowerCase();
|
scope = scope.toLowerCase() + ':';
|
||||||
}
|
}
|
||||||
core.debug(`Setting auth in ${fileLocation}`);
|
core.debug(`Setting auth in ${fileLocation}`);
|
||||||
let newContents = '';
|
let newContents = '';
|
||||||
|
@ -72953,16 +72953,14 @@ function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
|
||||||
const curContents = fs.readFileSync(fileLocation, 'utf8');
|
const curContents = fs.readFileSync(fileLocation, 'utf8');
|
||||||
curContents.split(os.EOL).forEach((line) => {
|
curContents.split(os.EOL).forEach((line) => {
|
||||||
// Add current contents unless they are setting the registry
|
// Add current contents unless they are setting the registry
|
||||||
if (!line.toLowerCase().startsWith('registry')) {
|
if (!line.toLowerCase().startsWith(`${scope}registry`)) {
|
||||||
newContents += line + os.EOL;
|
newContents += line + os.EOL;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Remove http: or https: from front of registry.
|
// Remove http: or https: from front of registry.
|
||||||
const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
||||||
const registryString = scope
|
const registryString = `${scope}registry=${registryUrl}`;
|
||||||
? `${scope}:registry=${registryUrl}`
|
|
||||||
: `registry=${registryUrl}`;
|
|
||||||
const alwaysAuthString = `always-auth=${alwaysAuth}`;
|
const alwaysAuthString = `always-auth=${alwaysAuth}`;
|
||||||
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
||||||
fs.writeFileSync(fileLocation, newContents);
|
fs.writeFileSync(fileLocation, newContents);
|
||||||
|
|
|
@ -29,7 +29,7 @@ function writeRegistryToFile(
|
||||||
scope = '@' + scope;
|
scope = '@' + scope;
|
||||||
}
|
}
|
||||||
if (scope) {
|
if (scope) {
|
||||||
scope = scope.toLowerCase();
|
scope = scope.toLowerCase() + ':';
|
||||||
}
|
}
|
||||||
|
|
||||||
core.debug(`Setting auth in ${fileLocation}`);
|
core.debug(`Setting auth in ${fileLocation}`);
|
||||||
|
@ -38,7 +38,7 @@ function writeRegistryToFile(
|
||||||
const curContents: string = fs.readFileSync(fileLocation, 'utf8');
|
const curContents: string = fs.readFileSync(fileLocation, 'utf8');
|
||||||
curContents.split(os.EOL).forEach((line: string) => {
|
curContents.split(os.EOL).forEach((line: string) => {
|
||||||
// Add current contents unless they are setting the registry
|
// Add current contents unless they are setting the registry
|
||||||
if (!line.toLowerCase().startsWith('registry')) {
|
if (!line.toLowerCase().startsWith(`${scope}registry`)) {
|
||||||
newContents += line + os.EOL;
|
newContents += line + os.EOL;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -46,9 +46,7 @@ function writeRegistryToFile(
|
||||||
// Remove http: or https: from front of registry.
|
// Remove http: or https: from front of registry.
|
||||||
const authString: string =
|
const authString: string =
|
||||||
registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
|
||||||
const registryString: string = scope
|
const registryString: string = `${scope}registry=${registryUrl}`;
|
||||||
? `${scope}:registry=${registryUrl}`
|
|
||||||
: `registry=${registryUrl}`;
|
|
||||||
const alwaysAuthString: string = `always-auth=${alwaysAuth}`;
|
const alwaysAuthString: string = `always-auth=${alwaysAuth}`;
|
||||||
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
||||||
fs.writeFileSync(fileLocation, newContents);
|
fs.writeFileSync(fileLocation, newContents);
|
||||||
|
|
Loading…
Reference in a new issue