From 8741f3f6d7513d5f03ad14ca7a5c42b136d5d7e1 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 24 Sep 2026 10:08:20 +0300 Subject: [PATCH] ci: mirror process.yml in main after #643 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Конвейер исполняется из ветки по умолчанию; файл обязан совпадать с dev. Зеркало dev: ребейз перед ревью пересобирает docs/reviews/INDEX.md вместо отказа. Issue: #643 User-Visible: no --- .github/workflows/process.yml | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/.github/workflows/process.yml b/.github/workflows/process.yml index 04226fae..efd9d825 100644 --- a/.github/workflows/process.yml +++ b/.github/workflows/process.yml @@ -413,11 +413,27 @@ jobs: behind=$(git rev-list --count "HEAD..origin/dev") before=$(git rev-parse "origin/$BRANCH") echo "dev впереди на $behind коммит(ов) — привожу ветку" - if ! git rebase origin/dev; then - # Список снимается ДО abort: он же снимает состояние конфликта, и - # тогда автору достаётся «не ребейзится» без единого имени файла (#364). - files=$(git diff --name-only --diff-filter=U | sort -u | paste -sd'\n' -) - git rebase --abort || true + # #643: doc-коммит ветки конфликтует с документами других задач в dev + # только в генерируемом docs/reviews/INDEX.md — всегда, на каждом + # сдвиге dev. Помощник ребейза пересобирает индекс по каталогу, если + # ВСЕ конфликты остановки — индекс, и отказывает (с abort) на любом + # другом. Список конфликтов он снимает ДО abort (#364) и печатает в + # stdout по строке. Помощник берётся из dev, а не из ветки: ветка, + # отставшая от dev, его ещё не несёт. + tools="$RUNNER_TEMP/rebase-tools" + rm -rf "$tools" && mkdir -p "$tools" + git archive origin/dev scripts | tar -x -C "$tools" + code=0 + files=$(node "$tools/scripts/rebase-generated.mjs" --onto=origin/dev) || code=$? + # Код 3 — отказ с перечнем (ребейз отменён); любой другой ненулевой — + # сбой самого помощника, конфликтом ветки он не выдаётся. + if [ "$code" -ne 0 ] && [ "$code" -ne 3 ]; then + git rebase --abort 2>/dev/null || true + echo "::error::помощник ребейза упал (код $code) — это сбой конвейера, а не конфликт ветки" + exit 1 + fi + if [ "$code" -eq 3 ]; then + files=$(printf '%s\n' "$files" | sed '/^$/d' | sort -u | paste -sd'\n' -) { echo 'conflict=true' echo 'conflicts<