Skip to content

Commit abb4997

Browse files
move dependency downloads to build task
1 parent e3af0a8 commit abb4997

File tree

2 files changed

+57
-10
lines changed

2 files changed

+57
-10
lines changed

dd-smoke-tests/maven/build.gradle

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,67 @@ jar {
2020
}
2121
}
2222

23+
// Pre-cache Maven dependencies for smoke tests projects during build phase
24+
tasks.register('mvnBuild') {
25+
description = 'Pre-cache Maven dependencies for all test projects'
26+
27+
inputs.files fileTree("$projectDir/src/test/resources") {
28+
include "**/pom.xml"
29+
include "**/settings.xml"
30+
}
31+
outputs.dir "$projectDir/.gradle/maven-dependencies-cache"
32+
33+
doLast {
34+
file("$projectDir/.gradle/maven-dependencies-cache").mkdirs()
35+
36+
def pomFiles = fileTree("$projectDir/src/test/resources") {
37+
include "**/pom.xml"
38+
}
39+
40+
def processedProjects = [] as Set
41+
42+
pomFiles.each { pomFile ->
43+
def projectDir = pomFile.parentFile
44+
def projectKey = projectDir.name
45+
46+
if (!processedProjects.contains(projectKey)) {
47+
processedProjects.add(projectKey)
48+
49+
logger.info("Pre-caching dependencies for Maven project: ${projectKey}")
50+
51+
def processBuilder = new ProcessBuilder()
52+
processBuilder.directory(projectDir)
53+
processBuilder.command("$rootDir/mvnw", "dependency:go-offline", "-B")
54+
55+
// Handle proxy configuration if available
56+
if (project.hasProperty("mavenRepositoryProxy")) {
57+
processBuilder.environment().put("MAVEN_REPOSITORY_PROXY", project.property("mavenRepositoryProxy"))
58+
}
59+
60+
def process = processBuilder.start()
61+
def exitCode = process.waitFor()
62+
63+
if (exitCode != 0) {
64+
logger.warn("Failed to cache dependencies for project ${projectKey}, exit code: ${exitCode}")
65+
} else {
66+
logger.info("Successfully cached dependencies for project: ${projectKey}")
67+
}
68+
}
69+
}
70+
}
71+
}
72+
73+
tasks.named("compileTestGroovy").configure {
74+
dependsOn 'mvnBuild'
75+
}
76+
2377
tasks.withType(Test).configureEach {
2478
dependsOn "shadowJar"
2579
jvmArgs "-Ddatadog.smoketest.maven.jar.path=${tasks.shadowJar.archiveFile.get()}"
2680

2781
// overriding the default timeout set in configure_tests.gradle, as Maven smoke
2882
// tests might run for a longer duration
29-
timeout = Duration.of(20, ChronoUnit.MINUTES)
83+
timeout = Duration.of(15, ChronoUnit.MINUTES)
3084

3185
if (project.hasProperty("mavenRepositoryProxy")) {
3286
// propagate proxy URL to tests, to then propagate it to nested Gradle builds

dd-smoke-tests/maven/src/test/groovy/datadog/smoketest/MavenSmokeTest.groovy

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -270,17 +270,10 @@ class MavenSmokeTest extends CiVisibilitySmokeTest {
270270
}
271271

272272
/**
273-
* Sometimes Maven has problems downloading project dependencies because of intermittent network issues.
274-
* Here, in order to reduce flakiness, we ensure that all of the dependencies are loaded (retrying if necessary),
275-
* before proceeding with running the build
273+
* Dependencies are now pre-cached during the Gradle build phase via the mvnBuild task.
274+
* This method still handles runtime-specific dependencies that are added by the tracer.
276275
*/
277276
private void givenMavenDependenciesAreLoaded(String projectName, String mavenVersion, Map<String, String> additionalEnvVars = [:]) {
278-
if (LOADED_DEPENDENCIES.add("$projectName:$mavenVersion")) {
279-
retryUntilSuccessfulOrNoAttemptsLeft(["dependency:go-offline"], additionalEnvVars)
280-
}
281-
// dependencies below are download separately
282-
// because they are not declared in the project,
283-
// but are added at runtime by the tracer
284277
if (LOADED_DEPENDENCIES.add("com.datadoghq:dd-javac-plugin:$JAVAC_PLUGIN_VERSION")) {
285278
retryUntilSuccessfulOrNoAttemptsLeft(["dependency:get", "-Dartifact=com.datadoghq:dd-javac-plugin:$JAVAC_PLUGIN_VERSION".toString()], additionalEnvVars)
286279
}

0 commit comments

Comments
 (0)