|
@@ -0,0 +1,51 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+set -Eeuo pipefail
|
|
|
+
|
|
|
+# given a list of image references, returns an appropriate list of "ref=docker-image://foo@sha256:xxx" for the current architecture
|
|
|
+
|
|
|
+dir="$(dirname "$BASH_SOURCE")"
|
|
|
+
|
|
|
+[ -n "$BASHBREW_ARCH" ]
|
|
|
+archNamespace=
|
|
|
+
|
|
|
+die() {
|
|
|
+ echo >&2 "error: $*"
|
|
|
+ exit 1
|
|
|
+}
|
|
|
+
|
|
|
+for img; do
|
|
|
+ lookup=
|
|
|
+ case "$img" in
|
|
|
+ *@sha256:*)
|
|
|
+ lookup="$img"
|
|
|
+ ;;
|
|
|
+
|
|
|
+ */*)
|
|
|
+ file="$("$dir/.external-pins/file.sh" "$img")" || die "'$img': failed to look up external pin file"
|
|
|
+ digest="$(< "$file")" || die "'$img': failed to read external pin file ('$file')"
|
|
|
+ [ -n "$digest" ] || die "'$img': empty external pin file ('$file')"
|
|
|
+ lookup="${img%@*}@$digest" # img should never have an @ in it here, but just in case
|
|
|
+ ;;
|
|
|
+
|
|
|
+ *)
|
|
|
+ [ -n "$BASHBREW_ARCH_NAMESPACES" ] || die 'missing BASHBREW_ARCH_NAMESPACES'
|
|
|
+ archNamespace="${archNamespace:-$(bashbrew cat --format '{{ archNamespace arch }}' "$dir/library/hello-world")}"
|
|
|
+ [ -n "$archNamespace" ] || die "failed to get arch namespace for '$BASHBREW_ARCH'"
|
|
|
+ lookup="$archNamespace/$img"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+ [ -n "$lookup" ] || die "'$img': failed to determine what image to query"
|
|
|
+
|
|
|
+ json="$(bashbrew remote arches --json "$lookup" || die "'$img': failed lookup ('$lookup')")"
|
|
|
+ digests="$(jq <<<"$json" -r '.arches[env.BASHBREW_ARCH] // [] | map(.digest | @sh) | join(" ")')"
|
|
|
+ eval "digests=( $digests )"
|
|
|
+
|
|
|
+ for digest in "${digests[@]}"; do
|
|
|
+ echo "$img=docker-image://${lookup%@*}@$digest"
|
|
|
+ continue 2
|
|
|
+ done
|
|
|
+
|
|
|
+ digest="$(jq <<<"$json" -r '.desc.digest')"
|
|
|
+ arches="$(jq <<<"$json" -r '.arches | keys | join(" ")')"
|
|
|
+ die "'$img': no appropriate digest for '$BASHBREW_ARCH' found in '$lookup' ('$digest'; arches '$arches')"
|
|
|
+done
|