diff --git a/README.md b/README.md index f6d6a44..977a4bb 100644 --- a/README.md +++ b/README.md @@ -69,9 +69,8 @@ jobs: uses: actions/setup-java@v1 with: java-version: 1.8 - 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 + env: + GITHUB_TOKEN: ${{ github.token }} - name: Build with Maven run: mvn -B package --file pom.xml @@ -83,9 +82,12 @@ jobs: uses: actions/setup-java@v1 with: # running setup-java again overwrites the settings.xml java-version: 1.8 - server-id: maven - server-username: maven_username - server-password: ${{ secrets.MAVEN_CENTRAL_TOKEN }} # password from secrets store + server-id: maven # Value of the distributionManagement/repository/id field of the pom.xml + server-username: MAVEN_USERNAME # env variable for username below + server-password: MAVEN_CENTRAL_TOKEN # env variable for token below + env: + MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} + MAVEN_USERNAME: maven_username123 - name: Publish to Apache Maven Central run: mvn deploy @@ -139,9 +141,9 @@ jobs: with: java-version: 1.8 server-id: github # Value of the distributionManagement/repository/id field of the pom.xml - server-username: ${{ github.actor }} # username for server authentication - server-password: ${{ github.token }} # password or token for authentication settings-path: ${{ github.workspace }} # location for the settings.xml file + env: + GITHUB_TOKEN: ${{ github.token }} - name: Build with Maven run: mvn -B package --file pom.xml diff --git a/__tests__/auth.test.ts b/__tests__/auth.test.ts index 1d5cee9..5a31e27 100644 --- a/__tests__/auth.test.ts +++ b/__tests__/auth.test.ts @@ -30,8 +30,8 @@ describe('auth tests', () => { it('creates settings.xml in alternate locations', async () => { const id = 'packages'; - const username = 'bluebottle'; - const password = 'SingleOrigin'; + const username = 'UNAMI'; + const password = 'TOLKIEN'; const altHome = path.join(__dirname, 'runner', 'settings'); const altSettingsFile = path.join(altHome, auth.SETTINGS_FILE); @@ -55,8 +55,8 @@ describe('auth tests', () => { it('creates settings.xml with username and password', async () => { const id = 'packages'; - const username = 'bluebottle'; - const password = 'SingleOrigin'; + const username = 'UNAME'; + const password = 'TOKEN'; await auth.configAuthentication(id, username, password); @@ -69,8 +69,8 @@ describe('auth tests', () => { it('overwrites existing settings.xml files', async () => { const id = 'packages'; - const username = 'bluebottle'; - const password = 'SingleOrigin'; + const username = 'USERNAME'; + const password = 'PASSWORD'; fs.mkdirSync(m2Dir, {recursive: true}); fs.writeFileSync(settingsFile, 'FAKE FILE'); @@ -87,30 +87,42 @@ describe('auth tests', () => { }, 100000); it('does not create settings.xml without required parameters', async () => { - await auth.configAuthentication('FOO', '', ''); + await auth.configAuthentication('FOO'); - expect(fs.existsSync(m2Dir)).toBe(false); - expect(fs.existsSync(settingsFile)).toBe(false); + expect(fs.existsSync(m2Dir)).toBe(true); + expect(fs.existsSync(settingsFile)).toBe(true); + expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual( + auth.generate('FOO') + ); - await auth.configAuthentication('', 'BAR', ''); + await auth.configAuthentication(undefined, 'BAR', undefined); - expect(fs.existsSync(m2Dir)).toBe(false); - expect(fs.existsSync(settingsFile)).toBe(false); + expect(fs.existsSync(m2Dir)).toBe(true); + expect(fs.existsSync(settingsFile)).toBe(true); + expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual( + auth.generate(undefined, 'BAR', undefined) + ); - await auth.configAuthentication('', '', 'BAZ'); + await auth.configAuthentication(undefined, undefined, 'BAZ'); - expect(fs.existsSync(m2Dir)).toBe(false); - expect(fs.existsSync(settingsFile)).toBe(false); + expect(fs.existsSync(m2Dir)).toBe(true); + expect(fs.existsSync(settingsFile)).toBe(true); + expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual( + auth.generate(undefined, undefined, 'BAZ') + ); - await auth.configAuthentication('', '', ''); + await auth.configAuthentication(); - expect(fs.existsSync(m2Dir)).toBe(false); - expect(fs.existsSync(settingsFile)).toBe(false); + expect(fs.existsSync(m2Dir)).toBe(true); + expect(fs.existsSync(settingsFile)).toBe(true); + expect(fs.readFileSync(settingsFile, 'utf-8')).toEqual( + auth.generate(undefined, undefined, undefined) + ); }, 100000); it('escapes invalid XML inputs', () => { const id = 'packages'; - const username = 'bluebottle'; + const username = 'USER'; const password = '&<>"\'\'"><&'; expect(auth.generate(id, username, password)).toEqual(` @@ -118,8 +130,8 @@ describe('auth tests', () => { ${id} - ${username} - &<>"''"><& + \${env.${username}} + \${env.&<>"''"><&} diff --git a/action.yml b/action.yml index df1a2c1..d310ebd 100644 --- a/action.yml +++ b/action.yml @@ -24,11 +24,12 @@ inputs: file.' required: false server-username: - description: 'Username for authentication to the Apache Maven repository.' + description: 'Environment variable name for the username for authentication + to the Apache Maven repository.' required: false server-password: - description: 'Password or token for authentication to the Apache Maven - repository.' + description: 'Environment variable name for password or token for + authentication to the Apache Maven repository.' required: false settings-path: description: 'Path to where the settings.xml file will be written. Default is ~/.m2.' diff --git a/dist/index.js b/dist/index.js index e9e7cc3..be71c59 100644 Binary files a/dist/index.js and b/dist/index.js differ diff --git a/src/auth.ts b/src/auth.ts index 0e95ed0..2e7c6e8 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -7,29 +7,28 @@ import * as io from '@actions/io'; export const M2_DIR = '.m2'; export const SETTINGS_FILE = 'settings.xml'; +export const DEFAULT_ID = 'github'; +export const DEFAULT_USERNAME = 'GITHUB_ACTOR'; +export const DEFAULT_PASSWORD = 'GITHUB_TOKEN'; + export async function configAuthentication( - id: string, - username: string, - password: string + id = DEFAULT_ID, + username = DEFAULT_USERNAME, + password = DEFAULT_PASSWORD ) { - if (id && username && password) { - console.log( - `creating ${SETTINGS_FILE} with server-id: ${id}, username: ${username}, and a password` - ); - // 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('settings-path') || os.homedir(), - core.getInput('settings-path') ? '' : M2_DIR - ); - await io.mkdirP(directory); - core.debug(`created directory ${directory}`); - await write(directory, generate(id, username, password)); - } else { - core.debug( - `no ${SETTINGS_FILE} without server-id: ${id}, username: ${username}, and a password` - ); - } + console.log( + `creating ${SETTINGS_FILE} with server-id: ${id};`, + `environment variables: username=\$${username} and password=\$${password}` + ); + // 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('settings-path') || os.homedir(), + core.getInput('settings-path') ? '' : M2_DIR + ); + await io.mkdirP(directory); + core.debug(`created directory ${directory}`); + await write(directory, generate(id, username, password)); } function escapeXML(value: string) { @@ -42,14 +41,18 @@ function escapeXML(value: string) { } // only exported for testing purposes -export function generate(id: string, username: string, password: string) { +export function generate( + id = DEFAULT_ID, + username = DEFAULT_USERNAME, + password = DEFAULT_PASSWORD +) { return ` ${escapeXML(id)} - ${escapeXML(username)} - ${escapeXML(password)} + \${env.${escapeXML(username)}} + \${env.${escapeXML(password)}} diff --git a/src/setup-java.ts b/src/setup-java.ts index 9300eef..a50ff55 100644 --- a/src/setup-java.ts +++ b/src/setup-java.ts @@ -22,11 +22,7 @@ async function run() { const username = core.getInput('server-username', {required: false}); const password = core.getInput('server-password', {required: false}); - if (id && username && password) { - await auth.configAuthentication(id, username, password); - } else if (id || username || password) { - console.warn('All 3 server-(id, username, and password) are required.'); - } + await auth.configAuthentication(id, username, password); } catch (error) { core.setFailed(error.message); }