-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathcreate-test-mirror-entries.sh
More file actions
executable file
·67 lines (58 loc) · 2.47 KB
/
create-test-mirror-entries.sh
File metadata and controls
executable file
·67 lines (58 loc) · 2.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env bash
# create-test-mirror-entries.sh — add or update {PR_NUMBER}_merge-* test image entries
# in mirror.yaml and mirror.lock.yaml files in the DataDog/images repo.
#
# This script is called in the create-test-mirror-pr Github workflow.
# It must be run from the root of DataDog/images and requires crane to be installed.
#
# Required env var:
# PR_NUMBER — pull request number in dd-trace-java-docker-build (numeric)
#
# Outputs (when GITHUB_OUTPUT is set):
# mode=add|update, indicating whether the test images were added or their digests were updated
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
exit 1
fi
readonly PREFIX="${PR_NUMBER}_merge-"
# Check if entries already exist in mirror.yaml (use base variant as tester)
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
MODE="add"
echo "No entries found for '${PREFIX}' — adding new entries"
fi
if [[ -n "${GITHUB_OUTPUT:-}" ]]; then
echo "mode=${MODE}" >> "${GITHUB_OUTPUT}"
fi
# shellcheck source=scripts/get-image-digests.sh
source "${SCRIPT_DIR}/get-image-digests.sh"
if [[ "$MODE" == "add" ]]; then
{
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' \
"${SOURCE_PREFIX}" "${tag}" "${DIGESTS[$variant]}" >> mirror.lock.yaml
done
echo "Appended ${#CI_VARIANTS[@]} entries to mirror.lock.yaml"
else
for variant in "${CI_VARIANTS[@]}"; do
tag="${PREFIX}${variant}"
update_digest "${tag}" "${DIGESTS[$variant]}" mirror.lock.yaml
echo "Updated mirror.lock.yaml: ${tag}"
done
fi