From e8a70173a2e1947325f5589f9f82e32ffc48014c Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 28 Oct 2026 10:55:32 +0100 Subject: [PATCH 1/2] chore: apply builder image fingerprints in CI --- .gitlab-ci.yml | 2 ++ dd-java-agent/agent-ci-visibility/build.gradle | 1 + .../agent-profiling/profiling-controller-ddprof/build.gradle | 1 + dd-java-agent/cws-tls/build.gradle | 1 + dd-smoke-tests/quarkus-native/build.gradle | 2 ++ dd-smoke-tests/spring-boot-3.0-native/build.gradle | 2 ++ utils/container-utils/build.gradle.kts | 1 + utils/test-utils/build.gradle.kts | 1 + 8 files changed, 11 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index fb4c9b55356..b8c1a2b7154 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -62,6 +62,8 @@ variables: GRADLE_PLUGIN_PROXY: "https://depot-read-api-java.us1.ddbuild.io/magicmirror/magicmirror/@current/" BUILDER_IMAGE_REPO: "registry.ddbuild.io/images/mirror/dd-trace-java-docker-build" # images are pinned in images/mirror.lock.yaml in the ddoghq/images repo BUILDER_IMAGE_VERSION_PREFIX: "ci-" # use either an empty string (e.g. "") for latest images or a version followed by a hyphen (e.g. "ci-" or "123_merge-") + # shortcut: tag republishing is not detected; use a content hash when CI builds the image. + ORG_GRADLE_PROJECT_ciBuilderImage: "${BUILDER_IMAGE_REPO}:${BUILDER_IMAGE_VERSION_PREFIX}" TEST_COUNTS_S3_BUCKET: "dd-trace-java-ci-test-reports" REPO_NOTIFICATION_CHANNEL: "#apm-java-escalations" DEFAULT_TEST_JVMS: /^(8|11|17|21|25|tip)$/ # the latest "tip" version is 27 diff --git a/dd-java-agent/agent-ci-visibility/build.gradle b/dd-java-agent/agent-ci-visibility/build.gradle index 375df7c0315..f083beb6827 100644 --- a/dd-java-agent/agent-ci-visibility/build.gradle +++ b/dd-java-agent/agent-ci-visibility/build.gradle @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { + id 'dd-trace-java.ci-builder-inputs' id 'com.gradleup.shadow' id 'org.jetbrains.kotlin.jvm' id 'dd-trace-java.version-file' diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle index 1b31128050a..3e141234ad9 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle @@ -1,4 +1,5 @@ plugins { + id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.module.internal-library' } diff --git a/dd-java-agent/cws-tls/build.gradle b/dd-java-agent/cws-tls/build.gradle index 3b20009adaf..9126b87e1f0 100644 --- a/dd-java-agent/cws-tls/build.gradle +++ b/dd-java-agent/cws-tls/build.gradle @@ -2,6 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.apache.maven.model.License plugins { + id 'dd-trace-java.ci-builder-inputs' id 'com.gradleup.shadow' id 'dd-trace-java.version-file' id 'dd-trace-java.module.product-subsystem' diff --git a/dd-smoke-tests/quarkus-native/build.gradle b/dd-smoke-tests/quarkus-native/build.gradle index dc2c747fd46..3d2b749c8b5 100644 --- a/dd-smoke-tests/quarkus-native/build.gradle +++ b/dd-smoke-tests/quarkus-native/build.gradle @@ -2,6 +2,7 @@ import java.util.concurrent.Callable import java.util.regex.Pattern plugins { + id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.smoke-test-app' id 'dd-trace-java.module.smoke-test' } @@ -46,6 +47,7 @@ smokeTestApp { environment.put('GRAALVM_HOME', graalvmHome) inputs { property('graalvmRelease', fileContent(graalvmHome, 'release')) + property('ciBuilderIdentity', ciBuilderInputs.identity) } } projectJar('apiJar', project(':dd-trace-api')) diff --git a/dd-smoke-tests/spring-boot-3.0-native/build.gradle b/dd-smoke-tests/spring-boot-3.0-native/build.gradle index 2424d22e6ad..55a95194616 100644 --- a/dd-smoke-tests/spring-boot-3.0-native/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-native/build.gradle @@ -2,6 +2,7 @@ import java.util.concurrent.Callable import java.util.regex.Pattern plugins { + id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.smoke-test-app' id 'dd-trace-java.module.smoke-test' } @@ -44,6 +45,7 @@ smokeTestApp { environment.put('NATIVE_IMAGE_DEPRECATED_BUILDER_SANITATION', 'true') inputs { property('graalvmRelease', fileContent(graalvmHome, 'release')) + property('ciBuilderIdentity', ciBuilderInputs.identity) } } projectJar('apiJar', project(':dd-trace-api')) diff --git a/utils/container-utils/build.gradle.kts b/utils/container-utils/build.gradle.kts index f4b3ff6e862..16195e483d0 100644 --- a/utils/container-utils/build.gradle.kts +++ b/utils/container-utils/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + id("dd-trace-java.ci-builder-inputs") `java-library` id("dd-trace-java.module.internal-library") } diff --git a/utils/test-utils/build.gradle.kts b/utils/test-utils/build.gradle.kts index bb2a07b6da7..0e3a238295d 100644 --- a/utils/test-utils/build.gradle.kts +++ b/utils/test-utils/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + id("dd-trace-java.ci-builder-inputs") `java-library` id("dd-trace-java.module.internal-library") } From fc1a646616ec655729c48510304513fd58a69c9f Mon Sep 17 00:00:00 2001 From: Brice Dutheil Date: Wed, 28 Oct 2026 15:04:40 +0100 Subject: [PATCH 2/2] docs: explain CI builder input consumers --- dd-java-agent/agent-ci-visibility/build.gradle | 1 + .../agent-profiling/profiling-controller-ddprof/build.gradle | 1 + dd-java-agent/cws-tls/build.gradle | 1 + dd-smoke-tests/quarkus-native/build.gradle | 1 + dd-smoke-tests/spring-boot-3.0-native/build.gradle | 1 + utils/container-utils/build.gradle.kts | 1 + utils/test-utils/build.gradle.kts | 1 + 7 files changed, 7 insertions(+) diff --git a/dd-java-agent/agent-ci-visibility/build.gradle b/dd-java-agent/agent-ci-visibility/build.gradle index f083beb6827..2327b8d601c 100644 --- a/dd-java-agent/agent-ci-visibility/build.gradle +++ b/dd-java-agent/agent-ci-visibility/build.gradle @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion plugins { + // ShellCommandExecutorTest invokes the image's echo, cat and sleep commands. id 'dd-trace-java.ci-builder-inputs' id 'com.gradleup.shadow' id 'org.jetbrains.kotlin.jvm' diff --git a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle index 3e141234ad9..354dfc5d348 100644 --- a/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle +++ b/dd-java-agent/agent-profiling/profiling-controller-ddprof/build.gradle @@ -1,4 +1,5 @@ plugins { + // Tests load the native profiler selected for the image's libc variant. id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.module.internal-library' } diff --git a/dd-java-agent/cws-tls/build.gradle b/dd-java-agent/cws-tls/build.gradle index 9126b87e1f0..c7b7357ed8f 100644 --- a/dd-java-agent/cws-tls/build.gradle +++ b/dd-java-agent/cws-tls/build.gradle @@ -2,6 +2,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.apache.maven.model.License plugins { + // CWS tests exercise JNA native memory and the image's native runtime. id 'dd-trace-java.ci-builder-inputs' id 'com.gradleup.shadow' id 'dd-trace-java.version-file' diff --git a/dd-smoke-tests/quarkus-native/build.gradle b/dd-smoke-tests/quarkus-native/build.gradle index 3d2b749c8b5..f139cd30d1d 100644 --- a/dd-smoke-tests/quarkus-native/build.gradle +++ b/dd-smoke-tests/quarkus-native/build.gradle @@ -2,6 +2,7 @@ import java.util.concurrent.Callable import java.util.regex.Pattern plugins { + // Native smoke builds use GraalVM and native tools from the builder environment. id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.smoke-test-app' id 'dd-trace-java.module.smoke-test' diff --git a/dd-smoke-tests/spring-boot-3.0-native/build.gradle b/dd-smoke-tests/spring-boot-3.0-native/build.gradle index 55a95194616..7ad10fc9e99 100644 --- a/dd-smoke-tests/spring-boot-3.0-native/build.gradle +++ b/dd-smoke-tests/spring-boot-3.0-native/build.gradle @@ -2,6 +2,7 @@ import java.util.concurrent.Callable import java.util.regex.Pattern plugins { + // Native smoke builds use GraalVM and native tools from the builder environment. id 'dd-trace-java.ci-builder-inputs' id 'dd-trace-java.smoke-test-app' id 'dd-trace-java.module.smoke-test' diff --git a/utils/container-utils/build.gradle.kts b/utils/container-utils/build.gradle.kts index 16195e483d0..60c3eb25603 100644 --- a/utils/container-utils/build.gradle.kts +++ b/utils/container-utils/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + // ContainerInfoTest invokes the image's ls -id command. id("dd-trace-java.ci-builder-inputs") `java-library` id("dd-trace-java.module.internal-library") diff --git a/utils/test-utils/build.gradle.kts b/utils/test-utils/build.gradle.kts index 0e3a238295d..32bc00c7a1b 100644 --- a/utils/test-utils/build.gradle.kts +++ b/utils/test-utils/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + // PortableCommandTest invokes the image's echo, cat, sleep and tail commands. id("dd-trace-java.ci-builder-inputs") `java-library` id("dd-trace-java.module.internal-library")