From 427fa8ffc81310451c4da6d64a85229050ba2d3b Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Mon, 15 Jun 2026 12:46:18 +0200 Subject: [PATCH 1/2] feat: read latest maven version from workflow artifacts --- .../update-smoke-test-latest-versions.yaml | 12 +++- .../maven3/MavenUtilsTest.java | 61 +++++++------------ .../resources/latest-tool-versions.properties | 3 + 3 files changed, 36 insertions(+), 40 deletions(-) create mode 100644 dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties diff --git a/.github/workflows/update-smoke-test-latest-versions.yaml b/.github/workflows/update-smoke-test-latest-versions.yaml index 197a6bc5285..f1ba7de7415 100644 --- a/.github/workflows/update-smoke-test-latest-versions.yaml +++ b/.github/workflows/update-smoke-test-latest-versions.yaml @@ -110,6 +110,12 @@ jobs: "maven-surefire.latest=${SUREFIRE_VERSION}" \ > dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties + printf '%s\n' \ + "# Pinned latest eligible stable version (>=${MIN_DEPENDENCY_AGE_HOURS}h old) for the Maven instrumentation latestDepTest." \ + "# Updated automatically by the update-smoke-test-latest-versions workflow." \ + "maven-surefire.latest=${SUREFIRE_VERSION}" \ + > dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties + - name: Check for changes id: check-changes run: | @@ -135,7 +141,8 @@ jobs: if: steps.check-changes.outputs.has_changes == 'true' run: | git add dd-smoke-tests/gradle/src/test/resources/latest-tool-versions.properties \ - dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties + dd-smoke-tests/maven/src/test/resources/latest-tool-versions.properties \ + dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties git commit -m "chore: Update smoke test latest tool versions" - name: Push changes @@ -161,7 +168,8 @@ jobs: --body "$(cat <<'EOF' # What Does This Do - This PR updates the pinned latest eligible stable tool versions used by CI Visibility smoke tests. + This PR updates the pinned latest eligible stable tool versions used by CI Visibility smoke tests + and by the Maven instrumentation latestDepTest. Only releases at least ${{ env.MIN_DEPENDENCY_AGE_HOURS }} hours old are eligible. - Gradle: ${{ steps.update.outputs.gradle_line }} diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java index f80ff4ab7e1..982d628bc09 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java @@ -15,18 +15,15 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStream; import java.net.URISyntaxException; import java.nio.file.Path; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.stream.Stream; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; import org.apache.maven.artifact.versioning.ComparableVersion; import org.apache.maven.execution.ExecutionEvent; import org.apache.maven.execution.MavenSession; @@ -38,8 +35,6 @@ import org.junit.jupiter.params.provider.MethodSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.w3c.dom.Document; -import org.w3c.dom.NodeList; public class MavenUtilsTest extends AbstractMavenTest { @@ -481,38 +476,28 @@ private boolean assertGetContainer(ExecutionEvent executionEvent) { } private static String getLatestMavenSurefireVersion() { - OkHttpClient client = new OkHttpClient(); - Request request = - new Request.Builder() - .url( - "https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-surefire-plugin/maven-metadata.xml") - .build(); - try (Response response = client.newCall(request).execute()) { - if (response.isSuccessful()) { - DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); - DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); - Document doc = dBuilder.parse(response.body().byteStream()); - doc.getDocumentElement().normalize(); - - NodeList versionList = doc.getElementsByTagName("latest"); - if (versionList.getLength() > 0) { - String version = versionList.item(0).getTextContent(); - if (!version.contains("alpha") && !version.contains("beta")) { - LOGGER.info("Will run the 'latest' tests with version {}", version); - return version; - } - } - } else { - LOGGER.warn( - "Could not get latest Maven Surefire version, response from repo.maven.apache.org is {}:{}", - response.code(), - response.body().string()); + // Pinned outside of runtime (resolved against Maven Central) so a newly published Surefire + // release cannot break this test on unrelated PRs. The pinned value is bumped on a schedule by + // the update-smoke-test-latest-versions workflow. See latest-tool-versions.properties. + String version = loadLatestToolVersions().getProperty("maven-surefire.latest"); + LOGGER.info("Will run the 'latest' tests with Maven Surefire version {}", version); + return version; + } + + private static Properties loadLatestToolVersions() { + Properties properties = new Properties(); + try (InputStream stream = + MavenUtilsTest.class + .getClassLoader() + .getResourceAsStream("latest-tool-versions.properties")) { + if (stream == null) { + throw new IllegalStateException( + "Could not find latest-tool-versions.properties on classpath"); } - } catch (Exception e) { - LOGGER.warn("Could not get latest Maven Surefire version", e); + properties.load(stream); + } catch (IOException e) { + throw new RuntimeException(e); } - String hardcodedLatestVersion = "3.5.0"; // latest version that is known to work - LOGGER.info("Will run the 'latest' tests with hard-coded version {}", hardcodedLatestVersion); - return hardcodedLatestVersion; + return properties; } } diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties new file mode 100644 index 00000000000..c860212dbea --- /dev/null +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/resources/latest-tool-versions.properties @@ -0,0 +1,3 @@ +# Pinned latest eligible stable version (>=48h old) for the Maven instrumentation latestDepTest. +# Updated automatically by the update-smoke-test-latest-versions workflow. +maven-surefire.latest=3.5.5 From 32c4f97ab2d3ba3a87f22307d25408a50c18235c Mon Sep 17 00:00:00 2001 From: Daniel Mohedano Date: Tue, 16 Jun 2026 10:33:53 +0200 Subject: [PATCH 2/2] nit: comment --- .../datadog/trace/instrumentation/maven3/MavenUtilsTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java index 982d628bc09..6d7fad46e8a 100644 --- a/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java +++ b/dd-java-agent/instrumentation/maven/maven-3.2.1/src/test/java/datadog/trace/instrumentation/maven3/MavenUtilsTest.java @@ -476,9 +476,8 @@ private boolean assertGetContainer(ExecutionEvent executionEvent) { } private static String getLatestMavenSurefireVersion() { - // Pinned outside of runtime (resolved against Maven Central) so a newly published Surefire - // release cannot break this test on unrelated PRs. The pinned value is bumped on a schedule by - // the update-smoke-test-latest-versions workflow. See latest-tool-versions.properties. + // The pinned value is bumped on a schedule by the update-smoke-test-latest-versions workflow. + // See latest-tool-versions.properties. String version = loadLatestToolVersions().getProperty("maven-surefire.latest"); LOGGER.info("Will run the 'latest' tests with Maven Surefire version {}", version); return version;