Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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 CHECK_SOURCE_PREFIX="${SOURCE_PREFIX}" CHECK_DEST_REPO="${DEST_REPO}" CHECK_TAG="${PREFIX}base" perl -0ne 'exit(index($_, qq{ - source_prefix: "$ENV{CHECK_SOURCE_PREFIX}"\n dest_repo: "$ENV{CHECK_DEST_REPO}"\n tags:\n - "$ENV{CHECK_TAG}"\n}) >= 0 ? 0 : 1)' mirror.yaml; then
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\n?//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