From ae228441f55adfd49c1e12af33c9dcf55187918e Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 9 Jul 2025 15:35:08 -0400 Subject: [PATCH 1/6] Adjust JDK 25 EA build image --- Dockerfile | 8 ++++---- build | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8c993a1..45d57ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,9 +50,9 @@ COPY --from=eclipse-temurin:8-jdk-jammy /opt/java/openjdk /usr/lib/jvm/8 COPY --from=eclipse-temurin:11-jdk-jammy /opt/java/openjdk /usr/lib/jvm/11 COPY --from=eclipse-temurin:17-jdk-jammy /opt/java/openjdk /usr/lib/jvm/17 COPY --from=eclipse-temurin:21-jdk-jammy /opt/java/openjdk /usr/lib/jvm/21 -# TODO: Update to eclipse-temurin once JDK 25 is generally available (ETA Sep 16). -COPY --from=openjdk:25-jdk-bookworm /usr/local/openjdk-25 /usr/lib/jvm/25 COPY --from=temurin-latest /opt/java/openjdk /usr/lib/jvm/${LATEST_VERSION} +# TODO: Update to eclipse-temurin:25-jdk-noble once JDK 25 is generally available (ETA Sep 16). +COPY --from=openjdk:25-jdk-bookworm /usr/local/openjdk-25 /usr/lib/jvm/25 COPY --from=azul/zulu-openjdk:7 /usr/lib/jvm/zulu7 /usr/lib/jvm/7 COPY --from=azul/zulu-openjdk:8 /usr/lib/jvm/zulu8 /usr/lib/jvm/zulu8 @@ -93,8 +93,8 @@ COPY --from=all-jdk /usr/lib/jvm/8 /usr/lib/jvm/8 COPY --from=all-jdk /usr/lib/jvm/11 /usr/lib/jvm/11 COPY --from=all-jdk /usr/lib/jvm/17 /usr/lib/jvm/17 COPY --from=all-jdk /usr/lib/jvm/21 /usr/lib/jvm/21 -COPY --from=all-jdk /usr/lib/jvm/25 /usr/lib/jvm/25 COPY --from=all-jdk /usr/lib/jvm/${LATEST_VERSION} /usr/lib/jvm/${LATEST_VERSION} +COPY --from=all-jdk /usr/lib/jvm/25 /usr/lib/jvm/25 # Base image with minimum requirements to build the project. # Based on the latest Ubuntu LTS image. @@ -172,8 +172,8 @@ ENV JAVA_8_HOME=/usr/lib/jvm/8 ENV JAVA_11_HOME=/usr/lib/jvm/11 ENV JAVA_17_HOME=/usr/lib/jvm/17 ENV JAVA_21_HOME=/usr/lib/jvm/21 -ENV JAVA_25_HOME=/usr/lib/jvm/25 ENV JAVA_${LATEST_VERSION}_HOME=/usr/lib/jvm/${LATEST_VERSION} +ENV JAVA_25_HOME=/usr/lib/jvm/25 ENV JAVA_HOME=${JAVA_8_HOME} ENV PATH=${JAVA_HOME}/bin:${PATH} diff --git a/build b/build index b8d5fd2..c4964a7 100755 --- a/build +++ b/build @@ -3,7 +3,7 @@ set -eu readonly IMAGE_NAME="ghcr.io/datadog/dd-trace-java-docker-build" -readonly BASE_VARIANTS=(8 11 17 21 25 stable) # add an ea variant once the early access build is available +readonly BASE_VARIANTS=(8 11 17 21 stable 25) # 25 is currently an ea variant readonly VARIANTS=( 7 @@ -158,8 +158,8 @@ function do_inner_test() { "$JAVA_11_HOME/bin/java" -version "$JAVA_17_HOME/bin/java" -version "$JAVA_21_HOME/bin/java" -version - "$JAVA_25_HOME/bin/java" -version "${!java_latest_home}/bin/java" -version + "$JAVA_25_HOME/bin/java" -version if [[ $variant != base && $variant != latest ]]; then if [[ $variant == "stable" ]]; then variant_lower="${LATEST_VERSION}" From 119d5e9dd3fca5c8a8eeeb6875281c1e09446c9b Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 9 Jul 2025 17:34:24 -0400 Subject: [PATCH 2/6] Revert files back to original --- Dockerfile | 8 ++++---- build | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 45d57ba..8c993a1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -50,9 +50,9 @@ COPY --from=eclipse-temurin:8-jdk-jammy /opt/java/openjdk /usr/lib/jvm/8 COPY --from=eclipse-temurin:11-jdk-jammy /opt/java/openjdk /usr/lib/jvm/11 COPY --from=eclipse-temurin:17-jdk-jammy /opt/java/openjdk /usr/lib/jvm/17 COPY --from=eclipse-temurin:21-jdk-jammy /opt/java/openjdk /usr/lib/jvm/21 -COPY --from=temurin-latest /opt/java/openjdk /usr/lib/jvm/${LATEST_VERSION} -# TODO: Update to eclipse-temurin:25-jdk-noble once JDK 25 is generally available (ETA Sep 16). +# TODO: Update to eclipse-temurin once JDK 25 is generally available (ETA Sep 16). COPY --from=openjdk:25-jdk-bookworm /usr/local/openjdk-25 /usr/lib/jvm/25 +COPY --from=temurin-latest /opt/java/openjdk /usr/lib/jvm/${LATEST_VERSION} COPY --from=azul/zulu-openjdk:7 /usr/lib/jvm/zulu7 /usr/lib/jvm/7 COPY --from=azul/zulu-openjdk:8 /usr/lib/jvm/zulu8 /usr/lib/jvm/zulu8 @@ -93,8 +93,8 @@ COPY --from=all-jdk /usr/lib/jvm/8 /usr/lib/jvm/8 COPY --from=all-jdk /usr/lib/jvm/11 /usr/lib/jvm/11 COPY --from=all-jdk /usr/lib/jvm/17 /usr/lib/jvm/17 COPY --from=all-jdk /usr/lib/jvm/21 /usr/lib/jvm/21 -COPY --from=all-jdk /usr/lib/jvm/${LATEST_VERSION} /usr/lib/jvm/${LATEST_VERSION} COPY --from=all-jdk /usr/lib/jvm/25 /usr/lib/jvm/25 +COPY --from=all-jdk /usr/lib/jvm/${LATEST_VERSION} /usr/lib/jvm/${LATEST_VERSION} # Base image with minimum requirements to build the project. # Based on the latest Ubuntu LTS image. @@ -172,8 +172,8 @@ ENV JAVA_8_HOME=/usr/lib/jvm/8 ENV JAVA_11_HOME=/usr/lib/jvm/11 ENV JAVA_17_HOME=/usr/lib/jvm/17 ENV JAVA_21_HOME=/usr/lib/jvm/21 -ENV JAVA_${LATEST_VERSION}_HOME=/usr/lib/jvm/${LATEST_VERSION} ENV JAVA_25_HOME=/usr/lib/jvm/25 +ENV JAVA_${LATEST_VERSION}_HOME=/usr/lib/jvm/${LATEST_VERSION} ENV JAVA_HOME=${JAVA_8_HOME} ENV PATH=${JAVA_HOME}/bin:${PATH} diff --git a/build b/build index c4964a7..b8d5fd2 100755 --- a/build +++ b/build @@ -3,7 +3,7 @@ set -eu readonly IMAGE_NAME="ghcr.io/datadog/dd-trace-java-docker-build" -readonly BASE_VARIANTS=(8 11 17 21 stable 25) # 25 is currently an ea variant +readonly BASE_VARIANTS=(8 11 17 21 25 stable) # add an ea variant once the early access build is available readonly VARIANTS=( 7 @@ -158,8 +158,8 @@ function do_inner_test() { "$JAVA_11_HOME/bin/java" -version "$JAVA_17_HOME/bin/java" -version "$JAVA_21_HOME/bin/java" -version - "${!java_latest_home}/bin/java" -version "$JAVA_25_HOME/bin/java" -version + "${!java_latest_home}/bin/java" -version if [[ $variant != base && $variant != latest ]]; then if [[ $variant == "stable" ]]; then variant_lower="${LATEST_VERSION}" From 096ddd67e3fa2a967314da58c2fe73767d7bb513 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Wed, 9 Jul 2025 17:46:35 -0400 Subject: [PATCH 3/6] Set LATEST_VERSION to 24 --- build | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/build b/build index b8d5fd2..1c72d64 100755 --- a/build +++ b/build @@ -18,6 +18,8 @@ readonly VARIANTS=( graalvm21 ) +readonly LATEST_VERSION="24" + # Use buildkit to match CI as closely as possible. export DOCKER_BUILDKIT=1 @@ -44,23 +46,6 @@ function compute_metadata() { GIT_HEAD_REF="$(git show-ref --head --hash ^HEAD)" } -function compute_latest_version() { - # Java versions are typically released towards the end of the month in March and September, - # so we use the version from the previous release cycle until the month after the release. - local base_year=2025 - local base_version=23 - - version="$((base_version + ($(date +%Y) - base_year) * 2))" - if [ "$(date +%m)" -ge 4 ]; then - version="$((version + 1))" - fi - if [ "$(date +%m)" -ge 10 ]; then - version="$((version + 1))" - fi - - export LATEST_VERSION="$version" -} - # docker build wrapper with common arguments # See https://github.com/opencontainers/image-spec/blob/main/annotations.md for common labels # See https://docs.github.com/en/packages/learn-github-packages/connecting-a-repository-to-a-package @@ -88,7 +73,6 @@ function image_name() { function do_build() { compute_metadata - compute_latest_version docker_build base "$(image_name base)" docker_build full "$(image_name latest)" if [ -n "${GITHUB_OUTPUT+unset}" ]; then From 7cfb635c8bb6cab5d62f509de17b1c8c836208da Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Mon, 20 Apr 2026 15:38:43 -0400 Subject: [PATCH 4/6] Update test mirror entry scripts --- scripts/create-test-mirror-entries.sh | 22 +++++++++----- scripts/delete-test-mirror-entries.sh | 44 +++++++++++++++------------ 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/scripts/create-test-mirror-entries.sh b/scripts/create-test-mirror-entries.sh index 6993a69..ba00c37 100755 --- a/scripts/create-test-mirror-entries.sh +++ b/scripts/create-test-mirror-entries.sh @@ -14,6 +14,8 @@ set -euo pipefail readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +readonly SOURCE_PREFIX="ghcr.io/datadog/dd-trace-java-docker-build" +readonly DEST_REPO="dd-trace-java-docker-build" if ! [[ "${PR_NUMBER}" =~ ^[0-9]+$ ]]; then echo "::error::PR_NUMBER must be numeric (got: '${PR_NUMBER}')" >&2 @@ -23,7 +25,7 @@ fi readonly PREFIX="${PR_NUMBER}_merge-" # Check if entries already exist in mirror.yaml (use base variant as tester) -if grep -qF "ghcr.io/datadog/dd-trace-java-docker-build:${PREFIX}base" mirror.yaml; then +if grep -qF "\"${PREFIX}base\"" mirror.yaml; then MODE="update" echo "Entries for '${PREFIX}' already exist — updating digests only" else @@ -39,17 +41,21 @@ fi source "${SCRIPT_DIR}/get-image-digests.sh" if [[ "$MODE" == "add" ]]; then - for variant in "${CI_VARIANTS[@]}"; do - tag="${PREFIX}${variant}" - printf ' - source: "%s:%s"\n dest:\n repo: "dd-trace-java-docker-build"\n tag: "%s"\n replication_target: ""\n' \ - "ghcr.io/datadog/dd-trace-java-docker-build" "${tag}" "${tag}" >> mirror.yaml - done - echo "Appended ${#CI_VARIANTS[@]} entries to mirror.yaml" + { + printf ' - source_prefix: "%s"\n' "${SOURCE_PREFIX}" + printf ' dest_repo: "%s"\n' "${DEST_REPO}" + printf ' tags:\n' + for variant in "${CI_VARIANTS[@]}"; do + printf ' - "%s%s"\n' "${PREFIX}" "${variant}" + done + printf ' replication_target: ""\n' + } >> mirror.yaml + echo "Appended grouped entry to mirror.yaml" for variant in "${CI_VARIANTS[@]}"; do tag="${PREFIX}${variant}" printf ' - source: %s:%s\n digest: %s\n' \ - "ghcr.io/datadog/dd-trace-java-docker-build" "${tag}" "${DIGESTS[$variant]}" >> mirror.lock.yaml + "${SOURCE_PREFIX}" "${tag}" "${DIGESTS[$variant]}" >> mirror.lock.yaml done echo "Appended ${#CI_VARIANTS[@]} entries to mirror.lock.yaml" else diff --git a/scripts/delete-test-mirror-entries.sh b/scripts/delete-test-mirror-entries.sh index 18a31f0..e3dc8da 100644 --- a/scripts/delete-test-mirror-entries.sh +++ b/scripts/delete-test-mirror-entries.sh @@ -10,7 +10,8 @@ set -euo pipefail -readonly SOURCE_REPO="ghcr.io/datadog/dd-trace-java-docker-build" +readonly SOURCE_PREFIX="ghcr.io/datadog/dd-trace-java-docker-build" +readonly DEST_REPO="dd-trace-java-docker-build" readonly CI_VARIANTS=(base 7 8 11 17 21 25 tip zulu8 zulu11 oracle8 ibm8 semeru8 semeru11 semeru17 graalvm17 graalvm21 graalvm25) if ! [[ "${PR_NUMBER}" =~ ^[0-9]+$ ]]; then @@ -22,35 +23,38 @@ readonly PREFIX="${PR_NUMBER}_merge-" require_entry_exists() { local tag="$1" - if ! grep -qF "${SOURCE_REPO}:${tag}\"" mirror.yaml; then - echo "::error::Missing mirror.yaml entry for ${SOURCE_REPO}:${tag}" >&2 + if ! grep -qF "\"${tag}\"" mirror.yaml; then + echo "::error::Missing mirror.yaml tag for ${SOURCE_PREFIX}:${tag}" >&2 exit 1 fi - if ! grep -qF "${SOURCE_REPO}:${tag}" mirror.lock.yaml; then - echo "::error::Missing mirror.lock.yaml entry for ${SOURCE_REPO}:${tag}" >&2 + if ! grep -qF "${SOURCE_PREFIX}:${tag}" mirror.lock.yaml; then + echo "::error::Missing mirror.lock.yaml entry for ${SOURCE_PREFIX}:${tag}" >&2 exit 1 fi } -remove_from_mirror_yaml() { - local tag="$1" - local src=" - source: \"${SOURCE_REPO}:${tag}\"" +remove_group_from_mirror_yaml() { local file="mirror.yaml" - awk -v src="${src}" ' - $0 == src { skip=1; removed=1; next } - skip && /^ - source: / { skip=0 } - !skip { print } - END { - if (!removed) { - exit 44 - } - } + local block + + block="$( + printf ' - source_prefix: "%s"\n dest_repo: "%s"\n tags:\n' "${SOURCE_PREFIX}" "${DEST_REPO}" + for variant in "${CI_VARIANTS[@]}"; do + printf ' - "%s%s"\n' "${PREFIX}" "${variant}" + done + printf ' replication_target: ""\n' + )" + + TARGET_BLOCK="${block}" perl -0pe ' + BEGIN { $removed = 0 } + $removed = s/\Q$ENV{TARGET_BLOCK}\E//s; + END { exit($removed ? 0 : 44) } ' "${file}" > "${file}.tmp" && mv "${file}.tmp" "${file}" } remove_from_mirror_lock() { local tag="$1" - local src=" - source: ${SOURCE_REPO}:${tag}" + local src=" - source: ${SOURCE_PREFIX}:${tag}" local file="mirror.lock.yaml" awk -v src="${src}" ' $0 == src { skip_digest=1; removed=1; next } @@ -70,10 +74,10 @@ for variant in "${CI_VARIANTS[@]}"; do done echo "Removing test mirror entries for prefix '${PREFIX}'..." +remove_group_from_mirror_yaml for variant in "${CI_VARIANTS[@]}"; do tag="${PREFIX}${variant}" - remove_from_mirror_yaml "${tag}" remove_from_mirror_lock "${tag}" done -echo "Removed ${#CI_VARIANTS[@]} entries from mirror.yaml and mirror.lock.yaml" +echo "Removed grouped mirror.yaml entry and ${#CI_VARIANTS[@]} entries from mirror.lock.yaml" From b9262d47a6078163696ccd8ce6521cdcb0e7c53e Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Mon, 20 Apr 2026 15:39:32 -0400 Subject: [PATCH 5/6] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b78684..e0b6ff3 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Images are built per PR for ease in testing. These test images are prefixed with To test these images in `dd-trace-java` CI: 1. Open a PR in [DataDog/dd-trace-java-docker-build](https://github.com/DataDog/dd-trace-java-docker-build) with the changes you want to test. Let's say these changes are made in PR #N. -2. After the PR images are built in the [GitHub Container Registry](https://github.com/DataDog/dd-trace-java-docker-build/pkgs/container/dd-trace-java-docker-build), run the [Create test image mirror PR](https://github.com/DataDog/dd-trace-java-docker-build/actions/workflows/create-test-mirror-pr.yml) workflow with the corresponding PR number: `N`. This automatically opens a PR in [DataDog/images](https://github.com/DataDog/images) that adds mirror entries for the `N_merge-*` test images. Merge the PR that should be automatically approved by the `dd-prapprover` bot. +2. After the PR images are built in the [GitHub Container Registry](https://github.com/DataDog/dd-trace-java-docker-build/pkgs/container/dd-trace-java-docker-build), run the [Create test image mirror PR](https://github.com/DataDog/dd-trace-java-docker-build/actions/workflows/create-test-mirror-pr.yml) workflow with the corresponding PR number: `N`. This automatically opens a PR in [DataDog/images](https://github.com/DataDog/images) that adds mirror entries for the `N_merge-*` test images. Merge the PR that should be automatically approved by the `dd-prapprover` bot. After merging, the images may take 30 min or more to update. 3. Open a PR in [DataDog/dd-trace-java](https://github.com/DataDog/dd-trace-java) that sets `BUILDER_IMAGE_VERSION_PREFIX: "N_merge-"` in `.gitlab-ci.yml`. Here, you can check your test images with `DataDog/dd-trace-java` CI. 4. Every time you want to test changes made in PR #N, ensure the test image SHAs in `DataDog/images` are updated by running the [Create test image mirror PR](https://github.com/DataDog/dd-trace-java-docker-build/actions/workflows/create-test-mirror-pr.yml) workflow with `N`. Confirm that these PRs are approved and merged by the `dd-prapprover` bot. 5. When the test images look good and `DataDog/dd-trace-java` CI is green, merge your `DataDog/dd-trace-java-docker-build` PR #N. From c4921a839c16d262fbea24448b5c5c0df40fe294 Mon Sep 17 00:00:00 2001 From: Sarah Chen Date: Thu, 7 May 2026 14:50:15 -0400 Subject: [PATCH 6/6] Update to latest version Java 26 --- build | 2 +- scripts/delete-test-mirror-entries.sh | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/build b/build index fd8dfcd..77233c8 100755 --- a/build +++ b/build @@ -19,7 +19,7 @@ readonly VARIANTS=( graalvm25 ) -readonly LATEST_VERSION="24" +readonly LATEST_VERSION="26" # Use buildkit to match CI as closely as possible. export DOCKER_BUILDKIT=1 diff --git a/scripts/delete-test-mirror-entries.sh b/scripts/delete-test-mirror-entries.sh index ac655db..2c57ac2 100644 --- a/scripts/delete-test-mirror-entries.sh +++ b/scripts/delete-test-mirror-entries.sh @@ -47,11 +47,7 @@ remove_group_from_mirror_yaml() { TARGET_BLOCK="${block}" perl -0pe ' BEGIN { $removed = 0 } -<<<<<<< HEAD - $removed = s/\Q$ENV{TARGET_BLOCK}\E//s; -======= $removed = s/\Q$ENV{TARGET_BLOCK}\E\n?//s; ->>>>>>> 32a114d1e5e7c1fe6056f19809f092970d7bd9df END { exit($removed ? 0 : 44) } ' "${file}" > "${file}.tmp" && mv "${file}.tmp" "${file}" }