blob: c4ee001cd1d804615f97627bab85865561aee2b5 [file]
#!/bin/bash
help() {
echo "Helper script to build single or multiplatform (depending on the input parameter)"
echo "images for both almalinux and ubuntu distributions."
echo "DOCKERFILE environment variable points to the name of the Dockerfile to use, which"
echo "is Dockerfile by default."
echo ""
echo "Syntax: $0 [--load|--push]"
echo "options:"
echo "load Builds single platform (of runner's system type) images and loads them into"
echo " into local docker registry (they are visible through the 'docker images'"
echo " command."
echo "push Builds both 'amd64' and 'arm64' architectures images and pushes them to the."
echo " dockerhub. Note that in this case one needs to be logged in to"
echo " 'gerritcodereview' account and images are not visible in the local registry."
echo
}
DOCKERFILE=${DOCKERFILE:-Dockerfile}
DESTINATION=$1
if ! [[ "$DESTINATION" =~ ^(--load|--push)$ ]]; then
help
exit
fi
if [[ $DESTINATION == *load ]]; then
if [[ $(uname -m) == *arm64* ]]; then
PLATFORMS="linux/arm64"
else
PLATFORMS="linux/amd64"
fi
else
PLATFORMS="linux/amd64,linux/arm64"
fi
echo "### Building images for $DESTINATION destination and $PLATFORMS platforms"
BUILDER=gerrit-multiplatform-image-builder
DOCKER_USER=gerritcodereview/gerrit
function create_builder() {
if [[ "$OSTYPE" == "linux"* ]]; then
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
fi
docker buildx create --name $BUILDER --platform "$PLATFORMS" --driver docker-container --use
docker buildx inspect --bootstrap
}
STATUS="$(docker buildx inspect $BUILDER 2>&1 | grep Status:)"
if [ "$?" -ne "0" ]; then
set -e
echo "### Multi-platform builder $BUILDER doesn't exist and will be created."
create_builder
else
set -e
STATUS="${STATUS##* }"
if [[ $STATUS == *running* ]]; then
echo "### Multi-platform builder $BUILDER is up and running."
else
echo "### Multi-platform builder $BUILDER exists but it doesn't run. It will be re-created."
docker buildx rm $BUILDER
create_builder
fi
fi
VERSION=$(git describe)
VERSION=${VERSION:1}
echo
echo "### Building almalinux multi-platform: [$PLATFORMS] iamges"
(cd almalinux/10 && docker buildx build -f $DOCKERFILE --platform "$PLATFORMS" --no-cache -t "$DOCKER_USER:${VERSION}-almalinux10" -t "$DOCKER_USER:$VERSION" "$DESTINATION" .)
echo
echo "### Building ubuntu multi-platform: [$PLATFORMS] iamges"
(cd ubuntu/26 && docker buildx build -f $DOCKERFILE --platform "$PLATFORMS" --no-cache -t "$DOCKER_USER:${VERSION}-ubuntu26" "$DESTINATION" .)
echo
echo "### Removing multi-platform builder"
echo y | docker buildx prune
docker buildx stop $BUILDER
docker buildx rm $BUILDER