#!/bin/bash

set -e
set -u
set -o pipefail

DISTS=${DISTS:-"bullseye
bookworm
trixie
latest
"}

BASENAME=bitnami/minideb
DOCKER_REGISTRY=${DOCKER_REGISTRY:-"docker.io"}
PLATFORMS=${PLATFORMS:-amd64 arm64}
DRY_RUN=${DRY_RUN:-}
read -r -a ARCHS <<<"$PLATFORMS"

run_docker() {
    if [[ -n "${DRY_RUN:-}" ]]; then
        echo "DRY RUN docker ${*}"
    else
        docker "$@"
    fi
}

list_includes() {
    local list=""
    local element=""
    list=${1?You must provide a list}
    element=${2:?You must provide an element}
    for candidate in $list; do
        if [[ "$candidate" == "$element" ]]; then
            true
            return
        fi
    done
    false
    return
}

if [ -n "${DOCKER_PASSWORD:-}" ]; then
    echo "$DOCKER_PASSWORD" | run_docker login -u "$DOCKER_USERNAME" --password-stdin "${DOCKER_REGISTRY}"
fi

push_manifest() {
    local image=""
    local archs=""
    image="${1:?You must provide the image base to publish}"
    archs=("${@:2}")
    local arch_images=()
    for arch in "${archs[@]}"; do
        arch_images+=("$image-$arch")
    done
    run_docker manifest create "$image" "${arch_images[@]}"
    run_docker manifest push "$image"
}

tags=()

for DIST in $DISTS; do
    tags+=("$DIST")
done

repositories=("${DOCKER_REGISTRY}/${BASENAME}")

for tag in "${tags[@]}"; do
    for repo in "${repositories[@]}"; do
        push_manifest "$repo:$tag" "${ARCHS[@]}"
    done
done
