2021-10-25 20:04:59 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
2021-11-08 22:21:28 +01:00
|
|
|
## Setup for building multiplatform images
|
|
|
|
|
##
|
|
|
|
|
## apt install qemu-user-static
|
2021-11-03 19:54:52 +01:00
|
|
|
## docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
2021-11-08 22:21:28 +01:00
|
|
|
## docker buildx create --use --name cross
|
|
|
|
|
## docker buildx inspect --bootstrap
|
|
|
|
|
## docker buildx build --platform linux/amd64,linux/arm/v7 -t octoprint:latest --target run .
|
2021-11-03 19:54:52 +01:00
|
|
|
|
2021-10-25 20:04:59 +02:00
|
|
|
set -e
|
|
|
|
|
|
2021-11-10 19:26:36 +01:00
|
|
|
app=${1}
|
|
|
|
|
registry=${2}
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-12-30 19:38:08 -07:00
|
|
|
platform="linux/amd64,linux/arm/v7,linux/arm64/v8"
|
2021-10-28 21:06:32 +02:00
|
|
|
dockerfile=docker/${app}/Dockerfile
|
|
|
|
|
context=$(echo -n ${dockerfile} | rev | cut -f2- -d'/' | rev)
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
source=$(grep "ARG REPO" ${dockerfile} | sed -r 's/.*REPO=(.*)$/\1/g')
|
|
|
|
|
ref=$(git ls-remote ${source} HEAD | cut -f1)
|
|
|
|
|
shortref=$(echo -n ${ref} | cut -c 1-7)
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
## Explicitly build Targets, except 'build'
|
|
|
|
|
for target in $(grep "FROM .* as" ${dockerfile} | sed -r 's/.*FROM.*as (.*)/\1/g' | grep -v build); do
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
## Append Target to Tag unless it is 'run'
|
|
|
|
|
if [ "${target}" != "run" ]; then
|
|
|
|
|
tag_extra="-${target}"
|
|
|
|
|
fi
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
## Nightly
|
2021-10-28 21:32:49 +02:00
|
|
|
if docker manifest inspect ${registry}${app}:${shortref}${tag_extra} > /dev/null; then
|
|
|
|
|
echo -e "\033[0;36m## Image ${registry}${app}:${shortref}${tag_extra} already exists, nothing to do. \033[0m"
|
|
|
|
|
else
|
|
|
|
|
echo -e "\033[0;36m## Building nightly Image ${registry}${app}:${shortref}${tag_extra} \033[0m"
|
|
|
|
|
docker buildx build --build-arg VERSION=${ref} --platform ${platform} -t ${registry}${app}:${shortref}${tag_extra} -t ${registry}${app}:nightly${tag_extra} --target ${target} --push ${context}
|
|
|
|
|
fi
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
## Tags
|
|
|
|
|
for tag in $(git ls-remote --tags --sort='version:refname' --refs ${source} | tail -n3 | rev | cut -f1 -d'/' | rev); do
|
2021-10-28 21:32:49 +02:00
|
|
|
if docker manifest inspect ${registry}${app}:${tag}${tag_extra} > /dev/null; then
|
|
|
|
|
echo -e "\033[0;36m## Image ${registry}${app}:${tag}${tag_extra} already exists, nothing to do. \033[0m"
|
|
|
|
|
else
|
|
|
|
|
echo -e "\033[0;36m## Building Image for tagged release ${registry}${app}:${tag}${tag_extra} \033[0m"
|
|
|
|
|
docker buildx build --build-arg VERSION=${tag} --platform ${platform} -t ${registry}${app}:${tag}${tag_extra} --target ${target} --push ${context}
|
|
|
|
|
fi
|
2021-10-28 21:06:32 +02:00
|
|
|
done
|
2021-10-25 20:04:59 +02:00
|
|
|
|
2021-10-28 21:06:32 +02:00
|
|
|
unset tag_extra
|
2021-10-25 20:04:59 +02:00
|
|
|
done
|