mirror of
https://code.forgejo.org/actions/setup-node.git
synced 2024-12-25 03:55:50 +00:00
Add setting for always-auth (#48)
* Add setting for always-auth - https://docs.npmjs.com/misc/config#always-auth - Allow private repos for stuff like artifactory to work * Fix tests for always-auth
This commit is contained in:
parent
57adacb752
commit
7a3ce83626
7 changed files with 45 additions and 18 deletions
|
@ -2,20 +2,30 @@
|
||||||
|
|
||||||
exports[`installer tests Appends trailing slash to registry 1`] = `
|
exports[`installer tests Appends trailing slash to registry 1`] = `
|
||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
||||||
registry=https://registry.npmjs.org/"
|
registry=https://registry.npmjs.org/
|
||||||
|
always-auth=false"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`installer tests Automatically configures GPR scope 1`] = `
|
exports[`installer tests Automatically configures GPR scope 1`] = `
|
||||||
"npm.pkg.github.com/:_authToken=\${NODE_AUTH_TOKEN}
|
"npm.pkg.github.com/:_authToken=\${NODE_AUTH_TOKEN}
|
||||||
@ownername:registry=npm.pkg.github.com/"
|
@ownername:registry=npm.pkg.github.com/
|
||||||
|
always-auth=false"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`installer tests Configures scoped npm registries 1`] = `
|
exports[`installer tests Configures scoped npm registries 1`] = `
|
||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
||||||
@myscope:registry=https://registry.npmjs.org/"
|
@myscope:registry=https://registry.npmjs.org/
|
||||||
|
always-auth=false"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`installer tests Sets up npmrc for always-auth true 1`] = `
|
||||||
|
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
||||||
|
registry=https://registry.npmjs.org/
|
||||||
|
always-auth=true"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`installer tests Sets up npmrc for npmjs 1`] = `
|
exports[`installer tests Sets up npmrc for npmjs 1`] = `
|
||||||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN}
|
||||||
registry=https://registry.npmjs.org/"
|
registry=https://registry.npmjs.org/
|
||||||
|
always-auth=false"
|
||||||
`;
|
`;
|
||||||
|
|
|
@ -33,13 +33,13 @@ describe('installer tests', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Sets up npmrc for npmjs', async () => {
|
it('Sets up npmrc for npmjs', async () => {
|
||||||
await auth.configAuthentication('https://registry.npmjs.org/');
|
await auth.configAuthentication('https://registry.npmjs.org/', 'false');
|
||||||
expect(fs.existsSync(rcFile)).toBe(true);
|
expect(fs.existsSync(rcFile)).toBe(true);
|
||||||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Appends trailing slash to registry', async () => {
|
it('Appends trailing slash to registry', async () => {
|
||||||
await auth.configAuthentication('https://registry.npmjs.org');
|
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
||||||
|
|
||||||
expect(fs.existsSync(rcFile)).toBe(true);
|
expect(fs.existsSync(rcFile)).toBe(true);
|
||||||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
||||||
|
@ -47,16 +47,22 @@ describe('installer tests', () => {
|
||||||
|
|
||||||
it('Configures scoped npm registries', async () => {
|
it('Configures scoped npm registries', async () => {
|
||||||
process.env['INPUT_SCOPE'] = 'myScope';
|
process.env['INPUT_SCOPE'] = 'myScope';
|
||||||
await auth.configAuthentication('https://registry.npmjs.org');
|
await auth.configAuthentication('https://registry.npmjs.org', 'false');
|
||||||
|
|
||||||
expect(fs.existsSync(rcFile)).toBe(true);
|
expect(fs.existsSync(rcFile)).toBe(true);
|
||||||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Automatically configures GPR scope', async () => {
|
it('Automatically configures GPR scope', async () => {
|
||||||
await auth.configAuthentication('npm.pkg.github.com');
|
await auth.configAuthentication('npm.pkg.github.com', 'false');
|
||||||
|
|
||||||
expect(fs.existsSync(rcFile)).toBe(true);
|
expect(fs.existsSync(rcFile)).toBe(true);
|
||||||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('Sets up npmrc for always-auth true', async () => {
|
||||||
|
await auth.configAuthentication('https://registry.npmjs.org/', 'true');
|
||||||
|
expect(fs.existsSync(rcFile)).toBe(true);
|
||||||
|
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -2,6 +2,9 @@ name: 'Setup Node.js environment'
|
||||||
description: 'Setup a Node.js environment and add it to the PATH, additionally providing proxy support'
|
description: 'Setup a Node.js environment and add it to the PATH, additionally providing proxy support'
|
||||||
author: 'GitHub'
|
author: 'GitHub'
|
||||||
inputs:
|
inputs:
|
||||||
|
always-auth:
|
||||||
|
description: 'Set always-auth in npmrc'
|
||||||
|
default: 'false'
|
||||||
node-version:
|
node-version:
|
||||||
description: 'Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0'
|
description: 'Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0'
|
||||||
default: '10.x'
|
default: '10.x'
|
||||||
|
|
|
@ -12,15 +12,15 @@ const os = __importStar(require("os"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
const core = __importStar(require("@actions/core"));
|
const core = __importStar(require("@actions/core"));
|
||||||
const github = __importStar(require("@actions/github"));
|
const github = __importStar(require("@actions/github"));
|
||||||
function configAuthentication(registryUrl) {
|
function configAuthentication(registryUrl, alwaysAuth) {
|
||||||
const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
|
const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
|
||||||
if (!registryUrl.endsWith('/')) {
|
if (!registryUrl.endsWith('/')) {
|
||||||
registryUrl += '/';
|
registryUrl += '/';
|
||||||
}
|
}
|
||||||
writeRegistryToFile(registryUrl, npmrc);
|
writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
|
||||||
}
|
}
|
||||||
exports.configAuthentication = configAuthentication;
|
exports.configAuthentication = configAuthentication;
|
||||||
function writeRegistryToFile(registryUrl, fileLocation) {
|
function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
|
||||||
let scope = core.getInput('scope');
|
let scope = core.getInput('scope');
|
||||||
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
||||||
scope = github.context.repo.owner;
|
scope = github.context.repo.owner;
|
||||||
|
@ -47,7 +47,8 @@ function writeRegistryToFile(registryUrl, fileLocation) {
|
||||||
const registryString = scope
|
const registryString = scope
|
||||||
? `${scope}:registry=${registryUrl}`
|
? `${scope}:registry=${registryUrl}`
|
||||||
: `registry=${registryUrl}`;
|
: `registry=${registryUrl}`;
|
||||||
newContents += `${authString}${os.EOL}${registryString}`;
|
const alwaysAuthString = `always-auth=${alwaysAuth}`;
|
||||||
|
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
||||||
fs.writeFileSync(fileLocation, newContents);
|
fs.writeFileSync(fileLocation, newContents);
|
||||||
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
||||||
// Export empty node_auth_token so npm doesn't complain about not being able to find it
|
// Export empty node_auth_token so npm doesn't complain about not being able to find it
|
||||||
|
|
|
@ -35,8 +35,9 @@ function run() {
|
||||||
yield installer.getNode(version);
|
yield installer.getNode(version);
|
||||||
}
|
}
|
||||||
const registryUrl = core.getInput('registry-url');
|
const registryUrl = core.getInput('registry-url');
|
||||||
|
const alwaysAuth = core.getInput('always-auth');
|
||||||
if (registryUrl) {
|
if (registryUrl) {
|
||||||
auth.configAuthentication(registryUrl);
|
auth.configAuthentication(registryUrl, alwaysAuth);
|
||||||
}
|
}
|
||||||
// TODO: setup proxy from runner proxy config
|
// TODO: setup proxy from runner proxy config
|
||||||
const matchersPath = path.join(__dirname, '..', '.github');
|
const matchersPath = path.join(__dirname, '..', '.github');
|
||||||
|
|
|
@ -4,7 +4,7 @@ import * as path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as github from '@actions/github';
|
import * as github from '@actions/github';
|
||||||
|
|
||||||
export function configAuthentication(registryUrl: string) {
|
export function configAuthentication(registryUrl: string, alwaysAuth: string) {
|
||||||
const npmrc: string = path.resolve(
|
const npmrc: string = path.resolve(
|
||||||
process.env['RUNNER_TEMP'] || process.cwd(),
|
process.env['RUNNER_TEMP'] || process.cwd(),
|
||||||
'.npmrc'
|
'.npmrc'
|
||||||
|
@ -13,10 +13,14 @@ export function configAuthentication(registryUrl: string) {
|
||||||
registryUrl += '/';
|
registryUrl += '/';
|
||||||
}
|
}
|
||||||
|
|
||||||
writeRegistryToFile(registryUrl, npmrc);
|
writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
|
||||||
}
|
}
|
||||||
|
|
||||||
function writeRegistryToFile(registryUrl: string, fileLocation: string) {
|
function writeRegistryToFile(
|
||||||
|
registryUrl: string,
|
||||||
|
fileLocation: string,
|
||||||
|
alwaysAuth: string
|
||||||
|
) {
|
||||||
let scope: string = core.getInput('scope');
|
let scope: string = core.getInput('scope');
|
||||||
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
|
||||||
scope = github.context.repo.owner;
|
scope = github.context.repo.owner;
|
||||||
|
@ -45,7 +49,8 @@ function writeRegistryToFile(registryUrl: string, fileLocation: string) {
|
||||||
const registryString: string = scope
|
const registryString: string = scope
|
||||||
? `${scope}:registry=${registryUrl}`
|
? `${scope}:registry=${registryUrl}`
|
||||||
: `registry=${registryUrl}`;
|
: `registry=${registryUrl}`;
|
||||||
newContents += `${authString}${os.EOL}${registryString}`;
|
const alwaysAuthString: string = `always-auth=${alwaysAuth}`;
|
||||||
|
newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
|
||||||
fs.writeFileSync(fileLocation, newContents);
|
fs.writeFileSync(fileLocation, newContents);
|
||||||
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
|
||||||
// Export empty node_auth_token so npm doesn't complain about not being able to find it
|
// Export empty node_auth_token so npm doesn't complain about not being able to find it
|
||||||
|
|
|
@ -19,8 +19,9 @@ async function run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
const registryUrl: string = core.getInput('registry-url');
|
const registryUrl: string = core.getInput('registry-url');
|
||||||
|
const alwaysAuth: string = core.getInput('always-auth');
|
||||||
if (registryUrl) {
|
if (registryUrl) {
|
||||||
auth.configAuthentication(registryUrl);
|
auth.configAuthentication(registryUrl, alwaysAuth);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: setup proxy from runner proxy config
|
// TODO: setup proxy from runner proxy config
|
||||||
|
|
Loading…
Reference in a new issue