Skip to content

ci: refresh Docker pin and stale label - #424

Merged
Alexkkkkk merged 2 commits into
mainfrom
automation/sync-ci-2026-11-08
Nov 8, 2026
Merged

Alexkkkkk merged 2 commits into
mainfrom
automation/sync-ci-2026-11-08

Conversation

@Alexkkkkk

@Alexkkkkk Alexkkkkk commented Nov 8, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • Refresh the pinned docker/login-action revision to v4.8.0.
  • Correct the stale PR label exemption from the obsolete automerge label to auto-merge.
  • Drop the superseded status-sync write-back changes; current main owns the validation-only status-sync design.

Validation

  • pytest -q tests/test_automation_workflows.py tests/test_sync_repository_status.py — 25 passed.
  • git diff --check passes.
  • Branch is rebased onto the current main and has no merge conflicts.

This PR intentionally does not modify the status-sync workflow.

@github-actions github-actions Bot added documentation Improvements or additions to documentation ci Continuous integration tests labels Nov 8, 2026
@Alexkkkkk

Copy link
Copy Markdown
Owner Author

Чек-лист правок — PR #424 ci: repair status sync, refresh pins and fix stale label

Alexkkkkk/mount-file#424 · ветка automation/sync-ci-2026-11-08 → main · head 8f11fb9a14 · 5 файлов, +67 / −11

Статус на момент составления: mergeable: true, mergeable_state: blocked, check runs на head — 0, ревью — 0.
Чек-лист построен по ревью review_424.md и диффу PR.


Блокирующие — без них PR не смержить

  • 1. Прогнать гейты на новом head. Head-коммит 8f11fb9a14 (docs: synchronize repository status data [skip ci]) записан старым workflow, поэтому check runs на нём = 0. Ruleset protect-main требует 11 проверок, auto-merge.yml ждёт CI-Gate, quality-gate, security-gate, dependency-review, Verify (...) на точный SHA.
    Фикс: сделать новый коммит после правок из п. 2–5 (или git commit --allow-empty), дождаться прогона, при необходимости amend + --force-with-lease.

  • 2. status-sync.yml — экспортировать AUTOMATION_TOKEN в окружение. Строка 121 проверяет shell-переменную if [ -n "${AUTOMATION_TOKEN:-}" ], но в env: (строки 35–39) объявлены только GH_TOKEN и STATUS_BRANCH. Условие всегда ложно → LABELS=(--label automation) без auto-merge, ветка auto-merge недостижима даже при настроенном секрете.
    Фикс: добавить в блок env::

    env:
      GH_TOKEN: ${{ secrets.AUTOMATION_TOKEN || secrets.GITHUB_TOKEN }}
      AUTOMATION_TOKEN: ${{ secrets.AUTOMATION_TOKEN }}
      STATUS_BRANCH: automation/status-sync

    Учесть: без AUTOMATION_TOKEN PR создаётся от github-actions[bot], и auto-merge.yml (строка 20) его пропускает — fallback рабочий, но без проверок.

  • 3. status-sync.yml — guard не видит untracked-файлы. Одинаковый код в двух шагах (строки 94–96 и 108–110): if git diff --quiet -- README.md docs/generated; then … exit 0; fi. git diff без --cached игнорирует новые docs/generated/*.json (генератор их создаёт, в workflow есть mkdir -p docs/generated). Следствия: ложное «уже синхронизировано» с выходом из шага, либо падение git commit с nothing added to commit под set -e.
    Фикс: сначала git add, потом проверять индекс:

    git add -A -- README.md docs/generated
    if git diff --cached --quiet; then
      echo 'Repository status data is already synchronized.'; exit 0
    fi
    git commit -m 'docs: synchronize repository status data'

Важные

  • 4. status-sync.yml:134 — gh pr comment "$STATUS_BRANCH". gh pr comment принимает номер или URL PR, а не имя ветки; ошибка съедается >/dev/null 2>&1 || true, поэтому комментарий «Regenerated at …» не появляется никогда.
    Фикс: получить номер и передать его:

    EXISTING=$(gh pr list --head "$STATUS_BRANCH" --state open --json number --jq '.[0].number // ""')
    if [ -z "$EXISTING" ]; then
      gh pr create --base "${{ github.event.repository.default_branch }}" \
        --head "$STATUS_BRANCH" "${LABELS[@]}" \
        --title 'docs: synchronize repository status data' --body '…'
    else
      gh pr comment "$EXISTING" --body "Regenerated at $(git rev-parse --short=12 HEAD) from ${{ github.sha }}."
    fi
  • 5. status-sync.yml — самореферентный --revision. Передаётся generate_readme.py --revision "${GITHUB_REF_NAME}"; для статус-PR это automation/status-sync, и через write-back (строки 86–102) метка служебной ветки попадает в README, который потом ляжет в main. В диффе PR это видно: Source revision: feat/issues-384-390-acceptance-gaps → Source revision: automation/sync-ci-2026-11-08.
    Фикс: передавать детерминированное значение — --revision "${GITHUB_SHA:0:12}" или базовую ветку. Побочно снимает лишний write-back-коммит на каждом статус-PR.

  • 6. tests/test_automation_workflows.py — тесты не ловят п. 2–5. Добавленные 8 строк проверяют форму строк (git push --force-with-lease, gh pr create, отсутствие [skip ci] и git push origin main), но проходят при всех трёх дефектах.
    Фикс: добавить assert'ы на AUTOMATION_TOKEN:\s*\$\{\{ внутри env:, на git diff --cached --quiet, на gh pr comment "\$EXISTING" и на отсутствие git diff --quiet --.

  • 7. status-sync.yml — явный ожидаемый SHA для force-push. git push --force-with-lease без =ref: полагается на только что полученный remote-tracking ref (локальной ветки нет, checkout свежий).
    Фикс: git push --force-with-lease=refs/heads/$STATUS_BRANCH:$(git rev-parse refs/remotes/origin/$STATUS_BRANCH).

  • 8. Описание PR — «YAML всех 22 workflows». GET /contents/.github/workflows отдаёт 21 файл.
    Фикс: поправить цифру в теле PR на 21.


Мелочи

  • 9. docker.yml — подтвердить пин docker/login-action@8aa5831fb8d48d8f76594c7ddde61ae58019f550 = v4.8.0. Пиннинг на полный SHA сохранён, но принадлежность SHA тегу в рамках ревью не проверялась (unconfirmed).
    Фикс: сверить с тегом в апстриме docker/login-action; если SHA не тот — заменить.

  • 10. Описать в PR последствие снятия [skip ci]. Write-back в ветку PR → событие synchronize → повторный прогон workflow. Сходится (revision стабилен, guard срабатывает) и гасится concurrency: cancel-in-progress: true, но удваивает запуски.
    Фикс: добавить в тело PR абзац об осознанном трейд-оффе.

  • 11. Решить владельца сгенерированных данных. В теле PR заявлен дубль status-sync.yml vs mfsync.yml; в рамках ревью не проверялось — принять как утверждение автора.
    Фикс: после мержа выбрать один workflow-владелец, второй перевести в read-only/удалить.


Проверено и правок не требует

  • stale.yml — exempt-pr-labels: 'pinned,security,auto-merge': label auto-merge в репозитории существует, automerge отсутствует → исправление устраняет реальный no-op.
  • Ruleset protect-main (id 25164610, active) существует → отказ от прямого git push origin main обоснован.
  • Fork-PR остаются read-only: условие head.repo.full_name == github.repository на месте, PR-код не исполняется (--repo-root передаётся как данные, trusted-скрипты берутся с default branch).
  • permissions понижены на уровне workflow до contents: read, повышение (contents: write, pull-requests: write) — только внутри job.

Порядок выполнения

  1. Пункты 2, 3, 4, 5, 7 — одним коммитом в automation/sync-ci-2026-11-08.
  2. Пункт 6 — те же изменения закрепить тестами в том же коммите.
  3. Пункты 8, 10 — правка тела PR.
  4. Пункт 1 — новый head, дождаться 11 зелёных проверок.
  5. Пункт 9 — до мержа, если SHA не подтверждён.
  6. Squash-мерж; пункт 11 — отдельной задачей после мержа.

Drop superseded status-sync changes and retain only the still-relevant workflow fixes on current main.

Co-authored-by: Manus <dev-agent@manus.ai>
@Alexkkkkk
Alexkkkkk force-pushed the automation/sync-ci-2026-11-08 branch from 8f11fb9 to bd7323f Compare November 8, 2026 09:52
@github-actions github-actions Bot removed documentation Improvements or additions to documentation tests labels Nov 8, 2026
Regenerate the canonical product status after the current main status contract update.

Co-authored-by: Manus <dev-agent@manus.ai>
@Alexkkkkk Alexkkkkk changed the title ci: repair status sync, refresh pins and fix stale label ci: refresh Docker pin and stale label Nov 8, 2026
@Alexkkkkk
Alexkkkkk merged commit a9e0027 into main Nov 8, 2026
46 of 51 checks passed
@Alexkkkkk
Alexkkkkk deleted the automation/sync-ci-2026-11-08 branch November 8, 2026 13:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Continuous integration

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant