Skip to content

Commit 5ca6f31

Browse files
authored
Move precommit task implementation to java (#33407)
Replace precommit tasks that execute with Java implementations
1 parent baa69a5 commit 5ca6f31

File tree

10 files changed

+334
-301
lines changed

10 files changed

+334
-301
lines changed

buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/JarHellTask.groovy

Lines changed: 0 additions & 67 deletions
This file was deleted.

buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/LoggerUsageTask.groovy

Lines changed: 0 additions & 108 deletions
This file was deleted.

buildSrc/src/main/groovy/org/elasticsearch/gradle/precommit/PrecommitTasks.groovy

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
*/
1919
package org.elasticsearch.gradle.precommit
2020

21+
import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin
2122
import org.elasticsearch.gradle.ExportElasticsearchBuildResourcesTask
2223
import org.gradle.api.Project
2324
import org.gradle.api.Task
@@ -87,6 +88,11 @@ class PrecommitTasks {
8788
private static Task configureJarHell(Project project) {
8889
Task task = project.tasks.create('jarHell', JarHellTask.class)
8990
task.classpath = project.sourceSets.test.runtimeClasspath
91+
if (project.plugins.hasPlugin(ShadowPlugin)) {
92+
task.classpath += project.configurations.bundle
93+
}
94+
task.dependsOn(project.sourceSets.test.classesTaskName)
95+
task.javaHome = project.runtimeJavaHome
9096
return task
9197
}
9298

@@ -205,22 +211,20 @@ class PrecommitTasks {
205211

206212
private static Task configureNamingConventions(Project project) {
207213
if (project.sourceSets.findByName("test")) {
208-
return project.tasks.create('namingConventions', NamingConventionsTask)
214+
Task namingConventionsTask = project.tasks.create('namingConventions', NamingConventionsTask)
215+
namingConventionsTask.javaHome = project.runtimeJavaHome
216+
return namingConventionsTask
209217
}
210218
return null
211219
}
212220

213221
private static Task configureLoggerUsage(Project project) {
214-
Task loggerUsageTask = project.tasks.create('loggerUsageCheck', LoggerUsageTask.class)
215-
216222
project.configurations.create('loggerUsagePlugin')
217223
project.dependencies.add('loggerUsagePlugin',
218224
"org.elasticsearch.test:logger-usage:${org.elasticsearch.gradle.VersionProperties.elasticsearch}")
219-
220-
loggerUsageTask.configure {
225+
return project.tasks.create('loggerUsageCheck', LoggerUsageTask.class) {
221226
classpath = project.configurations.loggerUsagePlugin
227+
javaHome = project.runtimeJavaHome
222228
}
223-
224-
return loggerUsageTask
225229
}
226230
}

buildSrc/src/main/java/org/elasticsearch/gradle/LoggedExec.java

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
package org.elasticsearch.gradle;
22

3+
import org.gradle.api.Action;
34
import org.gradle.api.GradleException;
5+
import org.gradle.api.Project;
46
import org.gradle.api.tasks.Exec;
7+
import org.gradle.process.BaseExecSpec;
8+
import org.gradle.process.ExecResult;
9+
import org.gradle.process.ExecSpec;
10+
import org.gradle.process.JavaExecSpec;
511

612
import java.io.ByteArrayOutputStream;
713
import java.io.UnsupportedEncodingException;
14+
import java.util.function.Function;
815

916
/**
1017
* A wrapper around gradle's Exec task to capture output and log on error.
1118
*/
1219
@SuppressWarnings("unchecked")
1320
public class LoggedExec extends Exec {
1421

15-
protected ByteArrayOutputStream output = new ByteArrayOutputStream();
16-
1722
public LoggedExec() {
23+
ByteArrayOutputStream output = new ByteArrayOutputStream();
1824
if (getLogger().isInfoEnabled() == false) {
1925
setStandardOutput(output);
2026
setErrorOutput(output);
@@ -41,4 +47,39 @@ public LoggedExec() {
4147
);
4248
}
4349
}
50+
51+
public static ExecResult exec(Project project, Action<ExecSpec> action) {
52+
return genericExec(project, project::exec, action);
53+
}
54+
55+
public static ExecResult javaexec(Project project, Action<JavaExecSpec> action) {
56+
return genericExec(project, project::javaexec, action);
57+
}
58+
59+
private static <T extends BaseExecSpec> ExecResult genericExec(
60+
Project project,
61+
Function<Action<T>,ExecResult> function,
62+
Action<T> action
63+
) {
64+
if (project.getLogger().isInfoEnabled()) {
65+
return function.apply(action);
66+
}
67+
ByteArrayOutputStream output = new ByteArrayOutputStream();
68+
try {
69+
return function.apply(spec -> {
70+
spec.setStandardOutput(output);
71+
spec.setErrorOutput(output);
72+
action.execute(spec);
73+
});
74+
} catch (Exception e) {
75+
try {
76+
for (String line : output.toString("UTF-8").split("\\R")) {
77+
project.getLogger().error(line);
78+
}
79+
} catch (UnsupportedEncodingException ue) {
80+
throw new GradleException("Failed to read exec output", ue);
81+
}
82+
throw e;
83+
}
84+
}
4485
}

buildSrc/src/main/java/org/elasticsearch/gradle/precommit/ForbiddenApisCliTask.java

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,30 +18,26 @@
1818
*/
1919
package org.elasticsearch.gradle.precommit;
2020

21-
import org.gradle.api.DefaultTask;
21+
import org.elasticsearch.gradle.LoggedExec;
2222
import org.gradle.api.JavaVersion;
2323
import org.gradle.api.artifacts.Configuration;
2424
import org.gradle.api.file.FileCollection;
2525
import org.gradle.api.logging.Logger;
2626
import org.gradle.api.logging.Logging;
2727
import org.gradle.api.tasks.Input;
2828
import org.gradle.api.tasks.InputFiles;
29-
import org.gradle.api.tasks.OutputFile;
3029
import org.gradle.api.tasks.SkipWhenEmpty;
3130
import org.gradle.api.tasks.SourceSet;
3231
import org.gradle.api.tasks.TaskAction;
3332
import org.gradle.process.JavaExecSpec;
3433

3534
import java.io.File;
36-
import java.io.IOException;
37-
import java.nio.file.Files;
3835
import java.util.ArrayList;
39-
import java.util.Collections;
4036
import java.util.LinkedHashSet;
4137
import java.util.List;
4238
import java.util.Set;
4339

44-
public class ForbiddenApisCliTask extends DefaultTask {
40+
public class ForbiddenApisCliTask extends PrecommitTask {
4541

4642
private final Logger logger = Logging.getLogger(ForbiddenApisCliTask.class);
4743
private FileCollection signaturesFiles;
@@ -71,14 +67,6 @@ public void setTargetCompatibility(JavaVersion targetCompatibility) {
7167
}
7268
}
7369

74-
@OutputFile
75-
public File getMarkerFile() {
76-
return new File(
77-
new File(getProject().getBuildDir(), "precommit"),
78-
getName()
79-
);
80-
}
81-
8270
@InputFiles
8371
@SkipWhenEmpty
8472
public FileCollection getClassesDirs() {
@@ -152,8 +140,8 @@ public void setJavaHome(Object javaHome) {
152140
}
153141

154142
@TaskAction
155-
public void runForbiddenApisAndWriteMarker() throws IOException {
156-
getProject().javaexec((JavaExecSpec spec) -> {
143+
public void runForbiddenApisAndWriteMarker() {
144+
LoggedExec.javaexec(getProject(), (JavaExecSpec spec) -> {
157145
spec.classpath(
158146
getForbiddenAPIsConfiguration(),
159147
getClassPathFromSourceSet()
@@ -184,7 +172,6 @@ public void runForbiddenApisAndWriteMarker() throws IOException {
184172
spec.args("-d", dir)
185173
);
186174
});
187-
Files.write(getMarkerFile().toPath(), Collections.emptyList());
188175
}
189176

190177
}

0 commit comments

Comments
 (0)