#!/usr/bin/env bash set -euo pipefail IMAGES_FILE="scripts/bootstrap/harbor-bootstrap-images.txt" BUNDLE_FILE="artifacts/harbor-bootstrap-v2.14.1-arm64.tar.zst" DOCKER_CONFIG_PATH="" PLATFORM="linux/arm64" while [[ $# -gt 0 ]]; do case "$1" in --images-file) IMAGES_FILE="${2:?missing images file}" shift 2 ;; --bundle-file) BUNDLE_FILE="${2:?missing bundle file}" shift 2 ;; --docker-config) DOCKER_CONFIG_PATH="${2:?missing docker config path}" shift 2 ;; --platform) PLATFORM="${2:?missing platform}" shift 2 ;; -h|--help) cat <] [--bundle-file ] [--docker-config ] [--platform ] USAGE exit 0 ;; *) echo "Unknown option: $1" >&2 exit 1 ;; esac done if [[ -n "${DOCKER_CONFIG_PATH}" ]]; then export DOCKER_CONFIG="${DOCKER_CONFIG_PATH}" fi mapfile -t IMAGES < <(grep -v '^[[:space:]]*#' "${IMAGES_FILE}" | sed '/^[[:space:]]*$/d') if [[ ${#IMAGES[@]} -eq 0 ]]; then echo "No images found in ${IMAGES_FILE}" >&2 exit 1 fi mkdir -p "$(dirname "${BUNDLE_FILE}")" for image in "${IMAGES[@]}"; do echo "Pulling ${image}" >&2 docker pull --platform "${PLATFORM}" "${image}" >/dev/null done docker save "${IMAGES[@]}" | zstd -T0 -19 -o "${BUNDLE_FILE}" echo "Wrote ${BUNDLE_FILE}" >&2