#!/usr/bin/env bash . $(dirname $0)/util : ${TARGETPLATFORM=} : ${CONTINUOUS_INTEGRATION=} set -ex progressFlag="" if [ "$CONTINUOUS_INTEGRATION" == "true" ]; then progressFlag="--progress=plain"; fi buildkitdTagsFlags="" if [ -n "$BUILDKITD_TAGS" ]; then buildkitdTagsFlags="--opt build-arg:BUILDKITD_TAGS=\"$BUILDKITD_TAGS\"" fi binariesDocker() { mkdir -p bin/tmp export DOCKER_BUILDKIT=1 iidfile=$(mktemp -t docker-iidfile.XXXXXXXXXX) target=$(echo "$TARGETPLATFORM" | cut -d"/" -f1) if [ -z "$target" ]; then target="linux" fi docker build $platformFlag --build-arg BUILDKITD_TAGS="${BUILDKITD_TAGS}" --target binaries-$target --iidfile $iidfile --force-rm . iid=$(cat $iidfile) containerID=$(docker create $iid copy) docker cp $containerID:/ bin/tmp mv bin/tmp/build* bin/ rm -rf bin/tmp docker rm $containerID docker rmi -f $iid rm -f $iidfile } binaries() { platformFlag="" if [ ! -z "$TARGETPLATFORM" ]; then platformFlag="--opt platform=$TARGETPLATFORM" fi buildctl build $progressFlag --frontend=dockerfile.v0 \ --local context=. --local dockerfile=. \ $buildkitdTagsFlags --opt target=binaries $platformFlag \ --output type=local,dest=./bin/ } case $buildmode in "buildkit") binaries ;; "docker-buildkit") binariesDocker ;; *) echo "Unsupported build mode: $buildmode" >&2 exit 1 ;; esac