From 768651528c3796c751deab5521ce6b87a98976b5 Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Mon, 25 May 2026 16:02:55 +0300 Subject: [PATCH] =?UTF-8?q?fix(ci):=20retag=20=E2=80=94=20=D1=84=D0=B8?= =?UTF-8?q?=D0=BA=D1=81=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=208-char=20short-SHA=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=20git=20%h?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Docker push в main pipeline тегирует образ как main-${CI_COMMIT_SHORT_SHA} (GitLab гарантирует 8 chars). Retag в tag pipeline получал PARENT_SHA через `git log -1 --format=%h HEAD~1` — а %h динамически растягивает abbrev (8 → 9 chars) когда git детектит SHA-коллизию в локальном clone'е. При расхождении retag тянет main-3d3a03ab9 → "failed to resolve reference ... not found" → retag job failed → commit-prod-image-bump skipped (через needs:) → v2.41.3 (MR !261) попала на эту race. Часть retag-* выживала только потому что на их runner'е clone оказался shallower и %h дал 8 chars; параллельные jobs получали 9 → fail. Заменил на `git rev-parse HEAD~1 | cut -c1-8` — гарантированно 8 chars, матчится с CI_COMMIT_SHORT_SHA в docker pipeline. --- .gitlab-ci.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2b906b0..a8ecb85 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -481,7 +481,15 @@ docker-docs: - for i in $(seq 1 30); do docker info >/dev/null 2>&1 && break; sleep 1; done - echo "$REGISTRY_PASSWORD" | docker login "$REGISTRY" -u "$REGISTRY_USER" --password-stdin - IMG="$REGISTRY/$IMAGE_REPO/$SVC" - - PARENT_SHA=$(git log -1 --format=%h HEAD~1) + # `git log %h` динамически растягивает abbrev (8 → 9 chars) когда git + # детектит SHA-коллизию в локальном clone'е. Docker push в main pipeline + # использует CI_COMMIT_SHORT_SHA (фиксированно 8 chars per GitLab spec), + # поэтому при mismatch'е retag не находит main-<9chars> образ → + # "failed to resolve reference ... not found" → job failed, и за ним + # commit-prod-image-bump skipped. v2.41.3 (MR !261) попал на эту race. + # Используем rev-parse + cut чтобы гарантировать 8 chars независимо + # от состояния clone'а. + - PARENT_SHA=$(git rev-parse HEAD~1 | cut -c1-8) - SRC="$IMG:main-$PARENT_SHA" - echo "Re-tag $SRC → $IMG:$IMAGE_TAG (+ :latest, :$CI_COMMIT_REF_SLUG)" - docker pull "$SRC"