fix(tools): port remaining GitHub-specific paths to Forgejo (5 fixes) #1
Loading…
Add table
Reference in a new issue
No description provided.
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?
Контекст
После миграции с GitHub на Forgejo основной pipeline (ISSUE→IMPLEMENT→CI→REVIEW→MERGE→MEMORY) портирован и работает (коммиты
93e7843,0fbf1d9,9dabc57на main в Forgejo). Однако аудит выявил 3 бага и 2 гэпа — оставшиеся GitHub-specific пути, которые нужно закрыть для полной паритетности.ВАЖНО: портированные tools живут в репозитории
opencode-configна Forgejo (веткаmain). Для работы нужно клонировать:git clone https://slaid098:2cbcfa4b8f269bed7f1323b418cc7c11637f5cb7@git.slaid098.dev/slaid098/opencode-config.gitи работать в клоне. Портированный код — в.opencode/tools/_shared.ts(Forgejo dispatch черезcallForgejoGh),.opencode/scripts/pipeline-status.py(_forgejo_pr_view,_forgejo_gh_dispatch,_forgejo_ci_rollup), и т.д.Env:
FORGEJO_URL=https://git.slaid098.dev,FORGEJO_TOKEN=2cbcfa4b8f269bed7f1323b418cc7c11637f5cb7.Задача
Применить 5 фиксов:
Fix #1 (BUG, high) —
create-readme.tsхардкодgithub.comФайл:
.opencode/tools/create-readme.ts, ~строка 62-64.Текущее: хардкод
https://github.com/slaid098/${args.repo_name}.gitв clone URL генерируемого README.Фикс: брать host из
FORGEJO_URLесли задан, иначеgithub.com:Fix #2 (GAP, medium) —
pipeline-status.pyheadRefNameвозвращает пустую строкуФайл:
.opencode/scripts/pipeline-status.py, функция_forgejo_pr_view.Forgejo вкладывает ветку в
pr.head.ref, не top-levelheadRefName.run-pipelineTemplate C/D получает пустую ветку для fix-ci сабагента.Фикс: добавить маппинг перед generic fallback:
Fix #3 (BUG, medium) —
project-status.pybranch-protection field namesФайл:
.opencode/scripts/project-status.py, функция_check_branch_protection.Текущее: string-match на GitHub field names (
pull_request,required_status_checks), которых нет в ForgejoBranchProtectionschema (тамenable_status_check,required_approvals,block_on_rejected_reviews). Всегда WARN даже при настроенной защите.Фикс: матчить Forgejo field names:
Также: 404 (no rule) → WARN "branch protection: правило не настроено", не "gh api не отвечает".
Fix #4 (GAP, low) —
releaseskill не портированФайл:
.opencode/skills/release/SKILL.md+ нетreleasetool.Forgejo endpoint:
POST /api/v1/repos/{owner}/{repo}/releases.Фикс: добавить
releasedispatch в_shared.tsдляgh release create <tag>→POST /repos/{full}/releasesbody{tag_name, name, body}. Создатьrelease.tstool-обёртку по аналогии сmerge-pr.ts. ОбновитьreleaseSKILL.md.Fix #5 (GAP, low) —
gh issue listне диспетчеризуетсяФайл:
.opencode/scripts/pipeline-status.py,_forgejo_gh_dispatch.Сейчас диспетчеризуется только
gh issue view.gh issue list(используется вbug-discoveryskill для dup-check) спавнит реальныйgh→ fail на Forgejo.Фикс: добавить dispatch
gh issue list --repo <R>→GET /repos/{repo}/issues?state=open.Контракты
FORGEJO_URLне задан, всё работает как раньше.FORGEJO_URLset → Forgejo path; unset → GitHub path.Инварианты
create-readme.tsGitHub fallback (безFORGEJO_URL) выдаёт тот жеgithub.comURL.pipeline-status.pyCI gate (черезstatusCheckRollup→ commit-status) НЕ затрагивается.npm run typecheckзелёный). Python —ruff/mypyесли настроены.Граничные случаи
pr.headможет бытьnullдля удалённой ветки — использовать.get("head", {})безопасно.tag_name/name/body.gh issue listс--state closedили--label— маппить на query params Forgejo API.Влияние на связанные компоненты
create-readmetool: Fix #1 → все новые README указывают на правильный хост.run-pipelineskill: Fix #2 → fix-ci сабагент получает корректную ветку.project-statusoracle: Fix #3 → корректный verdict при настроенной branch protection.releaseskill: Fix #4 → работает на Forgejo (сейчас падает).bug-discovery/issueskills: Fix #5 → dup-check работает на Forgejo.Вне scope
gh run list/gh run view.Критерии приемки
create-readme.ts: приFORGEJO_URL=https://git.slaid098.devгенерируетgit clone https://git.slaid098.dev/slaid098/<repo>.git. БезFORGEJO_URL—github.com.pipeline-status.py:gh pr view N --json headRefNameвозвращает реальную ветку (не"").project-status.py: при существующей branch protection сenable_status_check+required_approvals→ OK. При 404 → WARN "правило не настроено".releasetool: создаёт release на Forgejo черезPOST /repos/{full}/releases. Возвращает URL.pipeline-status.py:gh issue list --repo slaid098/opencode-configвозвращает JSON list issues.