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