#!/usr/bin/env bash set -e docker-version-osarch() { if ! type docker &>/dev/null; then # docker is not installed return fi local target="$1" # "Client" or "Server" local fmtStr="{{.${target}.Os}}/{{.${target}.Arch}}" if docker version -f "$fmtStr" 2>/dev/null; then # if "docker version -f" works, let's just use that! return fi docker version | awk ' $1 ~ /^(Client|Server):$/ { section = 0 } $1 == "'"$target"':" { section = 1; next } section && $1 == "OS/Arch:" { print $2 } # old versions of Docker $1 == "OS/Arch" && $2 == "('"${target,,}"'):" { print $3 } ' } # Retrieve OS/ARCH of docker daemon, e.g. linux/amd64 export DOCKER_ENGINE_OSARCH="${DOCKER_ENGINE_OSARCH:=$(docker-version-osarch 'Server')}" export DOCKER_ENGINE_GOOS="${DOCKER_ENGINE_OSARCH%/*}" export DOCKER_ENGINE_GOARCH="${DOCKER_ENGINE_OSARCH##*/}" DOCKER_ENGINE_GOARCH=${DOCKER_ENGINE_GOARCH:=amd64} # and the client, just in case export DOCKER_CLIENT_OSARCH="$(docker-version-osarch 'Client')" export DOCKER_CLIENT_GOOS="${DOCKER_CLIENT_OSARCH%/*}" export DOCKER_CLIENT_GOARCH="${DOCKER_CLIENT_OSARCH##*/}" DOCKER_CLIENT_GOARCH=${DOCKER_CLIENT_GOARCH:=amd64} # Retrieve the architecture used in contrib/builder/(deb|rpm)/$PACKAGE_ARCH/ PACKAGE_ARCH='amd64' case "${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}" in arm) PACKAGE_ARCH='armhf' ;; arm64) PACKAGE_ARCH='aarch64' ;; amd64|ppc64le|s390x) PACKAGE_ARCH="${DOCKER_ENGINE_GOARCH:-$DOCKER_CLIENT_GOARCH}" ;; *) echo >&2 "warning: not sure how to convert '$DOCKER_ENGINE_GOARCH' to a 'Docker' arch, assuming '$PACKAGE_ARCH'" ;; esac export PACKAGE_ARCH DOCKERFILE='Dockerfile' TEST_IMAGE_NAMESPACE= case "$PACKAGE_ARCH" in amd64) case "${DOCKER_ENGINE_GOOS:-$DOCKER_CLIENT_GOOS}" in windows) DOCKERFILE='Dockerfile.windows' ;; solaris) DOCKERFILE='Dockerfile.solaris' ;; esac ;; *) DOCKERFILE="Dockerfile.$PACKAGE_ARCH" TEST_IMAGE_NAMESPACE="$PACKAGE_ARCH" ;; esac export DOCKERFILE TEST_IMAGE_NAMESPACE