Skip to content

Commit

Permalink
feat: handle Java multiple versions (#262)
Browse files Browse the repository at this point in the history
  • Loading branch information
chingor13 authored and bcoe committed Sep 13, 2019
1 parent f44870e commit d850283
Show file tree
Hide file tree
Showing 27 changed files with 578 additions and 129 deletions.
65 changes: 65 additions & 0 deletions __snapshots__/java-auth-readme.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,68 @@ libraryDependencies += "com.google.auth" % "google-auth-library-oauth2-http" % "
[//]: # ({x-version-update-end})
`

exports['JavaAuthReadme updateContent updates multiple version examples in README.md 1'] = `
## Quickstart
If you are using Maven, add this to your pom.xml file (notice that you can replace
\`google-auth-library-oauth2-http\` with any of \`google-auth-library-credentials\` and
\`google-auth-library-appengine\`, depending on your application needs):
[//]: # ({x-version-update-start:google-auth-library-oauth2-http:released})
\`\`\`xml
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>0.20.0</version>
</dependency>
\`\`\`
[//]: # ({x-version-update-end})
If you are using Gradle, add this to your dependencies
[//]: # ({x-version-update-start:google-auth-library-credentials:released})
\`\`\`Groovy
compile 'com.google.auth:google-auth-library-credentials:0.30.0'
\`\`\`
[//]: # ({x-version-update-end})
If you are using SBT, add this to your dependencies
[//]: # ({x-version-update-start:google-auth-library-credentials:released})
\`\`\`Scala
libraryDependencies += "com.google.auth" % "google-auth-library-credentials" % "0.30.0"
\`\`\`
[//]: # ({x-version-update-end})
[//]: # ({x-version-update-start:google-auth-library-credentials:released})
\`\`\`xml
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-credentials</artifactId>
<version>0.30.0</version>
</dependency>
\`\`\`
[//]: # ({x-version-update-end})
If you are using Gradle, add this to your dependencies
[//]: # ({x-version-update-start:google-auth-library-credentials:released})
\`\`\`Groovy
compile 'com.google.auth:google-auth-library-credentials:0.30.0'
\`\`\`
[//]: # ({x-version-update-end})
If you are using SBT, add this to your dependencies
[//]: # ({x-version-update-start:google-auth-library-credentials:released})
\`\`\`Scala
libraryDependencies += "com.google.auth" % "google-auth-library-credentials" % "0.30.0"
\`\`\`
[//]: # ({x-version-update-end})
`
31 changes: 22 additions & 9 deletions __snapshots__/java-auth-versions.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ exports['JavaAuthVersions updateContent updates versions.txt appropriately for n
# module:released-version:current-version
google-auth-library:0.25.0:0.25.0
google-auth-library-bom:0.25.0:0.25.0
google-auth-library-parent:0.25.0:0.25.0
google-auth-library-appengine:0.25.0:0.25.0
google-auth-library-credentials:0.25.0:0.25.0
google-auth-library-oauth2-http:0.25.0:0.25.0
google-auth-library-bom:0.16.2:0.16.2-99-SNAPSHOT
google-auth-library-parent:0.16.2:0.16.2-alpha-SNAPSHOT
google-auth-library-appengine:0.16.2:0.16.2
google-auth-library-credentials:0.16.2:0.16.2
google-auth-library-oauth2-http:0.16.2:0.16.2
`

Expand All @@ -16,10 +16,23 @@ exports['JavaAuthVersions updateContent updates versions.txt appropriately for S
# module:released-version:current-version
google-auth-library:0.16.2:0.16.2-SNAPSHOT
google-auth-library-bom:0.16.2:0.16.2-SNAPSHOT
google-auth-library-parent:0.16.2:0.16.2-SNAPSHOT
google-auth-library-appengine:0.16.2:0.16.2-SNAPSHOT
google-auth-library-credentials:0.16.2:0.16.2-SNAPSHOT
google-auth-library-bom:0.16.2:0.16.2-99-SNAPSHOT
google-auth-library-parent:0.16.2:0.16.2-alpha-SNAPSHOT
google-auth-library-appengine:0.16.2:0.16.2
google-auth-library-credentials:0.16.2:0.16.2
google-auth-library-oauth2-http:0.16.2:0.16.2-SNAPSHOT
`

exports['JavaAuthVersions updateContent updates multiple versions in versions.txt 1'] = `
# Format:
# module:released-version:current-version
google-auth-library:0.25.0:0.25.0
google-auth-library-bom:0.16.2:0.16.2-99-SNAPSHOT
google-auth-library-parent:0.16.2:0.16.2-alpha-SNAPSHOT
google-auth-library-appengine:0.16.2:0.16.2
google-auth-library-credentials:0.16.2:0.16.2
google-auth-library-oauth2-http:0.16.2:0.16.2-SNAPSHOT
`
56 changes: 56 additions & 0 deletions __snapshots__/pom-xml.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,3 +81,59 @@ exports['PomXML updateContent updates version in pom.xml 1'] = `
</dependencies>
</project>
`

exports['PomXML updateContent handles specific versions in pom.xml 1'] = `
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-cloud-trace-v1</artifactId>
<version>0.73.1-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-trace-v1:current} -->
<name>proto-google-cloud-trace-v1</name>
<description>PROTO library for proto-google-cloud-trace-v1</description>
<parent>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-trace-parent</artifactId>
<version>0.19.0</version><!-- {x-version-update:google-cloud-trace:current} -->
</parent>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
</dependency>
</dependencies>
</project>
`

exports['PomXML updateContent handles multiple versions in pom.xml 1'] = `
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-cloud-trace-v1</artifactId>
<version>0.25.0</version><!-- {x-version-update:proto-google-cloud-trace-v1:current} -->
<name>proto-google-cloud-trace-v1</name>
<description>PROTO library for proto-google-cloud-trace-v1</description>
<parent>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-trace-parent</artifactId>
<version>0.16.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-trace:current} -->
</parent>
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
</dependency>
<dependency>
<groupId>com.google.api.grpc</groupId>
<artifactId>proto-google-common-protos</artifactId>
</dependency>
</dependencies>
</project>
`
7 changes: 7 additions & 0 deletions __snapshots__/version-manifest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
exports['VersionManifest parseVersions parses multiple versions in versions.txt 1'] = {
"google-cloud-trace": "0.108.0-beta",
"grpc-google-cloud-trace-v1": "0.73.0",
"grpc-google-cloud-trace-v2": "0.73.0",
"proto-google-cloud-trace-v1": "0.73.0",
"proto-google-cloud-trace-v2": "0.73.0"
}
36 changes: 35 additions & 1 deletion src/releasers/java-yoshi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,12 @@
*/

import { ReleasePR, ReleasePROptions, ReleaseCandidate } from '../release-pr';
import * as semver from 'semver';

import { ConventionalCommits } from '../conventional-commits';
import { GitHubTag } from '../github';
import { checkpoint, CheckpointType } from '../util/checkpoint';
import { Update } from '../updaters/update';
import { Update, VersionsMap } from '../updaters/update';
import { Commit } from '../graphql-to-commits';

// Generic
Expand Down Expand Up @@ -53,6 +54,16 @@ export class JavaYoshi extends ReleasePR {
}

protected async _run() {
const versionsManifestContent = await this.gh.getFileContents(
'versions.txt'
);
const currentVersions = VersionsManifest.parseVersions(
versionsManifestContent.parsedContent
);
this.snapshot = VersionsManifest.needsSnapshot(
versionsManifestContent.parsedContent
);

const latestTag: GitHubTag | undefined = await this.gh.latestTag();
const commits: Commit[] = this.snapshot
? [
Expand All @@ -75,6 +86,7 @@ export class JavaYoshi extends ReleasePR {
cc,
latestTag
);
const candidateVersions = await this.coerceVersions(cc, currentVersions);
let changelogEntry: string = await cc.generateChangelogEntry({
version: candidate.version,
currentTag: `v${candidate.version}`,
Expand Down Expand Up @@ -112,6 +124,7 @@ export class JavaYoshi extends ReleasePR {
new Changelog({
path: 'CHANGELOG.md',
changelogEntry,
versions: candidateVersions,
version: candidate.version,
packageName: this.packageName,
})
Expand All @@ -121,6 +134,7 @@ export class JavaYoshi extends ReleasePR {
new Readme({
path: 'README.md',
changelogEntry,
versions: candidateVersions,
version: candidate.version,
packageName: this.packageName,
})
Expand All @@ -131,8 +145,10 @@ export class JavaYoshi extends ReleasePR {
new VersionsManifest({
path: 'versions.txt',
changelogEntry,
versions: candidateVersions,
version: candidate.version,
packageName: this.packageName,
contents: versionsManifestContent,
})
);

Expand All @@ -142,6 +158,7 @@ export class JavaYoshi extends ReleasePR {
new PomXML({
path,
changelogEntry,
versions: candidateVersions,
version: candidate.version,
packageName: this.packageName,
})
Expand All @@ -159,4 +176,21 @@ export class JavaYoshi extends ReleasePR {
protected defaultInitialVersion(): string {
return '0.1.0';
}

protected async coerceVersions(
cc: ConventionalCommits,
currentVersions: VersionsMap
): Promise<VersionsMap> {
const newVersions: VersionsMap = new Map<string, string>();
for (const [k, version] of currentVersions) {
const bump = await cc.suggestBump(version);
const candidate: string | null = semver.inc(version, bump.releaseType);
if (candidate) {
newVersions.set(k, candidate);
} else {
throw Error(`failed to increment ${k} @ ${version}`);
}
}
return newVersions;
}
}
8 changes: 4 additions & 4 deletions src/releasers/php-yoshi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { ReleasePR, ReleaseCandidate } from '../release-pr';
import { ConventionalCommits } from '../conventional-commits';
import { GitHubTag, GitHubFileContents } from '../github';
import { checkpoint, CheckpointType } from '../util/checkpoint';
import { Update } from '../updaters/update';
import { Update, VersionsMap } from '../updaters/update';
import { Commit } from '../graphql-to-commits';
import { CommitSplit } from '../commit-split';
import * as semver from 'semver';
Expand All @@ -34,7 +34,7 @@ import { Version } from '../updaters/version';

interface PHPYoshiBulkUpdate {
changelogEntry: string;
versionUpdates: { [key: string]: string };
versionUpdates: VersionsMap;
}

export class PHPYoshi extends ReleasePR {
Expand Down Expand Up @@ -129,7 +129,7 @@ export class PHPYoshi extends ReleasePR {
const pkgKeys: string[] = Object.keys(commitLookup).sort();
// map of library names that need to be updated in the top level
// composer.json and manifest.json.
const versionUpdates: { [key: string]: string } = {};
const versionUpdates: VersionsMap = new Map<string, string>();

// walk each individual library updating the VERSION file, and
// if necessary the `const VERSION` in the client library.
Expand Down Expand Up @@ -169,7 +169,7 @@ export class PHPYoshi extends ReleasePR {
(await this.gh.getFileContents(`${pkgKey}/composer.json`))
.parsedContent
);
versionUpdates[meta.name] = candidate;
versionUpdates.set(meta.name, candidate);

changelogEntry = updatePHPChangelogEntry(
`${meta.name} ${candidate}`,
Expand Down
4 changes: 2 additions & 2 deletions src/updaters/changelog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@
*/

import { checkpoint, CheckpointType } from '../util/checkpoint';
import { Update, UpdateOptions } from './update';
import { Update, UpdateOptions, VersionsMap } from './update';
import { GitHubFileContents } from '../github';

export class Changelog implements Update {
path: string;
changelogEntry: string;
version: string;
versions?: { [key: string]: string };
versions?: VersionsMap;
packageName: string;
create: boolean;
contents?: GitHubFileContents;
Expand Down
Loading

0 comments on commit d850283

Please sign in to comment.