59 lines
1.4 KiB
Bash
Executable File
59 lines
1.4 KiB
Bash
Executable File
#!/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 <<USAGE
|
|
Usage: scripts/build_harbor_bootstrap_bundle.sh [--images-file <path>] [--bundle-file <path>] [--docker-config <path>] [--platform <linux/arm64>]
|
|
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
|