Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
22 changes: 14 additions & 8 deletions scripts/create-test-mirror-entries.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Comment thread
sarahchen6 marked this conversation as resolved.
Outdated
MODE="update"
echo "Entries for '${PREFIX}' already exist — updating digests only"
else
Expand All @@ -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
Expand Down
44 changes: 24 additions & 20 deletions scripts/delete-test-mirror-entries.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 }
Expand All @@ -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"
Loading