Skip to content

Commit 39c4e68

Browse files
committed
Consider spring.build-type when configuring the conventions
1 parent 5629b57 commit 39c4e68

File tree

3 files changed

+85
-15
lines changed

3 files changed

+85
-15
lines changed

README.md

+5
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,11 @@ plugins {
130130
}
131131
```
132132

133+
The behavior of the conventions can be controlled with a `spring.build-type` property in `gradle.properties`.
134+
If the property is present, it must have a value of `oss` in order to publish build scans and use the build cache.
135+
Any other value will disable both build scan publishing and the build cache.
136+
For example, you may want to update `gradle.properties` and set `spring.build-type` to `cve` when working on a fix for a security vulnerability.
137+
133138
### Maven
134139

135140
To use the conventions, create a `.mvn/extensions.xml` file in the root of the project:

develocity-conventions-gradle-plugin/src/main/java/io/spring/develocity/conventions/gradle/DevelocityConventionsPlugin.java

+43-14
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
package io.spring.develocity.conventions.gradle;
1818

1919
import java.io.File;
20+
import java.io.FileReader;
21+
import java.io.IOException;
22+
import java.io.Reader;
23+
import java.io.UncheckedIOException;
24+
import java.util.Properties;
2025

2126
import javax.inject.Inject;
2227

@@ -49,19 +54,52 @@ public DevelocityConventionsPlugin(ProcessOperations processOperations) {
4954
public void apply(Settings settings) {
5055
settings.getPlugins().apply(DevelocityPlugin.class);
5156
DevelocityConfiguration extension = settings.getExtensions().getByType(DevelocityConfiguration.class);
52-
configureBuildScanConventions(extension, extension.getBuildScan(), settings.getStartParameter(),
53-
settings.getRootDir());
57+
if (!isOssBuild(settings)) {
58+
extension
59+
.buildScan((buildScan) -> buildScan.publishing((publishing) -> publishing.onlyIf((context) -> false)));
60+
return;
61+
}
62+
if (isBuildScanEnabled(settings)) {
63+
configureBuildScanConventions(extension, extension.getBuildScan(), settings.getStartParameter(),
64+
settings.getRootDir());
65+
}
5466
if (settings.getStartParameter().isBuildCacheEnabled()) {
5567
settings.buildCache((buildCacheConfiguration) -> new BuildCacheConventions()
5668
.execute(new GradleConfigurableBuildCache(extension.getBuildCache(), buildCacheConfiguration)));
5769
}
5870
}
5971

72+
private boolean isOssBuild(Settings settings) {
73+
Properties properties = new Properties();
74+
File propertiesFile = new File(settings.getRootDir(), "gradle.properties");
75+
if (propertiesFile.exists()) {
76+
try (Reader reader = new FileReader(propertiesFile)) {
77+
properties.load(reader);
78+
}
79+
catch (IOException ex) {
80+
throw new UncheckedIOException(ex);
81+
}
82+
}
83+
String buildType = properties.getProperty("spring.build-type");
84+
return buildType == null || "oss".equals(buildType);
85+
}
86+
87+
private boolean isBuildScanEnabled(Settings settings) {
88+
StartParameter startParameter = settings.getStartParameter();
89+
return !startParameter.isNoBuildScan() && !containsPropertiesTask(startParameter);
90+
}
91+
92+
private boolean containsPropertiesTask(StartParameter startParameter) {
93+
for (String taskName : startParameter.getTaskNames()) {
94+
if (taskName.equals("properties") || taskName.endsWith(":properties")) {
95+
return true;
96+
}
97+
}
98+
return false;
99+
}
100+
60101
private void configureBuildScanConventions(DevelocityConfiguration develocity, BuildScanConfiguration buildScan,
61102
StartParameter startParameter, File rootDir) {
62-
if (startParameter.isNoBuildScan() || containsPropertiesTask(startParameter)) {
63-
return;
64-
}
65103
ProcessOperationsProcessRunner processRunner = new ProcessOperationsProcessRunner(
66104
new WorkingDirectoryProcessOperations(this.processOperations, rootDir));
67105
if (startParameter.isBuildScan()) {
@@ -88,13 +126,4 @@ protected String getJdkVersion() {
88126
}
89127
}
90128

91-
private boolean containsPropertiesTask(StartParameter startParameter) {
92-
for (String taskName : startParameter.getTaskNames()) {
93-
if (taskName.equals("properties") || taskName.endsWith(":properties")) {
94-
return true;
95-
}
96-
}
97-
return false;
98-
}
99-
100129
}

develocity-conventions-gradle-plugin/src/test/java/io/spring/develocity/conventions/gradle/DevelocityConventionsPluginIntegrationTests.java

+37-1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,25 @@ void whenThePluginIsAppliedAndBuildScansAreDisabledThenBuildScanConventionsAreNo
6767
assertThat(result.getOutput()).contains("Capture task input files: false");
6868
}
6969

70+
@Test
71+
void whenThePluginIsAppliedAndTheSpringBuildTypeIsNotOssThenBuildScanConventionsAreNotApplied(
72+
@TempDir File projectDir) {
73+
prepareProject(projectDir);
74+
write(new File(projectDir, "gradle.properties"), (writer) -> writer.println("spring.build-type=other"));
75+
BuildResult result = build(projectDir, "6.0.1", "verifyBuildScanConfig");
76+
assertThat(result.getOutput()).contains("Build scan server: null");
77+
assertThat(result.getOutput()).contains("Capture task input files: false");
78+
}
79+
80+
@Test
81+
void whenThePluginIsAppliedAndTheSpringBuildTypeIsOssThenBuildScanConventionsAreApplied(@TempDir File projectDir) {
82+
prepareProject(projectDir);
83+
write(new File(projectDir, "gradle.properties"), (writer) -> writer.println("spring.build-type=oss"));
84+
BuildResult result = build(projectDir, "6.0.1", "verifyBuildScanConfig");
85+
assertThat(result.getOutput()).contains("Build scan server: https://ge.spring.io");
86+
assertThat(result.getOutput()).contains("Capture task input files: true");
87+
}
88+
7089
@Test
7190
void whenThePluginIsAppliedAndPropertiesTaskIsExecutedThenBuildScanConventionsAreNotApplied(
7291
@TempDir File projectDir) {
@@ -100,6 +119,23 @@ void whenThePluginIsAppliedAndBuildCacheIsDisabledThenBuildCacheConventionsAreNo
100119
assertThat(result.getOutput()).contains("Build cache server: null");
101120
}
102121

122+
@Test
123+
void whenThePluginIsAppliedAndTheSpringBuildTypeIsNotOssThenBuildCacheConventionsAreNotApplied(
124+
@TempDir File projectDir) {
125+
prepareProject(projectDir);
126+
write(new File(projectDir, "gradle.properties"), (writer) -> writer.println("spring.build-type=other"));
127+
BuildResult result = build(projectDir, "6.0.1", "verifyBuildCacheConfig");
128+
assertThat(result.getOutput()).contains("Build cache server: null");
129+
}
130+
131+
@Test
132+
void whenThePluginIsAppliedAndTheSpringBuildTypeIsOssThenBuildCacheConventionsAreApplied(@TempDir File projectDir) {
133+
prepareProject(projectDir);
134+
write(new File(projectDir, "gradle.properties"), (writer) -> writer.println("spring.build-type=oss"));
135+
BuildResult result = build(projectDir, "6.0.1", "verifyBuildCacheConfig");
136+
assertThat(result.getOutput()).contains("Build cache server: https://ge.spring.io");
137+
}
138+
103139
private void prepareProject(File projectDir) {
104140
write(new File(projectDir, "gradle.properties"), (writer) -> writer.println("org.gradle.caching=true"));
105141
write(new File(projectDir, "settings.gradle"), (writer) -> {
@@ -151,7 +187,7 @@ private void prepareMultiModuleProject(File projectDir) {
151187

152188
private void write(File file, Consumer<PrintWriter> consumer) {
153189
file.getParentFile().mkdirs();
154-
try (PrintWriter writer = new PrintWriter(new FileWriter(file))) {
190+
try (PrintWriter writer = new PrintWriter(new FileWriter(file, true))) {
155191
consumer.accept(writer);
156192
}
157193
catch (IOException ex) {

0 commit comments

Comments
 (0)