-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
// Jest Snapshot v1, https://goo.gl/fbAQLP | ||
|
||
exports[`installer tests Appends trailing slash to registry 1`] = ` | ||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN} | ||
registry=https://registry.npmjs.org/" | ||
`; | ||
|
||
exports[`installer tests Automatically configures GPR scope 1`] = ` | ||
"npm.pkg.github.com/:_authToken=\${NODE_AUTH_TOKEN} | ||
@owner:registry=npm.pkg.github.com/" | ||
`; | ||
|
||
exports[`installer tests Configures scoped npm registries 1`] = ` | ||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN} | ||
@myScope:registry=https://registry.npmjs.org/" | ||
`; | ||
|
||
exports[`installer tests Sets up npmrc for npmjs 1`] = ` | ||
"//registry.npmjs.org/:_authToken=\${NODE_AUTH_TOKEN} | ||
registry=https://registry.npmjs.org/" | ||
`; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
import io = require('@actions/io'); | ||
import fs = require('fs'); | ||
import path = require('path'); | ||
|
||
const tempDir = path.join( | ||
__dirname, | ||
'runner', | ||
path.join( | ||
Math.random() | ||
.toString(36) | ||
.substring(7) | ||
), | ||
'temp' | ||
); | ||
|
||
const rcFile = path.join(tempDir, '.npmrc'); | ||
|
||
process.env['GITHUB_REPOSITORY'] = 'owner/repo'; | ||
process.env['RUNNER_TEMP'] = tempDir; | ||
import * as auth from '../src/authutil'; | ||
|
||
describe('installer tests', () => { | ||
beforeAll(async () => { | ||
await io.rmRF(tempDir); | ||
await io.mkdirP(tempDir); | ||
}, 100000); | ||
|
||
beforeEach(() => { | ||
if (fs.existsSync(rcFile)) { | ||
fs.unlinkSync(rcFile); | ||
} | ||
process.env['INPUT_SCOPE'] = ''; | ||
}); | ||
|
||
it('Sets up npmrc for npmjs', async () => { | ||
await auth.configAuthentication('https://registry.npmjs.org/'); | ||
expect(fs.existsSync(rcFile)).toBe(true); | ||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||
}); | ||
|
||
it('Appends trailing slash to registry', async () => { | ||
await auth.configAuthentication('https://registry.npmjs.org'); | ||
|
||
expect(fs.existsSync(rcFile)).toBe(true); | ||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||
}); | ||
|
||
it('Configures scoped npm registries', async () => { | ||
process.env['INPUT_SCOPE'] = 'myScope'; | ||
await auth.configAuthentication('https://registry.npmjs.org'); | ||
|
||
expect(fs.existsSync(rcFile)).toBe(true); | ||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||
}); | ||
|
||
it('Automatically configures GPR scope', async () => { | ||
await auth.configAuthentication('npm.pkg.github.com'); | ||
|
||
expect(fs.existsSync(rcFile)).toBe(true); | ||
expect(fs.readFileSync(rcFile, {encoding: 'utf8'})).toMatchSnapshot(); | ||
}); | ||
}); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
"use strict"; | ||
var __importStar = (this && this.__importStar) || function (mod) { | ||
if (mod && mod.__esModule) return mod; | ||
var result = {}; | ||
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; | ||
result["default"] = mod; | ||
return result; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const fs = __importStar(require("fs")); | ||
const os = __importStar(require("os")); | ||
const path = __importStar(require("path")); | ||
const core = __importStar(require("@actions/core")); | ||
const github = __importStar(require("@actions/github")); | ||
function configAuthentication(registryUrl) { | ||
const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc'); | ||
if (!registryUrl.endsWith('/')) { | ||
registryUrl += '/'; | ||
} | ||
writeRegistryToFile(registryUrl, npmrc); | ||
} | ||
exports.configAuthentication = configAuthentication; | ||
function writeRegistryToFile(registryUrl, fileLocation) { | ||
let scope = core.getInput('scope'); | ||
if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) { | ||
scope = github.context.repo.owner; | ||
} | ||
if (scope && scope[0] != '@') { | ||
scope = '@' + scope; | ||
} | ||
core.debug(`Setting auth in ${fileLocation}`); | ||
let newContents = ''; | ||
if (fs.existsSync(fileLocation)) { | ||
const curContents = fs.readFileSync(fileLocation, 'utf8'); | ||
curContents.split(os.EOL).forEach((line) => { | ||
// Add current contents unless they are setting the registry | ||
if (!line.toLowerCase().startsWith('registry')) { | ||
newContents += line + os.EOL; | ||
} | ||
}); | ||
} | ||
// Remove http: or https: from front of registry. | ||
const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}'; | ||
const registryString = scope | ||
? `${scope}:registry=${registryUrl}` | ||
: `registry=${registryUrl}`; | ||
newContents += `${authString}${os.EOL}${registryString}`; | ||
fs.writeFileSync(fileLocation, newContents); | ||
core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation); | ||
// Export empty node_auth_token so npm doesn't complain about not being able to find it | ||
core.exportVariable('NODE_AUTH_TOKEN', 'XXXXX-XXXXX-XXXXX-XXXXX'); | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.