|
1 | 1 | package com.gradle;
|
2 | 2 |
|
3 |
| -import com.gradle.maven.extension.api.GradleEnterpriseApi; |
4 |
| -import com.gradle.maven.extension.api.GradleEnterpriseListener; |
5 |
| -import com.gradle.maven.extension.api.scan.BuildScanApi; |
| 3 | +import com.gradle.develocity.agent.maven.adapters.enterprise.GradleEnterpriseApiAdapter; |
6 | 4 | import org.apache.maven.execution.MavenSession;
|
7 |
| -import org.codehaus.plexus.logging.Logger; |
8 | 5 |
|
9 | 6 | import javax.inject.Inject;
|
10 |
| -import java.io.File; |
11 |
| -import java.io.IOException; |
12 |
| -import java.io.UnsupportedEncodingException; |
13 |
| -import java.net.URI; |
14 |
| -import java.net.URLEncoder; |
15 |
| -import java.nio.charset.StandardCharsets; |
16 |
| -import java.nio.file.Files; |
17 | 7 |
|
18 |
| -import static java.lang.Boolean.parseBoolean; |
19 |
| -import static java.nio.file.StandardOpenOption.*; |
| 8 | +// Using fully qualified class names to avoid deprecation warnings on import statements |
| 9 | +@SuppressWarnings({"deprecation"}) |
| 10 | +public class ConfigureGradleEnterprise implements com.gradle.maven.extension.api.GradleEnterpriseListener { |
20 | 11 |
|
21 |
| -@SuppressWarnings("unused") |
22 |
| -public class ConfigureGradleEnterprise implements GradleEnterpriseListener { |
23 |
| - |
24 |
| - private static final String EXPERIMENT_DIR = System.getProperty("com.gradle.enterprise.build-validation.expDir"); |
25 |
| - |
26 |
| - private final RootProjectExtractor rootProjectExtractor; |
27 |
| - private final Logger logger; |
| 12 | + private final ConfigureDevelocityAdaptor configureDevelocityAdaptor; |
28 | 13 |
|
29 | 14 | @Inject
|
30 |
| - public ConfigureGradleEnterprise(RootProjectExtractor rootProjectExtractor, Logger logger) { |
31 |
| - this.rootProjectExtractor = rootProjectExtractor; |
32 |
| - this.logger = logger; |
| 15 | + public ConfigureGradleEnterprise(ConfigureDevelocityAdaptor configureDevelocityAdaptor) { |
| 16 | + this.configureDevelocityAdaptor = configureDevelocityAdaptor; |
33 | 17 | }
|
34 | 18 |
|
35 | 19 | @Override
|
36 |
| - public void configure(GradleEnterpriseApi api, MavenSession session) { |
37 |
| - logger.debug("Configuring build scan published event..."); |
38 |
| - |
39 |
| - BuildScanApi buildScan = api.getBuildScan(); |
40 |
| - |
41 |
| - String geUrl = System.getProperty("gradle.enterprise.url"); |
42 |
| - String geAllowUntrustedServer = System.getProperty("gradle.enterprise.allowUntrustedServer"); |
43 |
| - |
44 |
| - if (geUrl != null && !geUrl.isEmpty()) { |
45 |
| - buildScan.setServer(geUrl); |
46 |
| - } |
47 |
| - if (geAllowUntrustedServer != null && !geAllowUntrustedServer.isEmpty()) { |
48 |
| - buildScan.setAllowUntrustedServer(Boolean.parseBoolean(geAllowUntrustedServer)); |
49 |
| - } |
50 |
| - |
51 |
| - String rootProjectName = rootProjectExtractor.extractRootProject(session).getName(); |
52 |
| - |
53 |
| - registerBuildScanActions(buildScan, rootProjectName); |
54 |
| - configureBuildScanPublishing(buildScan); |
| 20 | + public void configure(com.gradle.maven.extension.api.GradleEnterpriseApi api, MavenSession session) { |
| 21 | + configureDevelocityAdaptor.configure(new GradleEnterpriseApiAdapter(api), session); |
55 | 22 | }
|
56 |
| - |
57 |
| - private static void registerBuildScanActions(BuildScanApi buildScan, String rootProjectName) { |
58 |
| - buildScan.buildFinished(buildResult -> { |
59 |
| - // communicate via error file that no GE server is set |
60 |
| - boolean omitServerUrlValidation = parseBoolean(System.getProperty("com.gradle.enterprise.build-validation.omitServerUrlValidation")); |
61 |
| - if (buildScan.getServer() == null && !omitServerUrlValidation) { |
62 |
| - buildScan.publishAlwaysIf(false); // disable publishing, otherwise scans.gradle.com will be used |
63 |
| - File errorFile = new File(EXPERIMENT_DIR, "errors.txt"); |
64 |
| - append(errorFile, "The Gradle Enterprise server URL has not been configured in the project or on the command line."); |
65 |
| - } |
66 |
| - }); |
67 |
| - |
68 |
| - buildScan.buildFinished(buildResult -> { |
69 |
| - String expId = System.getProperty("com.gradle.enterprise.build-validation.expId"); |
70 |
| - addCustomValueAndSearchLink(buildScan, "Experiment id", expId); |
71 |
| - buildScan.tag(expId); |
72 |
| - |
73 |
| - String runId = System.getProperty("com.gradle.enterprise.build-validation.runId"); |
74 |
| - addCustomValueAndSearchLink(buildScan, "Experiment run id", runId); |
75 |
| - |
76 |
| - String scriptsVersion = System.getProperty("com.gradle.enterprise.build-validation.scriptsVersion"); |
77 |
| - buildScan.value("Build validation scripts", scriptsVersion); |
78 |
| - }); |
79 |
| - |
80 |
| - buildScan.buildScanPublished(scan -> { |
81 |
| - String runNum = System.getProperty("com.gradle.enterprise.build-validation.runNum"); |
82 |
| - URI buildScanUri = scan.getBuildScanUri(); |
83 |
| - String buildScanId = scan.getBuildScanId(); |
84 |
| - String port = buildScanUri.getPort() != -1 ? ":" + buildScanUri.getPort() : ""; |
85 |
| - String baseUrl = String.format("%s://%s%s", buildScanUri.getScheme(), buildScanUri.getHost(), port); |
86 |
| - |
87 |
| - File scanFile = new File(EXPERIMENT_DIR, "build-scans.csv"); |
88 |
| - append(scanFile, String.format("%s,%s,%s,%s,%s\n", runNum, rootProjectName, baseUrl, buildScanUri, buildScanId)); |
89 |
| - }); |
90 |
| - } |
91 |
| - |
92 |
| - private static void configureBuildScanPublishing(BuildScanApi buildScan) { |
93 |
| - buildScan.publishAlways(); |
94 |
| - buildScan.capture(t -> t.setGoalInputFiles(true)); // also set via sys prop |
95 |
| - buildScan.setUploadInBackground(false); |
96 |
| - } |
97 |
| - |
98 |
| - private static void addCustomValueAndSearchLink(BuildScanApi buildScan, String label, String value) { |
99 |
| - buildScan.value(label, value); |
100 |
| - if (buildScan.getServer() != null) { |
101 |
| - String server = buildScan.getServer(); |
102 |
| - String searchParams = "search.names=" + urlEncode(label) + "&search.values=" + urlEncode(value); |
103 |
| - String url = appendIfMissing(server, "/") + "scans?" + searchParams + "#selection.buildScanB=" + urlEncode("{SCAN_ID}"); |
104 |
| - buildScan.link(label + " build scans", url); |
105 |
| - } |
106 |
| - } |
107 |
| - |
108 |
| - private static String appendIfMissing(String str, String suffix) { |
109 |
| - return str.endsWith(suffix) ? str : str + suffix; |
110 |
| - } |
111 |
| - |
112 |
| - private static String urlEncode(String str) { |
113 |
| - try { |
114 |
| - return URLEncoder.encode(str, StandardCharsets.UTF_8.name()); |
115 |
| - } catch (UnsupportedEncodingException e) { |
116 |
| - throw new RuntimeException(e); |
117 |
| - } |
118 |
| - } |
119 |
| - |
120 |
| - private static void append(File file, String text) { |
121 |
| - try { |
122 |
| - Files.write(file.toPath(), text.getBytes(), CREATE, WRITE, APPEND); |
123 |
| - } catch (IOException e) { |
124 |
| - throw new RuntimeException(String.format("Unable to write to file %s: %s", file.getName(), e.getMessage()), e); |
125 |
| - } |
126 |
| - } |
127 |
| - |
128 | 23 | }
|
0 commit comments