Skip to content

Commit d926c84

Browse files
authored
fix(maven-workspace): SNAPSHOT versions should not be included in the manifest (#1727)
* test: failing test for updating non-release versions in manifest * fix: SNAPSHOT versions should not be included in the manifest
1 parent 8920c7f commit d926c84

3 files changed

Lines changed: 124 additions & 3 deletions

File tree

src/plugins/maven-workspace.ts

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,10 @@ export class MavenWorkspace extends WorkspacePlugin<MavenArtifact> {
248248
this.logger.warn(`${pomUpdate.path} does not have cached contents`);
249249
}
250250
}
251-
if (candidate.pullRequest.version) {
251+
if (
252+
candidate.pullRequest.version &&
253+
this.isReleaseVersion(candidate.pullRequest.version)
254+
) {
252255
updatedPathVersions.set(candidate.path, candidate.pullRequest.version);
253256
}
254257
}
@@ -269,7 +272,9 @@ export class MavenWorkspace extends WorkspacePlugin<MavenArtifact> {
269272
} else {
270273
this.logger.debug(`version: ${version} forced bump`);
271274
updatedVersions.set(packageName, version);
272-
updatedPathVersions.set(this.pathFromPackage(pkg), version);
275+
if (this.isReleaseVersion(version)) {
276+
updatedPathVersions.set(this.pathFromPackage(pkg), version);
277+
}
273278
}
274279
}
275280
}
@@ -310,6 +315,16 @@ export class MavenWorkspace extends WorkspacePlugin<MavenArtifact> {
310315
return graph;
311316
}
312317

318+
/**
319+
* Given a release version, determine if we should bump the manifest
320+
* version as well. For maven artifacts, SNAPSHOT versions are not
321+
* considered releases.
322+
* @param {Version} version The release version
323+
*/
324+
protected isReleaseVersion(version: Version): boolean {
325+
return !version.preRelease?.includes('SNAPSHOT');
326+
}
327+
313328
protected bumpVersion(artifact: MavenArtifact): Version {
314329
const strategy = new JavaSnapshot(new AlwaysBumpPatch());
315330
return strategy.bump(Version.parse(artifact.version), [FAKE_COMMIT]);

src/plugins/workspace.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,9 @@ export abstract class WorkspacePlugin<T> extends ManifestPlugin {
266266
const version = this.bumpVersion(pkg);
267267
this.logger.debug(`version: ${version} forced bump`);
268268
updatedVersions.set(packageName, version);
269-
updatedPathVersions.set(this.pathFromPackage(pkg), version);
269+
if (this.isReleaseVersion(version)) {
270+
updatedPathVersions.set(this.pathFromPackage(pkg), version);
271+
}
270272
}
271273
}
272274
return {
@@ -275,6 +277,15 @@ export abstract class WorkspacePlugin<T> extends ManifestPlugin {
275277
};
276278
}
277279

280+
/**
281+
* Given a release version, determine if we should bump the manifest
282+
* version as well.
283+
* @param {Version} _version The release version
284+
*/
285+
protected isReleaseVersion(_version: Version): boolean {
286+
return true;
287+
}
288+
278289
/**
279290
* Given a package, return the new bumped version after updating
280291
* the dependency.

test/plugins/maven-workspace.ts

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import {Update} from '../../src/update';
3131
import {Version} from '../../src/version';
3232
import {PomXml} from '../../src/updaters/java/pom-xml';
3333
import {RawContent} from '../../src/updaters/raw-content';
34+
import {ReleasePleaseManifest} from '../../src/updaters/release-please-manifest';
3435

3536
const sandbox = sinon.createSandbox();
3637
const fixturesPath = './test/fixtures/plugins/maven-workspace';
@@ -403,6 +404,100 @@ describe('MavenWorkspace plugin', () => {
403404
);
404405
safeSnapshot(await renderUpdate(github, bomUpdate));
405406
});
407+
it('skips updating manifest with snapshot versions', async () => {
408+
plugin = new MavenWorkspace(github, 'main', {
409+
bom: {
410+
releaseType: 'maven',
411+
},
412+
maven1: {
413+
releaseType: 'maven',
414+
},
415+
maven2: {
416+
releaseType: 'maven',
417+
},
418+
maven3: {
419+
releaseType: 'maven',
420+
},
421+
maven4: {
422+
releaseType: 'maven',
423+
},
424+
});
425+
sandbox
426+
.stub(github, 'findFilesByFilenameAndRef')
427+
.withArgs('pom.xml', 'main')
428+
.resolves([
429+
'maven1/pom.xml',
430+
'maven2/pom.xml',
431+
'maven3/pom.xml',
432+
'maven4/pom.xml',
433+
]);
434+
const candidates: CandidateReleasePullRequest[] = [
435+
buildMockCandidatePullRequest('maven1', 'maven', '1.1.2-SNAPSHOT', {
436+
component: 'maven1',
437+
updates: [
438+
buildMockPackageUpdate(
439+
'maven1/pom.xml',
440+
'maven1/pom.xml',
441+
'1.1.2-SNAPSHOT'
442+
),
443+
],
444+
}),
445+
buildMockCandidatePullRequest('maven2', 'maven', '2.2.3-SNAPSHOT', {
446+
component: 'maven2',
447+
updates: [
448+
buildMockPackageUpdate(
449+
'maven2/pom.xml',
450+
'maven2/pom.xml',
451+
'2.2.3-SNAPSHOT'
452+
),
453+
],
454+
}),
455+
buildMockCandidatePullRequest('maven3', 'maven', '3.3.4-SNAPSHOT', {
456+
component: 'maven3',
457+
updates: [
458+
buildMockPackageUpdate(
459+
'maven3/pom.xml',
460+
'maven3/pom.xml',
461+
'3.3.4-SNAPSHOT'
462+
),
463+
],
464+
}),
465+
buildMockCandidatePullRequest('maven4', 'maven', '4.4.5-SNAPSHOT', {
466+
component: 'maven4',
467+
updates: [
468+
buildMockPackageUpdate(
469+
'maven4/pom.xml',
470+
'maven4/pom.xml',
471+
'4.4.5-SNAPSHOT'
472+
),
473+
],
474+
}),
475+
];
476+
stubFilesFromFixtures({
477+
sandbox,
478+
github,
479+
fixturePath: fixturesPath,
480+
files: [
481+
'maven1/pom.xml',
482+
'maven2/pom.xml',
483+
'maven3/pom.xml',
484+
'maven4/pom.xml',
485+
],
486+
flatten: false,
487+
targetBranch: 'main',
488+
});
489+
const newCandidates = await plugin.run(candidates);
490+
expect(newCandidates).length(1);
491+
const update = assertHasUpdate(
492+
newCandidates[0].pullRequest.updates,
493+
'.release-please-manifest.json',
494+
ReleasePleaseManifest
495+
);
496+
const updater = update.updater as ReleasePleaseManifest;
497+
for (const [_, version] of updater.versionsMap!) {
498+
expect(version.toString()).to.not.include('SNAPSHOT');
499+
}
500+
});
406501
});
407502
});
408503

0 commit comments

Comments
 (0)