1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
#!/bin/bash
export DOCKER_BUILDKIT=1
: "${IMAGE_PREFIX:=docker.io/labgrid/}"
: "${IMAGE_TAG:=latest}"
die () {
local msg
msg="${1}"
echo "[fatal] ${msg}" >&2
exit 1
}
log_info() {
local msg
msg="${1}"
echo "[info] ${msg}"
}
has_docker() {
command -v docker >/dev/null 2>&1
}
has_podman() {
command -v podman >/dev/null 2>&1
}
has_buildx() {
local docker_cmd
docker_cmd="${1}"
"${docker_cmd}" buildx version >/dev/null 2>&1
}
get_docker_cmd() {
local docker_cmd
docker_cmd="${1}"
if [ -n "${docker_cmd}" ]; then
echo "${docker_cmd}"
return
fi
if has_docker; then
echo "docker"
else
echo "podman"
fi
}
perform_regular_build() {
local docker_cmd script_dir version
docker_cmd="${1}"
script_dir="${2}"
version="${3}"
extra_args=("${@:4}")
log_info "building for native platform only."
for t in client exporter coordinator; do
"${docker_cmd}" build --build-arg VERSION="${version}" \
--target labgrid-${t} -t "${IMAGE_PREFIX}${t}:${IMAGE_TAG}" -f "${script_dir}/Dockerfile" \
"${extra_args[@]}" .
done
}
perform_docker_buildx_build() {
local docker_cmd script_dir version
docker_cmd="${1}"
script_dir="${2}"
version="${3}"
extra_args=("${@:4}")
for t in client exporter coordinator; do
"${docker_cmd}" buildx build --build-arg VERSION="${version}" \
--target labgrid-${t} -t "${IMAGE_PREFIX}${t}:${IMAGE_TAG}" -f "${script_dir}/Dockerfile" \
"${extra_args[@]}" .
done
}
main() {
local script_dir version
if ! has_docker && ! has_podman; then
die "Neither docker nor podman could be found."
fi
script_dir="$(dirname "$(realpath "${BASH_SOURCE:-$0}")")"
version="$(python -m setuptools_scm)"
docker_cmd="$(get_docker_cmd "${DOCKER}")"
cd "${script_dir}/.." || die "Could not cd into repo root dir"
if has_buildx "${docker_cmd}"; then
perform_docker_buildx_build "${docker_cmd}" "${script_dir}" "${version}" "${@}"
else
perform_regular_build "${docker_cmd}" "${script_dir}" "${version}" "${@}"
fi
}
main "${@}"
|