refactor(tools): forgejo-first dispatch, cut GitHub fallback #10
Loading…
Reference in a new issue
No description provided.
Delete branch "refactor/tools/forgejo-first-dispatch"
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?
Что сделано
Вырезаны все GitHub-fallback ветки (5 мест) и починены 5 противоречий Forgejo vs GitHub в tools/scripts. Теперь
FORGEJO_URLenv var обязательна — без неё tools возвращают понятную ошибку, fallback на локальныйghbinary удалён.5 fallback вырезаны:
_shared.ts:runGh—spawnSync("gh", ...)fallback заменён на ошибкуFORGEJO_URL env var requiredcreate-readme.ts— веткаspawnSync("gh", "api", ...)для GET/PUT README.md удалена, оставлен только Forgejofetchпутьpipeline-status.py:run_cmd—subprocess.run(args)fallback дляghargv удалён,ghвсегда идёт через_forgejo_gh_dispatchspec-status.py:run_cmd—subprocess.run(args)fallback дляgh issue viewудалёнproject-status.py:run_cmd—subprocess.run(args)fallback дляgh apiудалён5 противоречий починены:
_forgejo_ci_rollup): commit status API/commits/{sha}/status→/actions/tasksс фильтром поhead_sha, маппингstatus/conclusionв GitHub-style rollup_check_branch_protection): строковый matchpull_request/required_status_checks(GitHub Rules API) → проверка Forgejo полейenable_push,required_approvals,enable_status_check_forgejo_auth_check): формальный(0, "", "")→ реальныйGET /userс FORGEJO_TOKEN (200=OK, 401/403=invalid token)_forgejo_pr_dispatchlist):?state=openбез пагинации → цикл?page=N&limit=50пока ответ не пустойgh pr checks/gh run view(не реализованы в dispatch) → ссылки на веб-UIhttps://git.slaid098.dev/{repo}/actionsДинамический clone URL (
create-readme.ts:63): hardcodedhttps://github.com/slaid098/...→process.env.FORGEJO_URL ? ${FORGEJO_URL}/slaid098/${repo_name}.git : github fallback.Расширение
_forgejo_gh_dispatch: добавленgh run list→GET /actions/tasks?limit=N(форматdatabaseId,conclusion) иgh run view <id>→ фильтр по id →display_title+ url.Descriptions в 11 tools: "GitHub issue" → "issue", "GitHub PR" → "PR", "gh pr merge" → "merge PR", "gh pr comment" → "post review comment", "Actions API" → "CI", "branch protection via gh" → "branch protection via API". Docstrings в 3 скриптах: "GitHub" → host-agnostic.
Почему
GitHub-аккаунт
slaid098удалён безвозвратно. Код уже имел Forgejo dispatch, но GitHub-fallback ветки оставались dead code, а 5 противоречий приводили к некорректным результатам в Forgejo-режиме: CI rollup не видел Actions runs, branch protection проверял несуществующие GitHub поля, auth check был формальным, pagination терял >50 PR, hints вели к неработающим командам. Этот PR завершает портирование на Forgejo (issue #1 устарел и может быть закрыт).Watch out
create-issue,create-pr,merge-pr,post-review,pipeline-status,project-status,spec-statusте жеFORGEJO_URLтеперь обязательна для всех git-host operations — без неё tools возвращают ошибку (НЕ fallback наgh)github.comостаётся только в: (1) docstring-примерахparse_remote_url(generic URL), (2)create-readme.ts:63fallback URL еслиFORGEJO_URLне задан — Forgejo-first, fallback для обратной совместимости_forgejo_run_dispatchдляgh run viewвозвращаетdisplay_title+ url (деталей jobs через API нет — это OK по разведке issue)/actions/tasksне поддерживает пагинацию по разведке — возвращаем первые 50 runs + hint если большеast.parseдля всех 3 скриптов); tsc недоступен в окружении, TS правки — точечные edit-заменыcreate-prtool падает на Forgejo с HTTP 422 (head field required) — этот PR создан через raw Forgejo API как workaround; фикс в issue #9Pending
create-prtool в Forgejo-режимеCloses #5
Code Review Summary
Рефакторинг вырезает GitHub fallback в dispatch'е: при
FORGEJO_URLunset все 3 Python-оракула и_shared.tsвозвращают explicit error вместо fallback на локальныйgh. Контракты сохранены (shape{status, stdout, stderr}), тесты переведены на fetch-stub, добавленconftest.pyс autouse env-фикстурой. Качество высокое, изменения консистентны.Positives
pipeline-status.py,project-status.py,spec-status.py,_shared.ts) — единое сообщение об ошибке.pipeline-status.py: исправлен off-by-one в_forgejo_pr_dispatch(action→args[2], num→args[3]) и_forgejo_gh_dispatchissue branch (args[3]) — корректная индексация дляgh pr view N/gh issue view N.pipeline-status.py: CI rollup переведён на/actions/tasks(Forgejo Actions), добавлены_forgejo_run_dispatch/_forgejo_run_list/_forgejo_run_view, пагинация PR list — корректно.project-status.py:_check_branch_protectionпарсит Forgejo-поля (enable_push,enable_status_check,required_approvals) вместо string-matching GitHub Rules API — корректно.create-readme.ts: GitHub API path (spawnSyncgh api) заменён на прямой fetch Forgejo API — убран дублирующий путь._ts_loader.mjsрасширена dual stub (spawnSync + fetch), все 5 test-файлов обновлены на fetch-assertions,conftest.pyс autouseFORGEJO_URL/FORGEJO_TOKEN— чисто.Suggestions (info, not blocking)
args[2]используется для issue number, но gh argv =["gh","issue","view",N,...]→ number вargs[3].args[2]="view"→"view".lstrip("-").isdigit()=False→ ветка issue view никогда не выполняется, dispatch падает в"not supported in Forgejo mode". Это pre-existing баг (PR не менял индексацию spec-status, только FORGEJO_URL guard). Рекомендуется создать отдельный issue для fix:args[2]→args[3]+len(args) > 2→len(args) > 3.Verdict: APPROVE