Skip to content

Commit

Permalink
Download Maven extensions instead of bundling them (#476)
Browse files Browse the repository at this point in the history
* Download Maven extensions instead of bundling them

* Set extension versions properly in test

* Fix Gradle Enterprise extension selection

* Fix acceptance tests

* Revert back the maven version for test

* Revert README change for a separate pull request
  • Loading branch information
welandaz authored and alextu committed Sep 25, 2024
1 parent d0d418f commit 45ab61f
Show file tree
Hide file tree
Showing 28 changed files with 238 additions and 219 deletions.
1 change: 1 addition & 0 deletions README.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -536,3 +536,4 @@ From Gradle 0.5, the window launcher is a .bat file that conserves the correct E
=== Release 1.0 (October 04, 2008)

* Initial release

Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ public class BuildScansInjectionSettings extends JenkinsConfig {

private static final String SERVER_FIELD = "server";
private static final String BUILD_SCAN_SERVER_FIELD = "buildScanServer";
private static final String GE_PLUGIN_VERSION_FIELD = "gradlePluginVersion";
private static final String DEVELOCITY_PLUGIN_VERSION_FIELD = "gradlePluginVersion";
private static final String DEVELOCITY_EXTENSION_VERSION_FIELD = "mavenExtensionVersion";
private static final String GIT_REPOSITORY_FILTERS_FIELD = "vcsRepositoryFilter";
private static final String GE_ACCESS_KEY_FIELD = "accessKey";
private static final String GE_GRADLE_PLUGIN_REPOSITORY_PASSWORD_FIELD = "gradlePluginRepositoryPassword";
private static final String DEVELOCITY_ACCESS_KEY_FIELD = "accessKey";
private static final String DEVELOCITY_GRADLE_PLUGIN_REPOSITORY_PASSWORD_FIELD = "gradlePluginRepositoryPassword";

public BuildScansInjectionSettings(Jenkins jenkins) {
super(jenkins);
Expand All @@ -36,7 +37,7 @@ public void clickBuildScansInjection() {
clickCheckboxOnConfig("Enable auto-injection");
}

public void setGradleEnterpriseServerUrl(URI server) {
public void setDevelocityServerUrl(URI server) {
setBuildScansInjectionFormValue(SERVER_FIELD, server.toString());
}

Expand All @@ -53,15 +54,15 @@ public void clickCheckForGradleEnterpriseErrors() {
}

public void setGradleEnterpriseAccessKey(String accessKey) {
setBuildScansInjectionFormValue(GE_ACCESS_KEY_FIELD, accessKey);
setBuildScansInjectionFormValue(DEVELOCITY_ACCESS_KEY_FIELD, accessKey);
}

public void setGradleEnterpriseGradlePluginRepoPassword(String password) {
setBuildScansInjectionFormValue(GE_GRADLE_PLUGIN_REPOSITORY_PASSWORD_FIELD, password);
setBuildScansInjectionFormValue(DEVELOCITY_GRADLE_PLUGIN_REPOSITORY_PASSWORD_FIELD, password);
}

public void setGradleEnterprisePluginVersion(String version) {
setBuildScansInjectionFormValue(GE_PLUGIN_VERSION_FIELD, version);
setBuildScansInjectionFormValue(DEVELOCITY_PLUGIN_VERSION_FIELD, version);
}

public void setGitRepositoryFilters(String filters) {
Expand All @@ -72,8 +73,8 @@ public String getGitRepositoryFilters() {
return getBuildScansInjectionFormValue(GIT_REPOSITORY_FILTERS_FIELD);
}

public void clickInjectMavenExtension() {
clickCheckboxOnConfig("Enable Develocity Maven extension auto-injection");
public void setDevelocityMavenExtensionVersion(String version) {
setBuildScansInjectionFormValue(DEVELOCITY_EXTENSION_VERSION_FIELD, version);
}

private void setBuildScansInjectionFormValue(String field, String value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,9 @@
@WithPlugins("gradle")
public abstract class AbstractAcceptanceTest extends AbstractJUnitTest {

protected static final URI PUBLIC_GE_SERVER = URI.create("https://scans.gradle.com");
protected static final URI PUBLIC_DEVELOCITY_SERVER = URI.create("https://scans.gradle.com");

private static final String DEVELOCITY_MAVEN_EXTENSION_VERSION = "1.22";

@Rule
public MockGeServer mockGeServer = new MockGeServer();
Expand Down Expand Up @@ -75,7 +77,7 @@ protected final void enableEnrichedBuildScansWithServerOverride(URI server) {
protected final void enableBuildScansForGradle(URI server, String agentVersion) {
updateBuildScansInjectionSettings(settings -> {
settings.clickBuildScansInjection();
settings.setGradleEnterpriseServerUrl(server);
settings.setDevelocityServerUrl(server);
settings.setGradleEnterprisePluginVersion(agentVersion);
settings.setGradleEnterpriseAccessKey(String.format("%s=secret", server.getHost()));
});
Expand Down Expand Up @@ -109,8 +111,8 @@ protected final String getGitRepositoryFilters() {
protected final void enableBuildScansForMaven() {
updateBuildScansInjectionSettings(settings -> {
settings.clickBuildScansInjection();
settings.setGradleEnterpriseServerUrl(PUBLIC_GE_SERVER);
settings.clickInjectMavenExtension();
settings.setDevelocityServerUrl(PUBLIC_DEVELOCITY_SERVER);
settings.setDevelocityMavenExtensionVersion(DEVELOCITY_MAVEN_EXTENSION_VERSION);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ public void setEnforceUrlPublishesBuildScan() throws Exception {

job.copyResource(resource("/simple_gradle_project/build.gradle"), "build.gradle");
// gradle settings pointing to scans.gradle.com
job.copyResource(settingsWithGradleEnterprise(expectedAgentVersion, PUBLIC_GE_SERVER.toString()), "settings.gradle");
job.copyResource(settingsWithGradleEnterprise(expectedAgentVersion, PUBLIC_DEVELOCITY_SERVER.toString()), "settings.gradle");
GradleStep gradle = job.addBuildStep(GradleStep.class);
gradle.setVersion(GRADLE_VERSION);
gradle.setSwitches("--no-daemon");
Expand Down
48 changes: 1 addition & 47 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ val coreBomVersion = "1500.ve4d05cd32975"

val gradleExt = (gradle as ExtensionAware).extra

val develocityMavenExtensionVersion: String by gradleExt
val commonCustomUserDataMavenExtensionVersion: String by gradleExt
val ciJenkinsBuild: Boolean by gradleExt
val isCi: Boolean by gradleExt

Expand Down Expand Up @@ -118,8 +116,6 @@ dependencies {

implementation("com.squareup.okhttp3:okhttp:4.12.0")

add(includedLibs.name, "com.gradle:develocity-maven-extension:${develocityMavenExtensionVersion}")
add(includedLibs.name, "com.gradle:common-custom-user-data-maven-extension:${commonCustomUserDataMavenExtensionVersion}")
add(includedLibs.name, project(path = ":configuration-maven-extension", configuration = "mvnExtension"))

signature("org.codehaus.mojo.signature:java18:1.0@signature")
Expand Down Expand Up @@ -267,41 +263,8 @@ val localizeMessages: Task by tasks.getting(LocalizationTask::class) {
outputDir.set(layout.buildDirectory.file("generated/sources/localizeMessages/java/main").map { it.asFile })
}

val generateExtensionsVersions: Task by tasks.creating {
inputs.property("develocityMavenExtensionVersion", develocityMavenExtensionVersion)
inputs.property("commonCustomUserDataMavenExtensionVersion", commonCustomUserDataMavenExtensionVersion)

val srcDir = layout.buildDirectory.file("generated/sources/extensionsVersions/java/main")
outputs
.dir(srcDir)
.withPropertyName("extensionsVersions")

doLast {
val packages = File(srcDir.get().asFile, "hudson/plugins/gradle/injection")
if (!packages.exists()) {
packages.mkdirs()
}

val file = File(packages, "ExtensionsVersions.java")
file.writeText(
"""
package hudson.plugins.gradle.injection;
public final class ExtensionsVersions {
public static final String DEVELOCITY_EXTENSION_VERSION = "$develocityMavenExtensionVersion";
public static final String CCUD_EXTENSION_VERSION = "$commonCustomUserDataMavenExtensionVersion";
private ExtensionsVersions() {
}
}
""".trimIndent()
)
}
}

sourceSets.main {
java.srcDirs(localizeMessages, generateExtensionsVersions)
java.srcDirs(localizeMessages)
}

val createWrapperZip by tasks.creating(Zip::class) {
Expand All @@ -322,15 +285,6 @@ tasks.processTestResources {
}
}

tasks.processResources {
filesMatching("hudson/plugins/gradle/injection/InjectionConfig/help-injectMavenExtension.html") {
expand("develocityMavenExtensionVersion" to develocityMavenExtensionVersion)
}
filesMatching("hudson/plugins/gradle/injection/InjectionConfig/help-injectCcudExtension.html") {
expand("commonCustomUserDataMavenExtensionVersion" to commonCustomUserDataMavenExtensionVersion)
}
}

tasks.jar {
from(includedLibs) {
into("hudson/plugins/gradle/injection")
Expand Down
4 changes: 1 addition & 3 deletions configuration-maven-extension/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ group = "com.gradle"
description = "Maven extension to configure injected Gradle Enterprise Maven extension"
version = "1.0.0"

val develocityMavenExtensionVersion: String by (gradle as ExtensionAware).extra

repositories {
mavenCentral()
}
Expand All @@ -23,7 +21,7 @@ val mvnExtension: Configuration by configurations.creating { isCanBeConsumed = t

dependencies {
compileOnly("org.apache.maven:maven-core:3.8.7")
compileOnly("com.gradle:develocity-maven-extension:${develocityMavenExtensionVersion}")
compileOnly("com.gradle:develocity-maven-extension:1.22")
}

val jar by tasks.getting(Jar::class)
Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
6 changes: 3 additions & 3 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
zipStorePath=wrapper/dists
2 changes: 0 additions & 2 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,6 @@ val gradleExt = (gradle as ExtensionAware).extra
val ciJenkinsBuild by gradleExt { System.getenv("JENKINS_URL") != null }
val ciTeamCityBuild by gradleExt { System.getenv("TEAMCITY_VERSION") != null }
val isCi by gradleExt { ciJenkinsBuild || ciTeamCityBuild }
val develocityMavenExtensionVersion by gradleExt { "1.22" }
val commonCustomUserDataMavenExtensionVersion by gradleExt { "2.0" }

develocity {
projectId = "jenkinsci-gradle-plugin"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ private static boolean shouldDisableGradleInjection(InjectionConfig config) {
}

private static boolean shouldDisableMavenInjection(InjectionConfig config) {
return config.isInjectMavenExtension();
return InjectionUtil.isValid(InjectionConfig.checkRequiredVersion(config.getMavenExtensionVersion()));
}

/**
Expand Down
20 changes: 10 additions & 10 deletions src/main/java/hudson/plugins/gradle/injection/InjectionConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,8 @@ public class InjectionConfig extends GlobalConfiguration {
private ImmutableList<NodeLabelItem> gradleInjectionDisabledNodes;
private Boolean gradleCaptureTaskInputFiles;

private boolean injectMavenExtension;
private boolean injectCcudExtension;
private String mavenExtensionVersion;
private String ccudExtensionVersion;
private String mavenExtensionCustomCoordinates;
private String ccudExtensionCustomCoordinates;
private ImmutableList<NodeLabelItem> mavenInjectionEnabledNodes;
Expand Down Expand Up @@ -251,13 +251,13 @@ public void setGradleCaptureTaskInputFiles(Boolean gradleCaptureTaskInputFiles)
this.gradleCaptureTaskInputFiles = gradleCaptureTaskInputFiles;
}

public boolean isInjectMavenExtension() {
return injectMavenExtension;
public String getMavenExtensionVersion() {
return mavenExtensionVersion;
}

@DataBoundSetter
public void setInjectMavenExtension(boolean injectMavenExtension) {
this.injectMavenExtension = injectMavenExtension;
public void setMavenExtensionVersion(String mavenExtensionVersion) {
this.mavenExtensionVersion = Util.fixEmptyAndTrim(mavenExtensionVersion);
}

@CheckForNull
Expand All @@ -280,13 +280,13 @@ public void setCcudExtensionCustomCoordinates(String ccudExtensionCustomCoordina
this.ccudExtensionCustomCoordinates = Util.fixEmptyAndTrim(ccudExtensionCustomCoordinates);
}

public boolean isInjectCcudExtension() {
return injectCcudExtension;
public String getCcudExtensionVersion() {
return ccudExtensionVersion;
}

@DataBoundSetter
public void setInjectCcudExtension(boolean injectCcudExtension) {
this.injectCcudExtension = injectCcudExtension;
public void setCcudExtensionVersion(String ccudExtensionVersion) {
this.ccudExtensionVersion = Util.fixEmptyAndTrim(ccudExtensionVersion);
}

@CheckForNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ public class MavenBuildScanInjection implements BuildScanInjection, MavenInjecti

// MAVEN_OPTS is handled separately
private static final List<String> ALL_INJECTED_ENVIRONMENT_VARIABLES =
Arrays.asList(
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_EXT_CLASSPATH,
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_SERVER_URL,
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_ALLOW_UNTRUSTED_SERVER,
JENKINSGRADLEPLUGIN_MAVEN_AUTO_INJECTION
);
Arrays.asList(
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_EXT_CLASSPATH,
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_SERVER_URL,
JENKINSGRADLEPLUGIN_MAVEN_PLUGIN_CONFIG_ALLOW_UNTRUSTED_SERVER,
JENKINSGRADLEPLUGIN_MAVEN_AUTO_INJECTION
);

private final MavenExtensionsHandler extensionsHandler = new MavenExtensionsHandler();

Expand Down Expand Up @@ -67,9 +67,12 @@ private void inject(InjectionConfig config, Node node, FilePath nodeRootPath) {
LOGGER.info("Injecting Maven extensions " + nodeRootPath);

List<FilePath> extensions = new ArrayList<>();
extensions.add(extensionsHandler.copyExtensionToAgent(MavenExtension.DEVELOCITY, nodeRootPath));
if (config.isInjectCcudExtension()) {
extensions.add(extensionsHandler.copyExtensionToAgent(MavenExtension.CCUD, nodeRootPath));
MavenExtension mavenExtension = MavenExtension.isDevelocityExtensionVersion(config.getMavenExtensionVersion())
? MavenExtension.DEVELOCITY
: MavenExtension.GRADLE_ENTERPRISE;
extensions.add(extensionsHandler.downloadExtensionToAgent(mavenExtension, config.getMavenExtensionVersion(), nodeRootPath));
if (InjectionUtil.isValid(InjectionConfig.checkRequiredVersion(config.getCcudExtensionVersion()))) {
extensions.add(extensionsHandler.downloadExtensionToAgent(MavenExtension.CCUD, config.getCcudExtensionVersion(), nodeRootPath));
} else {
extensionsHandler.deleteExtensionFromAgent(MavenExtension.CCUD, nodeRootPath);
}
Expand Down Expand Up @@ -121,5 +124,4 @@ private void cleanup(Node node, FilePath rootPath) {
}



}
79 changes: 37 additions & 42 deletions src/main/java/hudson/plugins/gradle/injection/MavenExtension.java
Original file line number Diff line number Diff line change
@@ -1,46 +1,41 @@
package hudson.plugins.gradle.injection;

public enum MavenExtension {
DEVELOCITY("develocity-maven-extension", ExtensionsVersions.DEVELOCITY_EXTENSION_VERSION, new MavenCoordinates("com.gradle", "develocity-maven-extension")),
GRADLE_ENTERPRISE("gradle-enterprise-maven-extension", "1.20.1", new MavenCoordinates("com.gradle", "gradle-enterprise-maven-extension"), false),
CCUD("common-custom-user-data-maven-extension", ExtensionsVersions.CCUD_EXTENSION_VERSION, new MavenCoordinates("com.gradle", "common-custom-user-data-maven-extension")),
CONFIGURATION("configuration-maven-extension", "1.0.0", new MavenCoordinates("com.gradle", "configuration-maven-extension"));

private static final String JAR_EXTENSION = ".jar";

private final String name;
private final String version;

private final MavenCoordinates coordinates;

private final boolean injectable;

MavenExtension(String name, String version, MavenCoordinates coordinates) {
this.name = name;
this.version = version;
this.coordinates = coordinates;
this.injectable = true;
}
MavenExtension(String name, String version, MavenCoordinates coordinates, boolean injectable) {
this.name = name;
this.version = version;
this.coordinates = coordinates;
this.injectable = injectable;
}

public String getTargetJarName() {
return name + JAR_EXTENSION;
}

public String getEmbeddedJarName() {
return name + "-" + version + JAR_EXTENSION;
}

public MavenCoordinates getCoordinates() {
return coordinates;
}

public boolean isInjectable() {
return injectable;
}
DEVELOCITY("develocity-maven-extension", new MavenCoordinates("com.gradle", "develocity-maven-extension")),
GRADLE_ENTERPRISE("gradle-enterprise-maven-extension", new MavenCoordinates("com.gradle", "gradle-enterprise-maven-extension")),
CCUD("common-custom-user-data-maven-extension", new MavenCoordinates("com.gradle", "common-custom-user-data-maven-extension")),
CONFIGURATION("configuration-maven-extension", new MavenCoordinates("com.gradle", "configuration-maven-extension"));

private static final String JAR_EXTENSION = ".jar";
private static final String LAST_GRADLE_ENTERPRISE_VERSION = "1.20.1";

private final MavenCoordinates coordinates;

private final String name;

MavenExtension(String name, MavenCoordinates coordinates) {
this.name = name;
this.coordinates = coordinates;
}

public String getTargetJarName() {
return name + JAR_EXTENSION;
}

// Only used for CONFIGURATION extension as the embedded JAR contains the version
public String getEmbeddedJarName() {
return name + "-1.0.0" + JAR_EXTENSION;
}

public MavenCoordinates getCoordinates() {
return coordinates;
}

public String getName() {
return name;
}

public static boolean isDevelocityExtensionVersion(String version) {
return version.compareTo(LAST_GRADLE_ENTERPRISE_VERSION) > 0;
}
}
Loading

0 comments on commit 45ab61f

Please sign in to comment.