From 16197f7a6c9ac5ad26e52ba0d6c1d09e9fbd3116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joachim=20Schl=C3=B6ffel?= Date: Thu, 8 Oct 2026 10:47:21 +0200 Subject: [PATCH] rebuild when Alpine registry index is absent --- scripts/apk/ci-package-cache.sh | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/scripts/apk/ci-package-cache.sh b/scripts/apk/ci-package-cache.sh index 8117634..f0eaef4 100755 --- a/scripts/apk/ci-package-cache.sh +++ b/scripts/apk/ci-package-cache.sh @@ -30,16 +30,30 @@ registry_key_url() { } download_registry_metadata() { - local arch url key_dir + local arch url key_dir http_status require_registry_config INSTANCE_URL "${instance_url}" require_registry_config PACKAGE_OWNER "${owner}" + declare -gA registry_index_available=() mkdir -p "${registry_cache}" url="$(registry_url)" for arch in ${arches}; do - curl --fail --silent --show-error --location \ + if http_status="$(curl --fail --silent --location \ --output "${registry_cache}/${arch}.APKINDEX.tar.gz" \ - "${url}/${arch}/APKINDEX.tar.gz" + --write-out '%{http_code}' \ + "${url}/${arch}/APKINDEX.tar.gz")"; then + registry_index_available["${arch}"]=1 + continue + fi + if [[ "${http_status}" == 404 ]]; then + registry_index_available["${arch}"]=0 + printf 'Registry index is absent: %s/%s/APKINDEX.tar.gz; treating it as empty\n' \ + "${url}" "${arch}" >&2 + continue + fi + printf 'failed to download registry index (%s): %s/%s/APKINDEX.tar.gz\n' \ + "${http_status:-curl error}" "${url}" "${arch}" >&2 + return 1 done key_dir="${registry_cache}/keys" mkdir -p "${key_dir}" @@ -59,6 +73,7 @@ load_registry_index() { declare -gA registry_latest_versions=() for arch in ${arches}; do + [[ "${registry_index_available[${arch}]:-0}" == 1 ]] || continue while IFS=$'\t' read -r package_name package_version; do [[ -n "${package_name}" && -n "${package_version}" ]] || continue registry_key="${arch}|${package_name}"