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
108 changes: 57 additions & 51 deletions sync-awsecr.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ registry="public.ecr.aws/z9d2n7e1"

declare -A aliases
aliases=(
[mainline]='1 1.29 latest'
[stable]='1.28'
[mainline]='1 1.29 latest'
[stable]='1.28'
)

architectures=( amd64 arm64v8 )
Expand All @@ -29,84 +29,96 @@ fileCommit() {

# get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile"
dirCommit() {
local dir="$1"; shift
(
cd "$dir"
fileCommit \
Dockerfile \
$(git show HEAD:./Dockerfile | awk '
toupper($1) == "COPY" {
for (i = 2; i < NF; i++) {
print $i
}
}
')
)
local dir="$1"; shift
(
cd "$dir"
fileCommit \
Dockerfile \
$(git show HEAD:./Dockerfile | awk '
toupper($1) == "COPY" {
for (i = 2; i < NF; i++) {
print $i
}
}
')
)
}

# prints "$2$1$3$1...$N"
join() {
local sep="$1"; shift
local out; printf -v out "${sep//%/%%}%s" "$@"
echo "${out#$sep}"
local sep="$1"; shift
local out; printf -v out "${sep//%/%%}%s" "$@"
echo "${out#$sep}"
}

for version in "${versions[@]}"; do
commit="$(dirCommit "$version/$base")"
fullVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk '$1 == "ENV" && $2 == "NGINX_VERSION" { print $3; exit }')"
commit="$(dirCommit "$version/$base")"
fullVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk '$1 == "ENV" && $2 == "NGINX_VERSION" { print $3; exit }')"
pulllist+=( "$image:$fullVersion" )
for variant in perl alpine alpine-perl alpine-slim; do
for variant in otel perl alpine alpine-otel alpine-perl alpine-slim; do
pulllist+=( "$image:$fullVersion-$variant" )
done
done

for version in "${versions[@]}"; do
commit="$(dirCommit "$version/$base")"
commit="$(dirCommit "$version/$base")"

fullVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk '$1 == "ENV" && $2 == "NGINX_VERSION" { print $3; exit }')"
fullVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk '$1 == "ENV" && $2 == "NGINX_VERSION" { print $3; exit }')"

versionAliases=( $fullVersion )
if [ "$version" != "$fullVersion" ]; then
versionAliases+=( $version )
fi
versionAliases+=( ${aliases[$version]:-} )
versionAliases=( $fullVersion )
if [ "$version" != "$fullVersion" ]; then
versionAliases+=( $version )
fi
versionAliases+=( ${aliases[$version]:-} )

debianVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk -F"[-:]" '$1 == "FROM debian" { print $2; exit }')"
debianAliases=( ${versionAliases[@]/%/-$debianVersion} )
debianAliases=( "${debianAliases[@]//latest-/}" )
debianVersion="$(git show "$commit":"$version/$base/Dockerfile" | awk -F"[-:]" '$1 == "FROM debian" { print $2; exit }')"
debianAliases=( ${versionAliases[@]/%/-$debianVersion} )
debianAliases=( "${debianAliases[@]//latest-/}" )

for tag in ${versionAliases[@]:1} ${debianAliases[@]:1}; do
taglist["$image:$tag"]="$image:$fullVersion"
done

for variant in debian-perl; do
variantAliases=( "${versionAliases[@]/%/-perl}" )
for variant in debian-perl; do
variantAliases=( "${versionAliases[@]/%/-perl}" )
variantAliases+=( "${versionAliases[@]/%/-${variant/debian/$debianVersion}}" )
variantAliases=( "${variantAliases[@]//latest-/}" )
variantAliases=( "${variantAliases[@]//latest-/}" )

for tag in ${variantAliases[@]}; do
if [ "$tag" != "${fullVersion}-perl" ]; then
if [ "$tag" != "${fullVersion}-perl" ]; then
taglist["$image:$tag"]="$image:$fullVersion-perl"
fi
done
done
done

for variant in debian-otel; do
variantAliases=( "${versionAliases[@]/%/-otel}" )
variantAliases+=( "${versionAliases[@]/%/-${variant/debian/$debianVersion}}" )
variantAliases=( "${variantAliases[@]//latest-/}" )

for tag in ${variantAliases[@]}; do
if [ "$tag" != "${fullVersion}-otel" ]; then
taglist["$image:$tag"]="$image:$fullVersion-otel"
fi
done
done

commit="$(dirCommit "$version/alpine-slim")"
alpineVersion="$(git show "$commit":"$version/alpine-slim/Dockerfile" | awk -F: '$1 == "FROM alpine" { print $2; exit }')"

for variant in alpine alpine-perl alpine-slim; do
commit="$(dirCommit "$version/$variant")"
for variant in alpine alpine-otel alpine-perl alpine-slim; do
commit="$(dirCommit "$version/$variant")"

variantAliases=( "${versionAliases[@]/%/-$variant}" )
variantAliases+=( "${versionAliases[@]/%/-${variant/alpine/alpine$alpineVersion}}" )
variantAliases=( "${variantAliases[@]//latest-/}" )
variantAliases=( "${versionAliases[@]/%/-$variant}" )
variantAliases+=( "${versionAliases[@]/%/-${variant/alpine/alpine$alpineVersion}}" )
variantAliases=( "${variantAliases[@]//latest-/}" )

for tag in ${variantAliases[@]}; do
if [ "$tag" != "${fullVersion}-$variant" ]; then
if [ "$tag" != "${fullVersion}-$variant" ]; then
taglist["$image:$tag"]="$image:${fullVersion}-$variant"
fi
done
done
done

done

Expand Down Expand Up @@ -155,17 +167,11 @@ done
done

echo
echo "# manifesting stuff"
echo "# manifesting and pushing stuff"
for tag in ${pulllist[@]} ${!taglist[@]}; do
string="docker manifest create --amend $registry/$tag"
string="docker buildx imagetools create --progress=plain -t --amend $registry/$tag"
for arch in ${architectures[@]}; do
string+=" $registry/$tag-$arch"
done
echo $string
done

echo
echo "# pushing manifests"
for tag in ${pulllist[@]} ${!taglist[@]}; do
echo "docker manifest push --purge $registry/$tag"
done