Skip to content
Merged
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
109 changes: 82 additions & 27 deletions scripts/update-ci-image-digests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,44 +10,99 @@ 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"

insert_mirror_yaml_entry() {
local variant="$1" tag="ci-${variant}" amd64_only="false"
is_amd64_only_variant() {
[[ "$1" == "7" || "$1" == "ibm8" ]]
}

if [[ "${variant}" == "7" || "${variant}" == "ibm8" ]]; then
amd64_only="true"
fi
insert_entry_after_last_ci_block() {
local file="$1" ci_line_prefix="$2" next_block_regex="$3" entry_file="$4"

awk -v source_prefix="${SOURCE_PREFIX}" -v dest_repo="${DEST_REPO}" -v tag="${tag}" -v amd64_only="${amd64_only}" '
/^image_groups:$/ && !inserted {
print " - source: \"" source_prefix ":" tag "\""
print " dest:"
print " repo: \"" dest_repo "\""
print " tag: \"" tag "\""
print " replication_target: \"\""
print " platforms:"
print " - \"linux/amd64\""
if (amd64_only != "true") {
print " - \"linux/arm64\""
awk -v file="${file}" -v ci_line_prefix="${ci_line_prefix}" -v next_block_regex="${next_block_regex}" -v entry_file="${entry_file}" '
function print_entry(line) {
while ((getline line < entry_file) > 0) {
print line
}
print " renovate:"
print " enabled: true"
inserted = 1
close(entry_file)
}
{ print }
{ lines[NR] = $0 }
END {
if (!inserted) {
print "missing top-level image_groups section in mirror.yaml" > "/dev/stderr"
for (i = 1; i <= NR; i++) {
if (index(lines[i], ci_line_prefix) == 1) {
last_ci = i
}
}
if (!last_ci) {
print "missing dd-trace-java-docker-build ci-* section in " file > "/dev/stderr"
exit 1
}
insert_at = NR + 1
for (i = last_ci + 1; i <= NR; i++) {
if (lines[i] ~ next_block_regex) {
insert_at = i
break
}
}
for (i = 1; i <= NR; i++) {
if (i == insert_at) {
print_entry()
}
print lines[i]
}
if (insert_at == NR + 1) {
print_entry()
}
}
' mirror.yaml > mirror.yaml.tmp && mv mirror.yaml.tmp mirror.yaml
' "${file}" > "${file}.tmp" && mv "${file}.tmp" "${file}"
}

write_mirror_yaml_entry() {
local file="$1" variant="$2" tag="ci-${variant}"

{
printf ' - source: "%s:%s"\n' "${SOURCE_PREFIX}" "${tag}"
printf ' dest:\n'
printf ' repo: "%s"\n' "${DEST_REPO}"
printf ' tag: "%s"\n' "${tag}"
printf ' replication_target: ""\n'
printf ' platforms:\n'
printf ' - "linux/amd64"\n'
if ! is_amd64_only_variant "${variant}"; then
printf ' - "linux/arm64"\n'
fi
printf ' renovate:\n'
printf ' enabled: true\n'
} > "${file}"
}

append_mirror_lock_entry() {
local tag="$1" digest="$2"
write_mirror_lock_entry() {
local file="$1" tag="$2" digest="$3"

printf ' # renovate\n - source: %s:%s\n digest: %s\n' \
"${SOURCE_PREFIX}" "${tag}" "${digest}" >> mirror.lock.yaml
"${SOURCE_PREFIX}" "${tag}" "${digest}" > "${file}"
}

insert_mirror_yaml_entry() {
local variant="$1" entry_file

entry_file="$(mktemp)"
write_mirror_yaml_entry "${entry_file}" "${variant}"
if ! insert_entry_after_last_ci_block mirror.yaml " - source: \"${SOURCE_PREFIX}:ci-" '^( (#|- source:)|image_groups:)' "${entry_file}"; then
rm -f "${entry_file}"
return 1
fi
rm -f "${entry_file}"
}

insert_mirror_lock_entry() {
local tag="$1" digest="$2" entry_file

entry_file="$(mktemp)"
write_mirror_lock_entry "${entry_file}" "${tag}" "${digest}"
if ! insert_entry_after_last_ci_block mirror.lock.yaml " - source: ${SOURCE_PREFIX}:ci-" '^ (# renovate|- source:)' "${entry_file}"; then
rm -f "${entry_file}"
return 1
fi
rm -f "${entry_file}"
}

readonly PREFIX="ci-"
Expand All @@ -64,7 +119,7 @@ for variant in "${CI_VARIANTS[@]}"; do
fi

if ! grep -qF "${source}" mirror.lock.yaml; then
append_mirror_lock_entry "${tag}" "${DIGESTS[$variant]}"
insert_mirror_lock_entry "${tag}" "${DIGESTS[$variant]}"
echo "Added mirror.lock.yaml entry: ${tag}"
fi
done
Expand Down
Loading