From becb8c07be47dcaa5eb488aa1e987b1aedc6bf65 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 12:51:00 +0200 Subject: [PATCH 1/7] Delete user's `gradle.properties` This may prevent exposing the file, which contains the OSSRH credentials. --- src/targets/maven.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/targets/maven.ts b/src/targets/maven.ts index 4d8213084..e7f76fc1e 100644 --- a/src/targets/maven.ts +++ b/src/targets/maven.ts @@ -186,6 +186,7 @@ export class MavenTarget extends BaseTarget { await retrySpawnProcess(this.mavenConfig.gradleCliPath, [ 'closeAndReleaseRepository', ]); + await this.deleteUserGradlePropsFile(); } /** @@ -205,6 +206,15 @@ export class MavenTarget extends BaseTarget { ); } + /** + * Deletes the user's `gradle.properties` file. + */ + public deleteUserGradlePropsFile(): Promise { + return fsPromises.unlink( + join(this.getGradleHomeDir(), GRADLE_PROPERTIES_FILENAME) + ); + } + /** * Retrieves the Gradle Home path. * From b99e4cb37e78db0d463815a8622fc9cd86749011 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 12:53:51 +0200 Subject: [PATCH 2/7] Minor changes from previous feedback --- src/targets/__tests__/maven.test.ts | 3 --- src/targets/maven.ts | 8 +++----- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/targets/__tests__/maven.test.ts b/src/targets/__tests__/maven.test.ts index 706aeae4e..ecaa3ef59 100644 --- a/src/targets/__tests__/maven.test.ts +++ b/src/targets/__tests__/maven.test.ts @@ -18,9 +18,6 @@ jest.mock('fs', () => ({ writeFile: jest.fn(() => Promise.resolve()), readFile: jest.fn((file: string) => file), readdir: async () => Promise.resolve([]), // empty dir - access: jest.fn().mockImplementation(() => { - // do nothing - }), }, })); diff --git a/src/targets/maven.ts b/src/targets/maven.ts index e7f76fc1e..6a9c58b83 100644 --- a/src/targets/maven.ts +++ b/src/targets/maven.ts @@ -6,7 +6,7 @@ import { import { BaseTarget } from './base'; import { homedir } from 'os'; import { basename, extname, join, parse } from 'path'; -import { constants as fsConstants, promises as fsPromises } from 'fs'; +import { promises as fsPromises } from 'fs'; import { checkExecutableIsPresent, extractZipArchive } from '../utils/system'; import { retrySpawnProcess } from '../utils/async'; import { withTempDir } from '../utils/files'; @@ -23,7 +23,7 @@ const GRADLE_PROPERTIES_FILENAME = 'gradle.properties'; const DEFAULT_GRADLE_USER_HOME = join(homedir(), '.gradle'); export const POM_DEFAULT_FILENAME = 'pom-default.xml'; const POM_FILE_EXT = '.xml'; // Must include the leading `.` -const BOM_FILE_KEY_REGEXP = stringToRegexp('/pom/'); +const BOM_FILE_KEY_REGEXP = new RegExp('pom'); export const targetSecrets = ['OSSRH_USERNAME', 'OSSRH_PASSWORD'] as const; type SecretsType = typeof targetSecrets[number]; @@ -302,8 +302,7 @@ export class MavenTarget extends BaseTarget { // the BOM renamed in such a way that isn't handled by the target. const filesInDir = await fsPromises.readdir(distDir); const potentialPoms = filesInDir - .filter(f => extname(f) === POM_FILE_EXT) - .filter(f => f !== POM_DEFAULT_FILENAME) + .filter(f => f !== POM_DEFAULT_FILENAME && extname(f) === POM_FILE_EXT) .map(f => join(distDir, f)); for (const f of potentialPoms) { @@ -326,7 +325,6 @@ export class MavenTarget extends BaseTarget { */ public async isBomFile(pomFilepath: string): Promise { try { - await fsPromises.access(pomFilepath, fsConstants.R_OK); const fileContents = await fsPromises.readFile(pomFilepath, { encoding: 'utf8', }); From 7e9d2010c6a391b6230bf3c42ddca216aee6d9ed Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:07:54 +0200 Subject: [PATCH 3/7] Search the BOM file declaratively --- src/targets/maven.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/targets/maven.ts b/src/targets/maven.ts index 6a9c58b83..1fb9d4661 100644 --- a/src/targets/maven.ts +++ b/src/targets/maven.ts @@ -305,13 +305,7 @@ export class MavenTarget extends BaseTarget { .filter(f => f !== POM_DEFAULT_FILENAME && extname(f) === POM_FILE_EXT) .map(f => join(distDir, f)); - for (const f of potentialPoms) { - if (await this.isBomFile(f)) { - return f; - } - } - - return undefined; + return potentialPoms.find(async f => await this.isBomFile(f)); } /** From f1e642398664fbd45cd36cf7ac503b7542f7da98 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:14:07 +0200 Subject: [PATCH 4/7] Update maven test to support gradle props file deletion --- src/targets/__tests__/maven.test.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/targets/__tests__/maven.test.ts b/src/targets/__tests__/maven.test.ts index ecaa3ef59..516c2a30c 100644 --- a/src/targets/__tests__/maven.test.ts +++ b/src/targets/__tests__/maven.test.ts @@ -18,6 +18,7 @@ jest.mock('fs', () => ({ writeFile: jest.fn(() => Promise.resolve()), readFile: jest.fn((file: string) => file), readdir: async () => Promise.resolve([]), // empty dir + unlink: jest.fn(), }, })); @@ -104,10 +105,14 @@ describe('publish', () => { test('main flow', async () => { const callOrder: string[] = []; const mvnTarget = createMavenTarget(); - const gradlePropsMock = jest.fn( - async () => void callOrder.push('gradleProps') + const createGradlePropsMock = jest.fn( + async () => void callOrder.push('createGradleProps') ); - mvnTarget.createUserGradlePropsFile = gradlePropsMock; + mvnTarget.createUserGradlePropsFile = createGradlePropsMock; + const deleteGradlePropsMock = jest.fn( + async () => void callOrder.push('deleteGradleProps') + ); + mvnTarget.deleteUserGradlePropsFile = deleteGradlePropsMock; const uploadMock = jest.fn(async () => void callOrder.push('upload')); mvnTarget.upload = uploadMock; (retrySpawnProcess as jest.MockedFunction< @@ -118,7 +123,7 @@ describe('publish', () => { const revision = 'r3v1s10n'; await mvnTarget.publish('1.0.0', revision); - expect(gradlePropsMock).toHaveBeenCalledTimes(1); + expect(createGradlePropsMock).toHaveBeenCalledTimes(1); expect(uploadMock).toHaveBeenCalledTimes(1); expect(uploadMock).toHaveBeenLastCalledWith(revision); expect(retrySpawnProcess).toHaveBeenCalledTimes(1); @@ -126,9 +131,10 @@ describe('publish', () => { 'closeAndReleaseRepository', ]); expect(callOrder).toStrictEqual([ - 'gradleProps', + 'createGradleProps', 'upload', 'closeAndRelease', + 'deleteGradleProps', ]); }); From 296336b9caaf36b154df3f68f9e4be16b4fde6e0 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 13:17:23 +0200 Subject: [PATCH 5/7] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b1617b22..5b2d80e3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - feat(maven): Add maven target to deploy to Maven Central (#258) - feat(symbol-collector): Add symbol-collector target (#266) - ref(maven): Support BOM files in `maven` target (#270) +- feat(maven): Remove Gradle properties after publishing (#276) ## 0.24.4 From 3d2d8593ca90567cc33662bfff70f9be51f0fe98 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 15:04:21 +0200 Subject: [PATCH 6/7] Feedback --- src/targets/maven.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/targets/maven.ts b/src/targets/maven.ts index 1fb9d4661..20a17eeea 100644 --- a/src/targets/maven.ts +++ b/src/targets/maven.ts @@ -305,7 +305,7 @@ export class MavenTarget extends BaseTarget { .filter(f => f !== POM_DEFAULT_FILENAME && extname(f) === POM_FILE_EXT) .map(f => join(distDir, f)); - return potentialPoms.find(async f => await this.isBomFile(f)); + return potentialPoms.find(f => this.isBomFile(f)); } /** From 4366a66128dd9d512af07d9ae2a68ec39f847746 Mon Sep 17 00:00:00 2001 From: iker barriocanal <32816711+iker-barriocanal@users.noreply.github.com> Date: Tue, 17 Aug 2021 16:31:18 +0200 Subject: [PATCH 7/7] Cover deleting gradle props file in test --- src/targets/__tests__/maven.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/targets/__tests__/maven.test.ts b/src/targets/__tests__/maven.test.ts index 516c2a30c..607557f4d 100644 --- a/src/targets/__tests__/maven.test.ts +++ b/src/targets/__tests__/maven.test.ts @@ -126,6 +126,7 @@ describe('publish', () => { expect(createGradlePropsMock).toHaveBeenCalledTimes(1); expect(uploadMock).toHaveBeenCalledTimes(1); expect(uploadMock).toHaveBeenLastCalledWith(revision); + expect(deleteGradlePropsMock).toHaveBeenCalledTimes(1); expect(retrySpawnProcess).toHaveBeenCalledTimes(1); expect(retrySpawnProcess).toHaveBeenCalledWith(DEFAULT_OPTION_VALUE, [ 'closeAndReleaseRepository',