.buildkit-build-contexts.sh 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env bash
  2. set -Eeuo pipefail
  3. # given a list of image references, returns an appropriate list of "ref=docker-image://foo@sha256:xxx" for the current architecture
  4. dir="$(dirname "$BASH_SOURCE")"
  5. [ -n "$BASHBREW_ARCH" ]
  6. archNamespace=
  7. die() {
  8. echo >&2 "error: $*"
  9. exit 1
  10. }
  11. for img; do
  12. lookup=
  13. case "$img" in
  14. *@sha256:*)
  15. lookup="$img"
  16. ;;
  17. */*)
  18. file="$("$dir/.external-pins/file.sh" "$img")" || die "'$img': failed to look up external pin file"
  19. digest="$(< "$file")" || die "'$img': failed to read external pin file ('$file')"
  20. [ -n "$digest" ] || die "'$img': empty external pin file ('$file')"
  21. lookup="${img%@*}@$digest" # img should never have an @ in it here, but just in case
  22. ;;
  23. *)
  24. [ -n "$BASHBREW_ARCH_NAMESPACES" ] || die 'missing BASHBREW_ARCH_NAMESPACES'
  25. archNamespace="${archNamespace:-$(bashbrew cat --format '{{ archNamespace arch }}' "$dir/library/hello-world")}"
  26. [ -n "$archNamespace" ] || die "failed to get arch namespace for '$BASHBREW_ARCH'"
  27. lookup="$archNamespace/$img"
  28. ;;
  29. esac
  30. [ -n "$lookup" ] || die "'$img': failed to determine what image to query"
  31. json="$(bashbrew remote arches --json "$lookup" || die "'$img': failed lookup ('$lookup')")"
  32. digests="$(jq <<<"$json" -r '.arches[env.BASHBREW_ARCH] // [] | map(.digest | @sh) | join(" ")')"
  33. eval "digests=( $digests )"
  34. if [ "${#digests[@]}" -gt 1 ]; then
  35. echo >&2 "warning: '$lookup' has ${#digests[@]} images for '$BASHBREW_ARCH'; returning only the first"
  36. fi
  37. for digest in "${digests[@]}"; do
  38. echo "$img=docker-image://${lookup%@*}@$digest"
  39. continue 2
  40. done
  41. digest="$(jq <<<"$json" -r '.desc.digest')"
  42. arches="$(jq <<<"$json" -r '.arches | keys | join(" ")')"
  43. die "'$img': no appropriate digest for '$BASHBREW_ARCH' found in '$lookup' ('$digest'; arches '$arches')"
  44. done