|
@@ -0,0 +1,83 @@
|
|
|
+#!/usr/bin/env bash
|
|
|
+
|
|
|
+# this file is intended to be sourced before invocations of "bashbrew build" which might invoke "docker buildx" / BuildKit ("Builder: buildkit")
|
|
|
+
|
|
|
+_resolve_external_pins() {
|
|
|
+ local -
|
|
|
+ set -Eeuo pipefail
|
|
|
+
|
|
|
+ local binDir oiDir
|
|
|
+ binDir="$(dirname "$BASH_SOURCE")"
|
|
|
+ oiDir="$(dirname "$binDir")"
|
|
|
+
|
|
|
+ local image
|
|
|
+ for image; do
|
|
|
+ [ -n "$image" ]
|
|
|
+ local wc
|
|
|
+ wc="$(wc -l <<<"$image")"
|
|
|
+ [ "$wc" -eq 1 ]
|
|
|
+
|
|
|
+ local file digest
|
|
|
+ if [ -n "${BASHBREW_ARCH:-}" ]; then
|
|
|
+ digest="$("$oiDir/.buildkit-build-contexts.sh" "$image")"
|
|
|
+ image="${digest#*=docker-image://}"
|
|
|
+ [ "$image" != "$digest" ]
|
|
|
+ else
|
|
|
+ file="$("$oiDir/.external-pins/file.sh" "$image")"
|
|
|
+ digest="$(< "$file")"
|
|
|
+ [ -n "$digest" ]
|
|
|
+ image+="@$digest"
|
|
|
+ fi
|
|
|
+
|
|
|
+ echo "$image"
|
|
|
+ done
|
|
|
+}
|
|
|
+
|
|
|
+_jq_setenv() {
|
|
|
+ local env="$1"; shift
|
|
|
+ local val="$1"; shift
|
|
|
+ jq -c --arg env "$env" --arg val "$val" '.[$env] = $val'
|
|
|
+}
|
|
|
+
|
|
|
+_bashbrew_buildkit_env_setup() {
|
|
|
+ local -
|
|
|
+ set -Eeuo pipefail
|
|
|
+
|
|
|
+ local binDir oiDir
|
|
|
+ binDir="$(dirname "$BASH_SOURCE")"
|
|
|
+ oiDir="$(dirname "$binDir")"
|
|
|
+
|
|
|
+ local externalPins
|
|
|
+ externalPins="$("$oiDir/.external-pins/list.sh")"
|
|
|
+
|
|
|
+ local vars='{}'
|
|
|
+
|
|
|
+ local dockerfileTag
|
|
|
+ dockerfileTag="$(grep <<<"$externalPins" -m1 '^docker/dockerfile:')"
|
|
|
+ dockerfileTag="$(_resolve_external_pins "$dockerfileTag")"
|
|
|
+ vars="$(_jq_setenv <<<"$vars" BASHBREW_BUILDKIT_SYNTAX "$dockerfileTag")"
|
|
|
+
|
|
|
+ case "${BASHBREW_ARCH:-}" in
|
|
|
+ amd64 | arm64v8) # TODO add more architectures
|
|
|
+ BASHBREW_BUILDKIT_IMAGE="$(grep <<<"$externalPins" -m1 '^moby/buildkit:')"
|
|
|
+ BASHBREW_BUILDKIT_IMAGE="$(_resolve_external_pins "$BASHBREW_BUILDKIT_IMAGE")"
|
|
|
+ export BASHBREW_BUILDKIT_IMAGE
|
|
|
+
|
|
|
+ local buildxBuilder
|
|
|
+ buildxBuilder="$("$binDir/docker-buildx-ensure.sh")" # reminder: this script *requires* BASHBREW_ARCH (to avoid "accidental amd64" mistakes)
|
|
|
+ vars="$(_jq_setenv <<<"$vars" BUILDX_BUILDER "$buildxBuilder")"
|
|
|
+
|
|
|
+ local sbomTag
|
|
|
+ sbomTag="$(grep <<<"$externalPins" -m1 '^docker/buildkit-syft-scanner:')"
|
|
|
+ sbomTag="$(_resolve_external_pins "$sbomTag")"
|
|
|
+ vars="$(_jq_setenv <<<"$vars" BASHBREW_BUILDKIT_SBOM_GENERATOR "$sbomTag")"
|
|
|
+ ;;
|
|
|
+ esac
|
|
|
+
|
|
|
+ if [ -t 1 ]; then
|
|
|
+ jq <<<"$vars"
|
|
|
+ else
|
|
|
+ cat <<<"$vars"
|
|
|
+ fi
|
|
|
+}
|
|
|
+_bashbrew_buildkit_env_setup
|