Skip to content

Commit b0635c3

Browse files
Matt Parrishpvdlg
authored andcommitted
feat: Use always-auth from .npmrc
Fixes #6
1 parent 3b8aa20 commit b0635c3

File tree

3 files changed

+42
-9
lines changed

3 files changed

+42
-9
lines changed

lib/get-last-release.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ module.exports = async ({publishConfig, name}, logger) => {
1414

1515
try {
1616
const uri = urlResolve(registry, name.replace('/', '%2F'));
17-
const data = await promisify(client.get.bind(client))(uri, {
18-
auth: NPM_TOKEN ? {token: NPM_TOKEN} : {username: NPM_USERNAME, password: NPM_PASSWORD, email: NPM_EMAIL},
19-
});
17+
const auth = NPM_TOKEN ? {token: NPM_TOKEN} : {username: NPM_USERNAME, password: NPM_PASSWORD, email: NPM_EMAIL};
18+
auth.alwaysAuth = config.get('always-auth');
19+
const data = await promisify(client.get.bind(client))(uri, {auth});
2020
if (data && !data['dist-tags']) {
2121
logger.log('No version found of package %s found on %s', name, registry);
2222
return {};

test/get-last-release.test.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,31 @@ test.serial('Get nothing from not yet published package name (unavailable w/o st
139139
t.true(registryMock.isDone());
140140
});
141141

142+
test.serial('Send bearer authorization using NPM_TOKEN', async t => {
143+
const name = 'available';
144+
const registryMock = available(name, ['authorization', 'Bearer npm_token']);
145+
await appendFile('./.npmrc', `registry = ${registry}\nalways-auth = true`);
146+
const release = await lastRelease({name}, t.context.logger);
147+
148+
t.is(release.version, '1.33.7');
149+
t.is(release.gitHead, 'HEAD');
150+
t.true(registryMock.isDone());
151+
});
152+
153+
test.serial('Uses basic auth when always-auth=true in ".npmrc"', async t => {
154+
const name = 'available';
155+
delete process.env.NPM_TOKEN;
156+
process.env.NPM_USERNAME = 'username';
157+
process.env.NPM_PASSWORD = 'password';
158+
const registryMock = available(name, null, {user: 'username', pass: 'password'});
159+
await appendFile('./.npmrc', `registry = ${registry}\nalways-auth = true`);
160+
const release = await lastRelease({name}, t.context.logger);
161+
162+
t.is(release.version, '1.33.7');
163+
t.is(release.gitHead, 'HEAD');
164+
t.true(registryMock.isDone());
165+
});
166+
142167
test.serial('Throws error on server error', async t => {
143168
const name = 'server-error';
144169
const registryMock = mock(name)

test/helpers/mock-registry.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,22 @@ const unpublishedModule = {
1212

1313
export const registry = REGISTRY_URL;
1414

15-
export function mock(packageName) {
16-
return nock(REGISTRY_URL).get(`/${packageName.replace('/', '%2F')}`);
15+
export function mock(packageName, matchHeader, basicAuth) {
16+
let req = nock(REGISTRY_URL);
17+
if (matchHeader) {
18+
req = req.matchHeader.apply(req, matchHeader);
19+
}
20+
req = req.get(`/${packageName.replace('/', '%2F')}`);
21+
if (basicAuth) {
22+
req = req.basicAuth(basicAuth);
23+
}
24+
return req;
1725
}
1826

19-
export function available(packageName) {
20-
return mock(packageName).reply(200, availableModule);
27+
export function available(packageName, matchHeader, basicAuth) {
28+
return mock(packageName, matchHeader, basicAuth).reply(200, availableModule);
2129
}
2230

23-
export function unpublished(packageName) {
24-
return mock(packageName).reply(200, unpublishedModule);
31+
export function unpublished(packageName, matchHeader, basicAuth) {
32+
return mock(packageName, matchHeader, basicAuth).reply(200, unpublishedModule);
2533
}

0 commit comments

Comments
 (0)