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
diff --git a/src/targets/__tests__/maven.test.ts b/src/targets/__tests__/maven.test.ts
index 706aeae4e..607557f4d 100644
--- a/src/targets/__tests__/maven.test.ts
+++ b/src/targets/__tests__/maven.test.ts
@@ -18,9 +18,7 @@ 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
- }),
+ unlink: jest.fn(),
},
}));
@@ -107,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<
@@ -121,17 +123,19 @@ 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(deleteGradlePropsMock).toHaveBeenCalledTimes(1);
expect(retrySpawnProcess).toHaveBeenCalledTimes(1);
expect(retrySpawnProcess).toHaveBeenCalledWith(DEFAULT_OPTION_VALUE, [
'closeAndReleaseRepository',
]);
expect(callOrder).toStrictEqual([
- 'gradleProps',
+ 'createGradleProps',
'upload',
'closeAndRelease',
+ 'deleteGradleProps',
]);
});
diff --git a/src/targets/maven.ts b/src/targets/maven.ts
index 4d8213084..20a17eeea 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];
@@ -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.
*
@@ -292,17 +302,10 @@ 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) {
- if (await this.isBomFile(f)) {
- return f;
- }
- }
-
- return undefined;
+ return potentialPoms.find(f => this.isBomFile(f));
}
/**
@@ -316,7 +319,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',
});