#!/usr/bin/env bash
# shellcheck shell=bash
# Host wrapper for the in-container cert generator.
# See docs/contributing/environment/cache.md.

set -euo pipefail

: "${INFINITO_CACHE_PACKAGE_FRONTEND_CA_DIR:?Source scripts/meta/env/load.sh first}"
: "${INFINITO_CACHE_PACKAGE_FRONTEND_CERTS_DIR:?Source scripts/meta/env/load.sh first}"

REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"
INNER_SCRIPT="${REPO_ROOT}/compose/package-cache-frontend/cert-gen.sh"

if [[ ! -r "${INNER_SCRIPT}" ]]; then
	echo "[package-frontend-certs] missing inner script: ${INNER_SCRIPT}" >&2
	exit 1
fi

: "${INFINITO_CACHE_PACKAGE_FRONTEND_INIT_IMAGE:?Source scripts/meta/env/load.sh first}"
ALPINE_IMAGE="${INFINITO_CACHE_PACKAGE_FRONTEND_INIT_IMAGE}"

if ! MAX_ATTEMPTS=3 RETRY_DELAY_SECONDS=10 \
	"${REPO_ROOT}/scripts/github/runner/pull_with_retry.sh" "${ALPINE_IMAGE}"; then
	echo "[package-frontend-certs] could not pull ${ALPINE_IMAGE}; falling back to a cached copy" >&2
fi

exec docker run --rm \
	-v "${INFINITO_CACHE_PACKAGE_FRONTEND_CA_DIR}:/ca" \
	-v "${INFINITO_CACHE_PACKAGE_FRONTEND_CERTS_DIR}:/certs" \
	-v "${INNER_SCRIPT}:/work/cert-gen.sh:ro" \
	--entrypoint /bin/sh \
	"${ALPINE_IMAGE}" \
	/work/cert-gen.sh
