move required parameters to auth module
username and password are required from within the auth module now. Update the tests to ensure this is the case.
This commit is contained in:
parent
56b5af70cf
commit
56eacf97f5
|
@ -1,15 +1,22 @@
|
||||||
import io = require('@actions/io');
|
import io = require('@actions/io');
|
||||||
import fs = require('fs');
|
import fs = require('fs');
|
||||||
|
import os = require('os');
|
||||||
import path = require('path');
|
import path = require('path');
|
||||||
import child_process = require('child_process');
|
|
||||||
|
|
||||||
const m2Dir = path.join(__dirname, '.m2');
|
// make the os.homedir() call be local to the tests
|
||||||
const settingsFile = path.join(m2Dir, 'settings.xml');
|
jest.doMock('os', () => {
|
||||||
|
return {
|
||||||
|
homedir: jest.fn(() => __dirname)
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
import * as auth from '../src/auth';
|
import * as auth from '../src/auth';
|
||||||
|
|
||||||
|
const m2Dir = path.join(__dirname, auth.M2_DIR);
|
||||||
|
const settingsFile = path.join(m2Dir, auth.SETTINGS_FILE);
|
||||||
|
|
||||||
describe('auth tests', () => {
|
describe('auth tests', () => {
|
||||||
beforeAll(async () => {
|
beforeEach(async () => {
|
||||||
await io.rmRF(m2Dir);
|
await io.rmRF(m2Dir);
|
||||||
}, 300000);
|
}, 300000);
|
||||||
|
|
||||||
|
@ -21,7 +28,7 @@ describe('auth tests', () => {
|
||||||
}
|
}
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Creates settings.xml file with username and password', async () => {
|
it('creates settings.xml with username and password', async () => {
|
||||||
const username = 'bluebottle';
|
const username = 'bluebottle';
|
||||||
const password = 'SingleOrigin';
|
const password = 'SingleOrigin';
|
||||||
|
|
||||||
|
@ -33,4 +40,21 @@ describe('auth tests', () => {
|
||||||
auth.generate(username, password)
|
auth.generate(username, password)
|
||||||
);
|
);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
|
it('does not create settings.xml without username and / or password', async () => {
|
||||||
|
await auth.configAuthentication('FOO', '');
|
||||||
|
|
||||||
|
expect(fs.existsSync(m2Dir)).toBe(false);
|
||||||
|
expect(fs.existsSync(settingsFile)).toBe(false);
|
||||||
|
|
||||||
|
await auth.configAuthentication('', 'BAR');
|
||||||
|
|
||||||
|
expect(fs.existsSync(m2Dir)).toBe(false);
|
||||||
|
expect(fs.existsSync(settingsFile)).toBe(false);
|
||||||
|
|
||||||
|
await auth.configAuthentication('', ''); // BAZ!!!
|
||||||
|
|
||||||
|
expect(fs.existsSync(m2Dir)).toBe(false);
|
||||||
|
expect(fs.existsSync(settingsFile)).toBe(false);
|
||||||
|
}, 100000);
|
||||||
});
|
});
|
||||||
|
|
26
src/auth.ts
26
src/auth.ts
|
@ -4,18 +4,27 @@ import * as path from 'path';
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as io from '@actions/io';
|
import * as io from '@actions/io';
|
||||||
|
|
||||||
|
export const M2_DIR = '.m2';
|
||||||
|
export const SETTINGS_FILE = 'settings.xml';
|
||||||
|
|
||||||
export async function configAuthentication(username: string, password: string) {
|
export async function configAuthentication(username: string, password: string) {
|
||||||
const directory: string = path.join(os.homedir(), '.m2');
|
if (username && password) {
|
||||||
|
core.debug(`configAuthentication with ${username} and a password`);
|
||||||
|
const directory: string = path.join(os.homedir(), M2_DIR);
|
||||||
await io.mkdirP(directory);
|
await io.mkdirP(directory);
|
||||||
|
core.debug(`created directory ${directory}`);
|
||||||
await write(directory, generate(username, password));
|
await write(directory, generate(username, password));
|
||||||
|
} else {
|
||||||
|
core.debug(
|
||||||
|
`no auth without username: ${username} and password: ${password}`
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// only exported for testing purposes
|
// only exported for testing purposes
|
||||||
export function generate(
|
export function generate(username: string, password: string) {
|
||||||
username = '${actions.username}',
|
return `
|
||||||
password = '${actions.password}'
|
<settings>
|
||||||
) {
|
|
||||||
return `<settings>
|
|
||||||
<servers>
|
<servers>
|
||||||
<server>
|
<server>
|
||||||
<username>${username}</username>
|
<username>${username}</username>
|
||||||
|
@ -27,5 +36,8 @@ export function generate(
|
||||||
}
|
}
|
||||||
|
|
||||||
async function write(directory: string, settings: string) {
|
async function write(directory: string, settings: string) {
|
||||||
return fs.writeFileSync(path.join(directory, 'settings.xml'), settings);
|
const options = {encoding: 'utf-8'};
|
||||||
|
const location = path.join(directory, SETTINGS_FILE);
|
||||||
|
core.debug(`writing ${location}`);
|
||||||
|
return fs.writeFileSync(location, settings, options);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,9 +18,7 @@ async function run() {
|
||||||
const username = core.getInput('username', {required: false});
|
const username = core.getInput('username', {required: false});
|
||||||
const password = core.getInput('password', {required: false});
|
const password = core.getInput('password', {required: false});
|
||||||
|
|
||||||
if (username && password) {
|
|
||||||
await auth.configAuthentication(username, password);
|
await auth.configAuthentication(username, password);
|
||||||
}
|
|
||||||
|
|
||||||
const matchersPath = path.join(__dirname, '..', '.github');
|
const matchersPath = path.join(__dirname, '..', '.github');
|
||||||
console.log(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
|
console.log(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
|
||||||
|
|
Loading…
Reference in New Issue