refactor(templates): pyproject URLs to Forgejo, remove dependabot, sync project-template skill #8
Loading…
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?
Контекст
PR #1-#3 адаптировали основной репо opencode-config под Forgejo. Cookiecutter templates (
backend/,cli/,fullstack/) всё ещё содержат GitHub-эру: hardcodedgithub.comURLs вpyproject.toml,.github/dependabot.yml(GitHub-only фича)..github/workflows/ci.ymlв шаблонах оставляем (Forgejo понимает.github/workflows/, рабочий CI — не трогаем).project-template/SKILL.mdTemplate GITHUB переписан на Template FORGEJO в PR #2 — этот PR синхронизирует реальные template-файлы с skill-инструкциями.Задача
3
pyproject.tomlв templates —[project.urls]github.com → git.slaid098.dev:.opencode/templates/cli/{{cookiecutter.project_name}}/pyproject.tomlL39-41:Homepage = "https://github.com/slaid098/{{ cookiecutter.project_name }}"→https://git.slaid098.dev/slaid098/{{ cookiecutter.project_name }}Repository = ...→ то жеIssues = "https://github.com/slaid098/{{ cookiecutter.project_name }}/issues"→https://git.slaid098.dev/slaid098/{{ cookiecutter.project_name }}/issues.opencode/templates/backend/{{cookiecutter.project_name}}/pyproject.tomlL47-49 — то же.opencode/templates/fullstack/{{cookiecutter.project_name}}/backend/pyproject.tomlL47-49 — то же5
.github/dependabot.yml— удалить:.opencode/templates/cli/{{cookiecutter.project_name}}/.github/dependabot.yml.opencode/templates/backend/{{cookiecutter.project_name}}/.github/dependabot.yml.opencode/templates/fullstack/{{cookiecutter.project_name}}/.github/dependabot.yml.opencode/templates/fullstack/{{cookiecutter.project_name}}/backend/.github/dependabot.ymlrenovate.json(опционально, НЕ в этом PR — пользователь сам решит когда добавить). Просто удалить dependabot.yml — новые проекты будут без auto-dependency-updates. Это OK..github/workflows/ci.ymlв templates — НЕ трогать:.github/workflows/(act_runner совместим с GitHub Actions синтаксисом).github/workflows/ci.yml)actions/*references в шаблонах — оставить как есть (на Forgejo act_runner работает черезhttps://code.forgejo.org/actions/*mirror, или preinstalled из runner image — зависит от инстанса)actions/setup-uv— проверить (на code.forgejo.org его нет, 404). Если есть — заменить на preinstalled uv approach (как в основном репо ci.yml, последний коммит "drop setup-uv"). Если нет — ничего не делать.project-template/SKILL.md— синхронизировать с реальными template-файлами:renovate.json— добавитьrenovate.jsontemplate (опционально, если пользователь хочет auto-updates) или убрать упоминаниеproject-template/SKILL.mdL124 (финальный репорт) —GitHub: https://github.com/<owner>/<project_name>→Forgejo: https://git.slaid098.dev/<owner>/<project_name>(если ещё не обновлено в PR #2)Cookiecutter
hooks/— НЕ трогать:pre_gen_project.py(валидация project_name) — нейтральнаpost_gen_project.py(cleanup) — нейтральнаКонтракты
pyproject.toml[project.urls]: 3 файла × 3 URLs = 9 замен (Homepage, Repository, Issues)dependabot.yml: 5 файлов удалить (или 4 если в fullstack корневой нет — проверить).github/workflows/ci.yml: 5 файлов — НЕ трогать (рабочий CI)project-template/SKILL.md: синхронизация с PR #2 (Template FORGEJO){{ cookiecutter.project_name }}— НЕ менять (плейсхолдер)Инварианты
.github/workflows/ci.ymlв шаблонах — НЕ трогать (Forgejo понимает, рабочий CI)actions/*references в шаблонах — оставить (работает через code.forgejo.org mirror или preinstalled)actions/setup-uv— если есть в шаблонах, проверить и заменить на preinstalled (он НЕ существует на code.forgejo.org, 404)hooks/— НЕ трогать (нейтральны)renovate.json— НЕ добавляем в этом PR (опциональная фича, пользователь решит сам)project-template/SKILL.md— PR #2 уже переписал Template GITHUB → FORGEJO, этот PR только синхронизируетГраничные случаи
pyproject.tomlURLs — если cookiecutter variable{{ cookiecutter.project_name }}содержит special chars — URL-encoding? (нет, Forgejo принимает дефисы/подчёркивания)dependabot.ymlудаление — если в.github/папке после удаления dependabot.yml остаётся толькоworkflows/— папка не пустая, OK. Если.github/становится пустой — удалить папку (но workflows/ есть, не пустая)actions/setup-uvв шаблонах — проверитьrg "setup-uv" .opencode/templates/. Если найдено — заменить на preinstalled подход (удалить step, uv уже в runner image)project-template/SKILL.mdL124 — если PR #2 уже обновил URL — не дублировать правкуВлияние на связанные компоненты
project-template/SKILL.mdTemplate FORGEJO должен быть создан ДО синхронизации с template-файламиpyproject.tomlосновного репо обновлен ДО template'ов (консистентность)project-template/SKILL.md— может потребоваться обновить L124 (финальный репорт URL) если PR #2 не сделалhooks/— НЕ затрагиваются/project-template) — будут с Forgejo URLs в pyproject.toml, без dependabot.yml, с рабочим.github/workflows/ci.ymlВне scope
.github/workflows/ci.yml→.forgejo/workflows/— НЕ делаем (рабочий CI, Forgejo понимает оба)actions/*→code.forgejo.org/actions/*в шаблонах — НЕ делаем (act_runner сам резолвит через mirror)renovate.jsontemplate — НЕ добавляем (опционально, отдельная задача)hooks/— НЕ трогаемproject-template/SKILL.mdTemplate FORGEJO — уже в PR #2 (этот PR только синхронизирует)Критерии приемки
rg "github.com" .opencode/templates/→ 0 совпадений (в pyproject.toml URLs)rg "dependabot" .opencode/templates/→ 0 совпадений (5 файлов удалены).github/workflows/ci.ymlв шаблонах — НЕ изменён (5 файлов на месте)rg "setup-uv" .opencode/templates/→ 0 (если было — заменено на preinstalled)project-template/SKILL.mdL124 —Forgejo: https://git.slaid098.dev/...(если PR #2 не обновил)cookiecutter .opencode/templates/backend --no-input project_name=test-forgejo→ генерирует проект с Forgejo URLs в pyproject.toml, без dependabot.yml, с ci.ymlhooks/— не измененыCode Review Summary
CI green (run #133). Код чистый, логика корректна:
head -n $((COUNT-RETENTION))корректно выбирает старейшие,set -eгарантирует что ротация не запустится при падении upload--restore-from r2(оба синтаксиса), валидация R2 vars, rclone install, latest backup черезsort | tail -1, stop/extract/start${{ secrets.* }}(workflow) и${VAR}из .env (setup.sh)Watch out (не блокирующее, проверить на E2E):
unzip -o ./restore/forgejo-dump.zip -d ./app_data/forgejo/— нужно empirically проверить структуруforgejo dumpzip. Если zip содержитapp.iniиdata/в корне, а контейнер ожидает/data/gitea/conf/app.ini, то extract path должен быть./app_data/forgejo/gitea/. Уточним при E2E тесте.Verdict: APPROVE