#!/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
