Skip to content

Commit

Permalink
fix: adjust patch rule for Java LTS strategy (#857)
Browse files Browse the repository at this point in the history
  • Loading branch information
chingor13 committed Apr 19, 2021
1 parent 81422dc commit 7f78dc5
Show file tree
Hide file tree
Showing 10 changed files with 141 additions and 100 deletions.
144 changes: 72 additions & 72 deletions __snapshots__/java-lts.js

Large diffs are not rendered by default.

7 changes: 5 additions & 2 deletions docs/java-releases.md
Expand Up @@ -39,5 +39,8 @@ version with an associated major version bump.

This is a special case versioning strategy where we adopt a custom versioning scheme
and is meant to be used against an LTS branch. Consider an LTS branch cut from the
mainline at version `1.2.3`. The next version proposed will be `1.2.4-lts.1`, followed
by `1.2.4-lts.2`.
mainline at version `1.2.3`. The next version proposed will be `1.2.3-sp.1`, followed
by `1.2.3-lts.2`.

For LTS releases, we use a special "lts-snapshot" bump which will make the version
following `1.2.3-sp.1` be `1.2.3-sp.2-SNAPSHOT`.
9 changes: 7 additions & 2 deletions src/releasers/java-lts.ts
Expand Up @@ -29,7 +29,12 @@ export class JavaLTS extends JavaYoshi {
_latestTag: GitHubTag | undefined,
currentVersions: VersionsMap
): Promise<VersionsMap> {
const bumpType = this.snapshot ? 'snapshot' : 'lts';
// Example versioning:
// 1.2.3
// 1.2.3-sp.1-SNAPSHOT
// 1.2.3-sp.1
// 1.2.3-sp.2-SNAPSHOT
const bumpType = this.snapshot ? 'lts-snapshot' : 'lts';
const newVersions: VersionsMap = new Map<string, string>();
for (const [k, version] of currentVersions) {
newVersions.set(k, Version.parse(version).bump(bumpType).toString());
Expand All @@ -42,7 +47,7 @@ export class JavaLTS extends JavaYoshi {
latestTag: GitHubTag | undefined,
_preRelease = false
): Promise<ReleaseCandidate> {
const bumpType = this.snapshot ? 'snapshot' : 'lts';
const bumpType = this.snapshot ? 'lts-snapshot' : 'lts';

const version = Version.parse(
latestTag?.version ?? this.defaultInitialVersion()
Expand Down
8 changes: 7 additions & 1 deletion src/releasers/java/bump_type.ts
Expand Up @@ -14,7 +14,13 @@

import * as semver from 'semver';

export type BumpType = 'major' | 'minor' | 'patch' | 'snapshot' | 'lts';
export type BumpType =
| 'major'
| 'minor'
| 'patch'
| 'snapshot'
| 'lts'
| 'lts-snapshot';

export function maxBumpType(bumpTypes: BumpType[]): BumpType {
if (bumpTypes.some(bumpType => bumpType === 'major')) {
Expand Down
13 changes: 10 additions & 3 deletions src/releasers/java/version.ts
Expand Up @@ -94,15 +94,22 @@ export class Version {
break;
case 'lts':
if (this.lts) {
this.lts += 1;
} else {
if (!this.snapshot) {
this.patch += 1;
this.lts += 1;
}
} else {
this.lts = 1;
}
this.snapshot = false;
break;
case 'lts-snapshot':
if (this.lts) {
this.lts += 1;
} else {
this.lts = 1;
}
this.snapshot = true;
break;
default:
throw Error(`unsupported bump type: ${bumpType}`);
}
Expand Down
10 changes: 2 additions & 8 deletions src/updaters/java/versions-manifest.ts
Expand Up @@ -33,20 +33,14 @@ export class VersionsManifest extends JavaUpdate {
if (version.includes('SNAPSHOT')) {
newLines.push(
line.replace(
new RegExp(
`${packageName}:(.*):[0-9]+\\.[0-9]+\\.[0-9]+(-\\w+)?(-SNAPSHOT)?`,
'g'
),
new RegExp(`${packageName}:(.*):(.*)`, 'g'),
`${packageName}:$1:${version}`
)
);
} else {
newLines.push(
line.replace(
new RegExp(
`${packageName}:[0-9]+\\.[0-9]+\\.[0-9]+(-\\w+)?(-SNAPSHOT)?:[0-9]+\\.[0-9]+\\.[0-9]+(-\\w+)?(-SNAPSHOT)?`,
'g'
),
new RegExp(`${packageName}:(.*):(.*)`, 'g'),
`${packageName}:${version}:${version}`
)
);
Expand Down
8 changes: 8 additions & 0 deletions test/releasers/fixtures/java-yoshi/released-lts-versions.txt
@@ -0,0 +1,8 @@
# Format:
# module:released-version:current-version

google-cloud-trace:0.108.0-beta-sp.1:0.108.0-beta-sp.1
grpc-google-cloud-trace-v1:0.73.0-sp.1:0.73.0-sp.1
grpc-google-cloud-trace-v2:0.73.0-sp.1:0.73.0-sp.1
proto-google-cloud-trace-v1:0.73.0-sp.1:0.73.0-sp.1
proto-google-cloud-trace-v2:0.73.0-sp.1:0.73.0-sp.1
8 changes: 8 additions & 0 deletions test/releasers/fixtures/java-yoshi/versions-lts-snapshot.txt
@@ -0,0 +1,8 @@
# Format:
# module:released-version:current-version

google-cloud-trace:0.108.0-beta:0.108.0-beta-sp.1-SNAPSHOT
grpc-google-cloud-trace-v1:0.73.0:0.73.0-sp.1-SNAPSHOT
grpc-google-cloud-trace-v2:0.73.0:0.73.0-sp.1-SNAPSHOT
proto-google-cloud-trace-v1:0.73.0:0.73.0-sp.1-SNAPSHOT
proto-google-cloud-trace-v2:0.73.0:0.73.0-sp.1-SNAPSHOT
12 changes: 6 additions & 6 deletions test/releasers/java-lts.ts
Expand Up @@ -86,7 +86,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', 'master')
.resolves(buildFileContent('versions.txt'));
.resolves(buildFileContent('versions-lts-snapshot.txt'));
getFileContentsStub
.withArgs('README.md', 'master')
.resolves(buildFileContent('README.md'));
Expand Down Expand Up @@ -168,7 +168,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', 'master')
.resolves(buildFileContent('released-versions.txt'));
.resolves(buildFileContent('released-lts-versions.txt'));
getFileContentsStub
.withArgs('README.md', 'master')
.resolves(buildFileContent('README.md'));
Expand Down Expand Up @@ -294,7 +294,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', 'master')
.resolves(buildFileContent('versions.txt'));
.resolves(buildFileContent('versions-lts-snapshot.txt'));
getFileContentsStub.rejects(
Object.assign(Error('not found'), {status: 404})
);
Expand Down Expand Up @@ -354,7 +354,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', 'master')
.resolves(buildFileContent('released-versions.txt'));
.resolves(buildFileContent('released-lts-versions.txt'));
getFileContentsStub
.withArgs('README.md', 'master')
.resolves(buildFileContent('README.md'));
Expand Down Expand Up @@ -439,7 +439,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', defaultBranch)
.resolves(buildFileContent('versions.txt'));
.resolves(buildFileContent('versions-lts-snapshot.txt'));
getFileContentsStub
.withArgs('README.md', defaultBranch)
.resolves(buildFileContent('README.md'));
Expand Down Expand Up @@ -524,7 +524,7 @@ describe('JavaLTS', () => {
);
getFileContentsStub
.withArgs('versions.txt', defaultBranch)
.resolves(buildFileContent('versions.txt'));
.resolves(buildFileContent('versions-lts-snapshot.txt'));
getFileContentsStub
.withArgs('README.md', defaultBranch)
.resolves(buildFileContent('README.md'));
Expand Down
22 changes: 16 additions & 6 deletions test/releasers/java/version.ts
Expand Up @@ -179,11 +179,21 @@ describe('Version', () => {
const version = Version.parse('1.23.45').bump('lts');
expect(version.major).to.equal(1);
expect(version.minor).to.equal(23);
expect(version.patch).to.equal(46);
expect(version.patch).to.equal(45);
expect(version.extra).to.equal('');
expect(version.lts).to.equal(1);
expect(version.snapshot).to.equal(false);
expect(version.toString()).to.equal('1.23.46-sp.1');
expect(version.toString()).to.equal('1.23.45-sp.1');
});
it('should make an initial LTS snapshot bump', async () => {
const version = Version.parse('1.23.45').bump('lts-snapshot');
expect(version.major).to.equal(1);
expect(version.minor).to.equal(23);
expect(version.patch).to.equal(45);
expect(version.extra).to.equal('');
expect(version.lts).to.equal(1);
expect(version.snapshot).to.equal(true);
expect(version.toString()).to.equal('1.23.45-sp.1-SNAPSHOT');
});
it('should make an initial LTS bump on a SNAPSHOT', async () => {
const version = Version.parse('1.23.45-SNAPSHOT').bump('lts');
Expand All @@ -199,14 +209,14 @@ describe('Version', () => {
const version = Version.parse('1.23.45-beta').bump('lts');
expect(version.major).to.equal(1);
expect(version.minor).to.equal(23);
expect(version.patch).to.equal(46);
expect(version.patch).to.equal(45);
expect(version.extra).to.equal('-beta');
expect(version.lts).to.equal(1);
expect(version.snapshot).to.equal(false);
expect(version.toString()).to.equal('1.23.46-beta-sp.1');
expect(version.toString()).to.equal('1.23.45-beta-sp.1');
});
it('should make a snapshot on an LTS version', async () => {
const version = Version.parse('1.23.45-beta-sp.1').bump('snapshot');
const version = Version.parse('1.23.45-beta-sp.1').bump('lts-snapshot');
expect(version.major).to.equal(1);
expect(version.minor).to.equal(23);
expect(version.patch).to.equal(45);
Expand All @@ -216,7 +226,7 @@ describe('Version', () => {
expect(version.toString()).to.equal('1.23.45-beta-sp.2-SNAPSHOT');
});
it('should make an LTS bump on an LTS version', async () => {
const version = Version.parse('1.23.45-beta-sp.1-SNAPSHOT').bump('lts');
const version = Version.parse('1.23.45-beta-sp.2-SNAPSHOT').bump('lts');
expect(version.major).to.equal(1);
expect(version.minor).to.equal(23);
expect(version.patch).to.equal(45);
Expand Down

0 comments on commit 7f78dc5

Please sign in to comment.