mirror of
				https://github.com/actions/setup-node.git
				synced 2025-11-04 19:38:22 +08:00 
			
		
		
		
	Merge pull request #637 from akv-platform/v-sdolin/npmrc-dup
Fix scoped registries are duplicated in npmrc
This commit is contained in:
		@@ -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);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user