From ae11e1a1b65b1ac2350dbf764d37e0970ef02725 Mon Sep 17 00:00:00 2001 From: Bryan Clark Date: Tue, 10 Dec 2019 10:03:33 -0800 Subject: [PATCH] Allow for alternate settings.xml file location Use the m2-home to specify a new location for the settings.xml file --- README.md | 4 ++-- __tests__/auth.test.ts | 25 +++++++++++++++++++++++++ dist/index.js | 4 +++- src/auth.ts | 7 ++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1e376b5..a98d883 100644 --- a/README.md +++ b/README.md @@ -137,11 +137,11 @@ jobs: server-id: github # Value of the distributionManagement/repository/id field of the pom.xml username: ${{ github.actor }} # username for server authentication password: ${{ github.token }} # password or token for authentication - m2-home: ${{ $GITHUB_WORKSPACE }} # location of the .m2 directory + m2-home: ${{ $GITHUB_WORKSPACE }} # location for the settings.xml file - name: Build with Maven run: mvn -B package --file pom.xml - name: Publish to GitHub Packages Apache Maven - run: mvn deploy + run: mvn deploy -s ${{ $GITHUB_WORKSPACE }}/settings.xml ``` # License diff --git a/__tests__/auth.test.ts b/__tests__/auth.test.ts index 7134e5c..ce13ef7 100644 --- a/__tests__/auth.test.ts +++ b/__tests__/auth.test.ts @@ -28,6 +28,31 @@ describe('auth tests', () => { } }, 100000); + it('creates settings.xml in alternate locations', async () => { + const id = 'packages'; + const username = 'bluebottle'; + const password = 'SingleOrigin'; + + const altHome = path.join(__dirname, 'runner', 'settings'); + const altSettingsFile = path.join(altHome, auth.SETTINGS_FILE); + process.env[`INPUT_M2-HOME`] = altHome; + await io.rmRF(altHome); // ensure it doesn't already exist + + await auth.configAuthentication(id, username, password); + + expect(fs.existsSync(m2Dir)).toBe(false); + expect(fs.existsSync(settingsFile)).toBe(false); + + expect(fs.existsSync(altHome)).toBe(true); + expect(fs.existsSync(altSettingsFile)).toBe(true); + expect(fs.readFileSync(altSettingsFile, 'utf-8')).toEqual( + auth.generate(id, username, password) + ); + + delete process.env[`INPUT_M2-HOME`]; + await io.rmRF(altHome); + }, 100000); + it('creates settings.xml with username and password', async () => { const id = 'packages'; const username = 'bluebottle'; diff --git a/dist/index.js b/dist/index.js index c7b1f98..f4ff8d1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -4134,7 +4134,9 @@ function configAuthentication(id, username, password) { return __awaiter(this, void 0, void 0, function* () { if (id && username && password) { console.log(`creating ${exports.SETTINGS_FILE} with server-id: ${id}, username: ${username}, and a password`); - const directory = path.join(os.homedir(), exports.M2_DIR); + // when an alternate m2 location is specified use only that location (no .m2 directory) + // otherwise use the home/.m2/ path + const directory = path.join(core.getInput('m2-home') || os.homedir(), core.getInput('m2-home') ? '' : exports.M2_DIR); yield io.mkdirP(directory); core.debug(`created directory ${directory}`); yield write(directory, generate(id, username, password)); diff --git a/src/auth.ts b/src/auth.ts index ca43c20..9cfa69a 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -16,7 +16,12 @@ export async function configAuthentication( console.log( `creating ${SETTINGS_FILE} with server-id: ${id}, username: ${username}, and a password` ); - const directory: string = path.join(os.homedir(), M2_DIR); + // when an alternate m2 location is specified use only that location (no .m2 directory) + // otherwise use the home/.m2/ path + const directory: string = path.join( + core.getInput('m2-home') || os.homedir(), + core.getInput('m2-home') ? '' : M2_DIR + ); await io.mkdirP(directory); core.debug(`created directory ${directory}`); await write(directory, generate(id, username, password));