ci(deploy): narrow image build and document pool settings
quality / changes (push) Successful in 7s
quality / commitlint (push) Skipped
quality / docker-check (push) Skipped
quality / openapi (push) Successful in 43s
quality / web (push) Successful in 1m20s
quality / go (push) Failing after 1m9s
quality / bird2 (push) Skipped
quality / postgres-integration (push) Failing after 2m29s
quality / legacy-compatibility (1.0.0) (push) Successful in 1m14s
quality / legacy-compatibility (2.56.2) (push) Successful in 1m34s
CD / quality (push) Failing after 8m40s
CD / publish (push) Skipped
quality / changes (push) Successful in 7s
quality / commitlint (push) Skipped
quality / docker-check (push) Skipped
quality / openapi (push) Successful in 43s
quality / web (push) Successful in 1m20s
quality / go (push) Failing after 1m9s
quality / bird2 (push) Skipped
quality / postgres-integration (push) Failing after 2m29s
quality / legacy-compatibility (1.0.0) (push) Successful in 1m14s
quality / legacy-compatibility (2.56.2) (push) Successful in 1m34s
CD / quality (push) Failing after 8m40s
CD / publish (push) Skipped
Примеры Compose задают пул соединений. Контекст сборки бинарника сужен, зеркало базовых образов обновляется явно, алерты Prometheus дополнены. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
240d83fc61
commit
5bdb1f1f93
13 files changed
+132
-55
No files matched your search
@@ -4,7 +4,8 @@
|
||||
# REGISTRY=git.shx.one/<owner> (без суффикса /evobgp-buildcache)
|
||||
#
|
||||
# Источник library-образов — Docker Hub (docker.io), не public.ecr.aws (429 Too Many Requests).
|
||||
# Если тег уже есть в Gitea — skip (без повторного pull).
|
||||
# Если тег уже есть в Gitea — skip. MIRROR_REFRESH=1 принудительно обновляет зеркала.
|
||||
# В bake передаётся immutable digest зеркала, а не его изменяемый tag.
|
||||
# Копируем только linux/amd64 — bake platforms совпадает, multi-arch индекс не нужен.
|
||||
# Шаг CD не должен падать: неуспешный copy оставляет bake на Docker Hub FROM для этой базы.
|
||||
set -eu
|
||||
@@ -13,6 +14,12 @@ CACHE_REPO="${REGISTRY}/evobgp-buildcache"
|
||||
ENV_FILE="${MIRROR_ENV_FILE:-}"
|
||||
PLATFORM="${MIRROR_PLATFORM:-linux/amd64}"
|
||||
RETRIES="${MIRROR_RETRIES:-4}"
|
||||
REFRESH="${MIRROR_REFRESH:-0}"
|
||||
|
||||
case "$REFRESH" in
|
||||
0|1) ;;
|
||||
*) echo "MIRROR_REFRESH must be 0 or 1" >&2; exit 2 ;;
|
||||
esac
|
||||
|
||||
tmp="$(mktemp)"
|
||||
cleanup() { rm -f "$tmp"; }
|
||||
@@ -22,6 +29,14 @@ dest_exists() {
|
||||
docker buildx imagetools inspect "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
dest_digest() {
|
||||
digest="$(docker buildx imagetools inspect --format '{{.Manifest.Digest}}' "$1")" || return 1
|
||||
case "$digest" in
|
||||
sha256:????????????????????????????????????????????????????????????????) printf '%s\n' "$digest" ;;
|
||||
*) echo "invalid mirror digest for $1: $digest" >&2; return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
copy_retry() {
|
||||
src="$1"
|
||||
dest="$2"
|
||||
@@ -31,9 +46,11 @@ copy_retry() {
|
||||
if docker buildx imagetools create --platform "$PLATFORM" --tag "$dest" "$src"; then
|
||||
return 0
|
||||
fi
|
||||
delay=$((n * 25))
|
||||
echo "mirror retry ${n}/${RETRIES}, sleep ${delay}s: ${dest}"
|
||||
sleep "$delay"
|
||||
if [ "$n" -lt "$RETRIES" ]; then
|
||||
delay=$((n * 25))
|
||||
echo "mirror retry ${n}/${RETRIES}, sleep ${delay}s: ${dest}"
|
||||
sleep "$delay"
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
@@ -43,30 +60,36 @@ mirror() {
|
||||
tag="$2"
|
||||
var="$3"
|
||||
dest="${CACHE_REPO}:${tag}"
|
||||
if dest_exists "$dest"; then
|
||||
if [ "$REFRESH" = 0 ] && dest_exists "$dest"; then
|
||||
echo "skip (already in registry): ${dest}"
|
||||
printf '%s=%s\n' "$var" "$dest" >>"$tmp"
|
||||
else
|
||||
echo "mirror ${src} -> ${dest} (${PLATFORM})"
|
||||
if ! copy_retry "$src" "$dest"; then
|
||||
if [ "$REFRESH" = 1 ]; then
|
||||
echo "error: refresh failed for ${dest}" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "warn: ${dest} not mirrored — bake uses upstream FROM for ${var}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
if digest="$(dest_digest "$dest")"; then
|
||||
printf '%s=%s@%s\n' "$var" "$CACHE_REPO" "$digest" >>"$tmp"
|
||||
return 0
|
||||
fi
|
||||
echo "mirror ${src} -> ${dest} (${PLATFORM})"
|
||||
if copy_retry "$src" "$dest"; then
|
||||
printf '%s=%s\n' "$var" "$dest" >>"$tmp"
|
||||
return 0
|
||||
if [ "$REFRESH" = 1 ]; then
|
||||
echo "error: cannot resolve refreshed digest for ${dest}" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "warn: ${dest} not mirrored — bake uses Docker Hub FROM for ${var}"
|
||||
echo "warn: cannot resolve digest for ${dest} — bake uses upstream FROM for ${var}"
|
||||
return 0
|
||||
}
|
||||
|
||||
mirror "docker.io/library/golang:1.24-alpine" "base-golang-1.24-alpine" BASE_GOLANG
|
||||
sleep 8
|
||||
mirror "docker.io/library/debian:bookworm-slim" "base-debian-bookworm-slim" BASE_DEBIAN
|
||||
sleep 8
|
||||
mirror "docker.io/library/node:22-alpine" "base-node-22-alpine" BASE_NODE
|
||||
sleep 8
|
||||
mirror "docker.io/library/nginx:1.27-alpine" "base-nginx-1.27-alpine" BASE_NGINX
|
||||
sleep 8
|
||||
mirror "docker.io/library/ubuntu:noble" "base-ubuntu-noble" BASE_UBUNTU
|
||||
sleep 8
|
||||
mirror "gcr.io/distroless/static-debian12:nonroot" "base-distroless-static-debian12-nonroot" BASE_DISTROLESS
|
||||
|
||||
echo "----- mirrored BASE_* -----"
|
||||
|
||||
Reference in new issue
Block a user