[infra] Gitea git-http отдаёт пустой pack — git clone/fetch не работают (actions/checkout падает) #59
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Найдено: devops при выполнении #17 (CI-пайплайн, попытка прогнать
actions/checkoutна runner'е). Приоритет: высокий — ломает любой git-доступ к репозиторию по HTTP и вместе с ним сверку git-blob-SHA.Симптомы
С любой машины (хост агентов
192.168.1.44, build-хост192.168.1.147, job-контейнер runner'а):Protocol v0:
fatal: protocol error: bad pack header.В CI это выглядит так (из лога
actions/checkout@v4):Что именно ломается (измерено)
GIT_TRACE_CURLнаgit clone --depth 1показывает, что сервер отвечает HTTP 200 и сам объявляет крошечное тело:Т.е. в ответе только
shallow-infoи маркерpackfile— ни одного объекта; pack пустой, поток закрыт корректно (0000). Это не клиент и не сеть (Content-Length задаёт сервер).Что при этом работает
git ls-remoteGET /archive/<sha>.tar.gzGET /api/v1/version/v2/Т.е. объекты в репозитории живы (archive их читает), падает именно
git-upload-pack.Гипотезы (нужен доступ к хосту Gitea 192.168.1.111)
git pack-objectsна стороне Gitea завершается пусто/с ошибкой — классика при переполненном диске или/tmp(pack-objects пишет временные файлы).git-upload-pack(менее вероятно — Content-Length ставит сам Gitea).Что нужно сделать (эскалация владельцу, у агентов нет SSH к 192.168.1.111)
Временный обход (уже в CI)
В
.gitea/workflows/ci.ymlосновной путь —actions/checkout@v4сcontinue-on-error: true; при падении исходники забираются архивом:Когда git-http починят, fallback перестанет срабатывать сам.
Refs #17
devops — дополнение к отчёту (28.10, 23:40 MSK).
1. Симптом подтверждён на всех workflow
Помимо
ci.yml(где обход уже есть), дефект ломает и второй workflow —contract-openapi.yml. Из лога job'аts-client-is-current:Прогоны
runs/60/jobs/178,runs/60/jobs/179,runs/62/jobs/186,runs/62/jobs/187— падение наcheckoutза 28–50 с.Следствие: статусы
contract-openapi / openapi-contractиcontract-openapi / ts-client-is-currentкрасные на каждом коммите → combined status любого PR =failure(проверено на PR #60: всеci / *зелёные/skipped, но combined = failure).2. Обход внедрён и проверен (PR #63)
fix/59-checkout-fallback→ PR #63: в оба job'а добавлен тот же archive-fallback, что вci.yml(/archive/<sha>.tar.gz, endpoint работает), плюсts-client-is-currentумеет сравнивать без.git(sha256 сгенерированногоschema.d.ts) — семантика проверок не менялась.Живой прогон: run #64 (sha
ca14ae6) — success:openapi-contractpytest(contract + unit)ts-client-is-current3. Что остаётся на хосте Gitea
Обход не отменяет корневую причину:
git-upload-packпо-прежнему отдаёт пустой pack (Content-Length: 90, без объектов),git clone/fetchне работают нигде. Диагностика из шапки этого issue в силе — нужныdf -h / /tmp,git fsck --full,git repack -adfвнутри контейнера Gitea (нет SSH к192.168.1.111).Когда upload-pack починят, fallback перестанет срабатывать сам (основной путь —
actions/checkout), менять ничего не придётся.Refs #17