metube/build-multi-platform.sh
2021-01-12 14:18:06 +01:00

59 lines
1.6 KiB
Bash
Executable file

#!/bin/bash
TAG="metube"
PUSH="false"
# Proccess Arguments
while getopts ":hhelpf:t:p:" ARGS;
do
case $ARGS in
h|help )
echo -e "Usgae:\n\t-t \"Tag\"\n\t\tuse a specific Tag\n\t-p true\n\t\tPush the Image do a registry. Needs to be logged in (docker login).\n\t-h\n\t\t Show this Help Dialog"
exit 1
;;
t )
TAG="${OPTARG}"
;;
p )
PUSH="${OPTARG}"
;;
esac
done
# Fail on Error
set -e
# Register Arm executables to run on x64 machines
docker run --rm --privileged docker/binfmt:820fdd95a9972a5308930a2bdfb8573dd4447ad3
# Test if qemu is enabeld
cat /proc/sys/fs/binfmt_misc/qemu-aarch64 | head -n 1 | grep -q "enabled"
# Create a Builder if needed
if docker buildx ls | grep -q "multiArchBuilder"; then
echo "Builder \"multiArchBuilder\" aready exists."
else
echo "Builder \"multiArchBuilder\" will be created."
docker buildx create --name "multiArchBuilder"
fi
# Switch to Builder "multiArchBuilder"
docker buildx use "multiArchBuilder"
# Test if current Builder Contains needed Architectures
BOOTSTRAP=$(docker buildx inspect --bootstrap)
echo $BOOTSTRAP | grep -q "linux/amd64"
echo $BOOTSTRAP | grep -q "linux/arm64"
echo $BOOTSTRAP | grep -q "linux/arm/v7"
# Build Image
echo "Use Tag \"$TAG\" for Build"
if [ "$PUSH" = "true" ]; then
# Build with Push
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t "$TAG" --push .
else
# Build without Push
docker buildx build --platform linux/arm,linux/arm64,linux/amd64 -t "$TAG" .
fi