Skip to content

Commit e830ee8

Browse files
committed
Support com.gradle.develocity plugin in place of com.gradle.enterprise
Closes gh-74
1 parent 634754a commit e830ee8

12 files changed

+340
-230
lines changed

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ The username and password environment variables should be set using the `gradle_
4343

4444
## Build scan conventions
4545

46-
When applied alongside the [Gradle Enterprise Plugin](https://plugins.gradle.org/plugin/com.gradle.enterprise), the plugin will configure publishing of build scans to [ge.spring.io](https://ge.spring.io) when authenticated.
46+
When applied alongside the [Develocity Plugin](https://plugins.gradle.org/plugin/com.gradle.develocity), the plugin will configure publishing of build scans to [ge.spring.io](https://ge.spring.io) when authenticated.
4747
The build scans will be customized to:
4848

4949
- Add tags:
@@ -59,7 +59,7 @@ The build scans will be customized to:
5959
- Add links:
6060
- `CI build` when building on Bamboo, GitHub Actions, or Jenkins, linking to the build on the CI server.
6161
- `Git commit build scans`, linking to scans for other builds of the same git commit.
62-
- Enable capturing of task (Gradle) or goal (Maven) input files
62+
- Enable capturing of file fingerprints
6363
- Upload build scans in the foreground when running on CI
6464

6565
### Build scan publishing credentials
@@ -125,12 +125,12 @@ pluginManagement {
125125

126126
In the example above, `gradlePluginPortal()` is declared to allow other plugins to continue to be resolved from the portal.
127127

128-
Now apply the plugin in `settings.gradle`, alongside the `com.gradle.enterprise` plugin:
128+
Now apply the plugin in `settings.gradle`, alongside the `com.gradle.develocity` plugin:
129129

130130
```groovy
131131
plugins {
132132
// …
133-
id "com.gradle.enterprise" version "<<version>>"
133+
id "com.gradle.develocity" version "<<version>>"
134134
id "io.spring.ge.conventions" version "<<version>>"
135135
// …
136136
}

build.gradle

+2-19
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ plugins {
33
id "io.spring.javaformat" version "$javaFormatVersion"
44
id "java-gradle-plugin"
55
id "maven-publish"
6-
id "io.spring.compatibility-test" version "0.0.2"
76
}
87

98
description = "Gradle Enterprise Conventions Gradle plugin"
@@ -17,16 +16,12 @@ repositories {
1716
gradlePluginPortal()
1817
}
1918

20-
configurations {
21-
compatibilityTestImplementation
22-
}
23-
2419
dependencies {
2520
checkstyle("io.spring.javaformat:spring-javaformat-checkstyle:${javaFormatVersion}")
2621

27-
compileOnly("com.gradle:gradle-enterprise-gradle-plugin:${gradleEnterprisePluginVersion}")
22+
compileOnly("com.gradle:develocity-gradle-plugin:${gradleEnterprisePluginVersion}")
2823

29-
testImplementation("com.gradle:gradle-enterprise-gradle-plugin:${gradleEnterprisePluginVersion}")
24+
testImplementation("com.gradle:develocity-gradle-plugin:${gradleEnterprisePluginVersion}")
3025
testImplementation("org.assertj:assertj-core:3.24.2")
3126
testImplementation("org.junit.jupiter:junit-jupiter:5.10.0")
3227
testImplementation("org.mockito:mockito-core:4.11.0")
@@ -43,18 +38,6 @@ gradlePlugin {
4338
}
4439
}
4540

46-
compatibilityTest {
47-
useJUnitPlatform()
48-
dependency('Gradle Enterprise Plugin') { gePlugin ->
49-
gePlugin.groupId = 'com.gradle'
50-
gePlugin.artifactId = 'gradle-enterprise-gradle-plugin'
51-
gePlugin.versions = [
52-
'3.15.1',
53-
'3.14.1'
54-
]
55-
}
56-
}
57-
5841
tasks.withType(Test) { testTask ->
5942
if (testTask.name.startsWith("compatibilityTest_")) {
6043
testTask.filter {

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
version=0.0.17-SNAPSHOT
22

3-
gradleEnterprisePluginVersion=3.16.1
3+
gradleEnterprisePluginVersion=3.17
44
javaFormatVersion=0.0.39

src/main/java/io/spring/ge/conventions/gradle/AnonymousPublicationBuildScanConventions.java

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2021 the original author or authors.
2+
* Copyright 2020-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,7 +18,8 @@
1818

1919
import java.util.Map;
2020

21-
import com.gradle.scan.plugin.BuildScanExtension;
21+
import com.gradle.develocity.agent.gradle.DevelocityConfiguration;
22+
import com.gradle.develocity.agent.gradle.scan.BuildScanConfiguration;
2223

2324
/**
2425
* Conventions for build scans that are published anonymously to
@@ -28,16 +29,17 @@
2829
*/
2930
public class AnonymousPublicationBuildScanConventions extends BuildScanConventions {
3031

31-
public AnonymousPublicationBuildScanConventions(ProcessRunner processRunner, Map<String, String> env) {
32-
super(processRunner, env);
32+
public AnonymousPublicationBuildScanConventions(DevelocityConfiguration develocity, ProcessRunner processRunner,
33+
Map<String, String> env) {
34+
super(develocity, processRunner, env);
3335
}
3436

35-
public AnonymousPublicationBuildScanConventions(ProcessRunner processRunner) {
36-
super(processRunner);
37+
public AnonymousPublicationBuildScanConventions(DevelocityConfiguration develocity, ProcessRunner processRunner) {
38+
super(develocity, processRunner);
3739
}
3840

3941
@Override
40-
protected void configurePublishing(BuildScanExtension buildScan) {
42+
protected void configurePublishing(BuildScanConfiguration buildScan) {
4143
// Use Gradle's defaults
4244
}
4345

src/main/java/io/spring/ge/conventions/gradle/BuildScanConventions.java

+26-33
Original file line numberDiff line numberDiff line change
@@ -23,30 +23,34 @@
2323
import java.util.function.Consumer;
2424
import java.util.stream.Collectors;
2525

26-
import com.gradle.scan.plugin.BuildScanExtension;
26+
import com.gradle.develocity.agent.gradle.DevelocityConfiguration;
27+
import com.gradle.develocity.agent.gradle.scan.BuildScanConfiguration;
2728
import org.gradle.api.Action;
2829

2930
/**
30-
* {@link Action} that configures the {@link BuildScanExtension build scan} with Spring
31-
* conventions.
31+
* {@link Action} that configures the {@link BuildScanConfiguration build scan} with
32+
* Spring conventions.
3233
*
3334
* @author Andy Wilkinson
3435
*/
35-
class BuildScanConventions implements Action<BuildScanExtension> {
36+
class BuildScanConventions implements Action<BuildScanConfiguration> {
3637

3738
private static final String BAMBOO_RESULTS_ENV_VAR = "bamboo_resultsUrl";
3839

3940
private static final String CIRCLECI_BUILD_URL_ENV_VAR = "CIRCLE_BUILD_URL";
4041

41-
private final Map<String, String> env;
42+
private final DevelocityConfiguration develocity;
4243

4344
private final ProcessRunner processRunner;
4445

45-
BuildScanConventions(ProcessRunner processRunner) {
46-
this(processRunner, System.getenv());
46+
private final Map<String, String> env;
47+
48+
BuildScanConventions(DevelocityConfiguration develocity, ProcessRunner processRunner) {
49+
this(develocity, processRunner, System.getenv());
4750
}
4851

49-
BuildScanConventions(ProcessRunner processRunner, Map<String, String> env) {
52+
BuildScanConventions(DevelocityConfiguration develocity, ProcessRunner processRunner, Map<String, String> env) {
53+
this.develocity = develocity;
5054
this.processRunner = processRunner;
5155
this.env = env;
5256
}
@@ -56,21 +60,15 @@ class BuildScanConventions implements Action<BuildScanExtension> {
5660
* @param buildScan build scan to be configured
5761
*/
5862
@Override
59-
@SuppressWarnings("deprecation")
60-
public void execute(BuildScanExtension buildScan) {
63+
public void execute(BuildScanConfiguration buildScan) {
6164
buildScan.obfuscation((obfuscation) -> obfuscation
6265
.ipAddresses((addresses) -> addresses.stream().map((address) -> "0.0.0.0").collect(Collectors.toList())));
6366
configurePublishing(buildScan);
6467
tagBuildScan(buildScan);
6568
buildScan.background(this::addGitMetadata);
6669
addCiMetadata(buildScan);
67-
buildScan.setUploadInBackground(!isCi());
68-
try {
69-
buildScan.capture((settings) -> settings.setTaskInputFiles(true));
70-
}
71-
catch (NoSuchMethodError ex) {
72-
buildScan.setCaptureTaskInputFiles(true);
73-
}
70+
buildScan.getUploadInBackground().set(!isCi());
71+
buildScan.capture((settings) -> settings.getFileFingerprints().set(true));
7472
}
7573

7674
/**
@@ -79,24 +77,18 @@ public void execute(BuildScanExtension buildScan) {
7977
* {@code https://ge.spring.io}.
8078
* @param buildScan build scan to configure
8179
*/
82-
protected void configurePublishing(BuildScanExtension buildScan) {
83-
buildScan.publishAlways();
84-
try {
85-
buildScan.getClass().getMethod("publishIfAuthenticated").invoke(buildScan);
86-
}
87-
catch (Exception ex) {
88-
throw new RuntimeException("Failed to invoke publishIfAuthenticated()", ex);
89-
}
90-
buildScan.setServer("https://ge.spring.io");
80+
protected void configurePublishing(BuildScanConfiguration buildScan) {
81+
buildScan.publishing((publishing) -> publishing.onlyIf((context) -> context.isAuthenticated()));
82+
this.develocity.getServer().set("https://ge.spring.io");
9183
}
9284

93-
private void tagBuildScan(BuildScanExtension buildScan) {
85+
private void tagBuildScan(BuildScanConfiguration buildScan) {
9486
tagCiOrLocal(buildScan);
9587
tagJdk(buildScan);
9688
tagOperatingSystem(buildScan);
9789
}
9890

99-
private void tagCiOrLocal(BuildScanExtension buildScan) {
91+
private void tagCiOrLocal(BuildScanConfiguration buildScan) {
10092
buildScan.tag(isCi() ? "CI" : "Local");
10193
}
10294

@@ -127,23 +119,24 @@ private boolean isGitHubActions() {
127119
return this.env.containsKey("GITHUB_ACTIONS");
128120
}
129121

130-
private void tagJdk(BuildScanExtension buildScan) {
122+
private void tagJdk(BuildScanConfiguration buildScan) {
131123
buildScan.tag("JDK-" + getJdkVersion());
132124
}
133125

134126
protected String getJdkVersion() {
135127
return System.getProperty("java.specification.version");
136128
}
137129

138-
private void tagOperatingSystem(BuildScanExtension buildScan) {
130+
private void tagOperatingSystem(BuildScanConfiguration buildScan) {
139131
buildScan.tag(System.getProperty("os.name"));
140132
}
141133

142-
private void addGitMetadata(BuildScanExtension buildScan) {
134+
private void addGitMetadata(BuildScanConfiguration buildScan) {
143135
run("git", "rev-parse", "--short=8", "--verify", "HEAD").standardOut((gitCommitId) -> {
144136
String commitIdLabel = "Git commit";
145137
buildScan.value(commitIdLabel, gitCommitId);
146-
String server = buildScan.getServer();
138+
139+
String server = this.develocity.getServer().getOrNull();
147140
if (server != null) {
148141
buildScan.link("Git commit build scans", server + createSearchUrl(commitIdLabel, gitCommitId));
149142
}
@@ -158,7 +151,7 @@ private void addGitMetadata(BuildScanExtension buildScan) {
158151
});
159152
}
160153

161-
private void addCiMetadata(BuildScanExtension buildScan) {
154+
private void addCiMetadata(BuildScanConfiguration buildScan) {
162155
if (isBamboo()) {
163156
buildScan.link("CI build", this.env.get(BAMBOO_RESULTS_ENV_VAR));
164157
}

src/main/java/io/spring/ge/conventions/gradle/GradleEnterpriseConventionsPlugin.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020

2121
import javax.inject.Inject;
2222

23-
import com.gradle.enterprise.gradleplugin.GradleEnterpriseExtension;
24-
import com.gradle.enterprise.gradleplugin.GradleEnterprisePlugin;
25-
import com.gradle.scan.plugin.BuildScanExtension;
23+
import com.gradle.develocity.agent.gradle.DevelocityConfiguration;
24+
import com.gradle.develocity.agent.gradle.DevelocityPlugin;
25+
import com.gradle.develocity.agent.gradle.scan.BuildScanConfiguration;
2626
import org.gradle.StartParameter;
2727
import org.gradle.api.Plugin;
2828
import org.gradle.api.initialization.Settings;
@@ -45,9 +45,9 @@ public GradleEnterpriseConventionsPlugin(ProcessOperations processOperations) {
4545

4646
@Override
4747
public void apply(Settings settings) {
48-
settings.getPlugins().withType(GradleEnterprisePlugin.class, (plugin) -> {
49-
GradleEnterpriseExtension extension = settings.getExtensions().getByType(GradleEnterpriseExtension.class);
50-
configureBuildScanConventions(extension.getBuildScan(), settings.getStartParameter(),
48+
settings.getPlugins().withType(DevelocityPlugin.class, (plugin) -> {
49+
DevelocityConfiguration extension = settings.getExtensions().getByType(DevelocityConfiguration.class);
50+
configureBuildScanConventions(extension, extension.getBuildScan(), settings.getStartParameter(),
5151
settings.getRootDir());
5252
});
5353
if (settings.getStartParameter().isBuildCacheEnabled()) {
@@ -56,15 +56,15 @@ public void apply(Settings settings) {
5656
}
5757
}
5858

59-
private void configureBuildScanConventions(BuildScanExtension buildScan, StartParameter startParameter,
60-
File rootDir) {
59+
private void configureBuildScanConventions(DevelocityConfiguration develocity, BuildScanConfiguration buildScan,
60+
StartParameter startParameter, File rootDir) {
6161
if (startParameter.isNoBuildScan() || containsPropertiesTask(startParameter)) {
6262
return;
6363
}
6464
ProcessOperationsProcessRunner processRunner = new ProcessOperationsProcessRunner(
6565
new WorkingDirectoryProcessOperations(this.processOperations, rootDir));
6666
if (startParameter.isBuildScan()) {
67-
new AnonymousPublicationBuildScanConventions(processRunner) {
67+
new AnonymousPublicationBuildScanConventions(develocity, processRunner) {
6868

6969
@Override
7070
protected String getJdkVersion() {
@@ -75,7 +75,7 @@ protected String getJdkVersion() {
7575
}.execute(buildScan);
7676
}
7777
else {
78-
new BuildScanConventions(processRunner) {
78+
new BuildScanConventions(develocity, processRunner) {
7979

8080
@Override
8181
protected String getJdkVersion() {

src/test/java/io/spring/ge/conventions/gradle/AnonymousPublicationBuildScanConventionsTests.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2020-2021 the original author or authors.
2+
* Copyright 2020-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -29,19 +29,20 @@ class AnonymousPublicationBuildScanConventionsTests {
2929

3030
private final TestProcessRunner processRunner = new TestProcessRunner();
3131

32-
private final TestBuildScanExtension buildScan = new TestBuildScanExtension();
32+
private final TestDevelocityConfiguration develocity = new TestDevelocityConfiguration();
33+
34+
private final TestBuildScanConfiguration buildScan = new TestBuildScanConfiguration();
3335

3436
@Test
3537
void buildScansAreConfiguredToUseDefaultPublicationBehaviour() {
36-
new AnonymousPublicationBuildScanConventions(this.processRunner).execute(this.buildScan);
37-
assertThat(this.buildScan.publishAlways).isFalse();
38-
assertThat(this.buildScan.publishIfAuthenticated).isFalse();
38+
new AnonymousPublicationBuildScanConventions(this.develocity, this.processRunner).execute(this.buildScan);
39+
assertThat(this.buildScan.publishing.predicate).isNull();
3940
}
4041

4142
@Test
4243
void buildScansAreConfiguredToPublishToDefaultServer() {
43-
new AnonymousPublicationBuildScanConventions(this.processRunner).execute(this.buildScan);
44-
assertThat(this.buildScan.server).isNull();
44+
new AnonymousPublicationBuildScanConventions(this.develocity, this.processRunner).execute(this.buildScan);
45+
assertThat(this.develocity.getServer().getOrNull()).isNull();
4546
}
4647

4748
}

0 commit comments

Comments
 (0)