refactor(templates): pyproject URLs to Forgejo, remove dependabot, drop setup-uv #15

Merged
slaid098 merged 3 commits from refactor/templates/forgejo-first into main 2026-08-07 12:59:13 +03:00
Owner

Что сделано

  • 3 pyproject.toml в шаблонах (cli, backend, fullstack/backend): [project.urls] Homepage/Repository/Issues — github.com/slaid098 → git.slaid098.dev/slaid098 (9 замен)
  • 4 .github/dependabot.yml удалены (cli, backend, fullstack/, fullstack/backend) — Forgejo не имеет встроенного dependabot, шаблоны не должны поставлять мёртвый конфиг
  • 4 .github/workflows/ci.yml в шаблонах: astral-sh/setup-uv@v3 steps удалены (uv preinstalled в runner image, как в основном репо commit a08385c); actions/setup-node@v4 в fullstack root оставлен (node НЕ preinstalled, setup-node существует на code.forgejo.org)
  • tests/test_cookiecutter_templates.py: убран .github/dependabot.yml из expected_files test_backend_structure_full; добавлены 3 регрессионных теста (×3 параметризации = 9): test_pyproject_urls_point_to_forgejo, test_no_dependabot_in_templates, test_ci_no_setup_uv_action

Почему

Issue #8: cookiecutter templates всё ещё содержали GitHub-эру (hardcoded github.com URLs, dependabot.yml). PR #13 переписал project-template/SKILL.md Template GITHUB → Template FORGEJO, но реальные template-файлы остались со старыми URL'ами и dependabot. Новые проекты через /project-template получали GitHub URLs в pyproject.toml и мёртвый dependabot.yml. setup-uv не существует на code.forgejo.org (404) — шаблоны должны использовать preinstalled uv как основной репо.

.pre-commit-config.yaml github.com URL'ы (ruff/mypy/pre-commit-hooks upstream) оставлены — это upstream constraint (как cloudflared download URL в Dockerfile PR#14), не нарушает Forgejo-first.

project-template/SKILL.md уже обновлён в PR #2/PR #13 (L125: $FORGEJO_URL/<owner>/<project_name>) — правки skill не нужны.

Watch out

  • .github/workflows/ci.yml в шаблонах изменены (удалён setup-uv) — issue #8 сам себе противоречит ("НЕ трогать" vs "setup-uv заменить"), но критерии приёмки явные: rg setup-uv → 0. Структура jobs сохранена, только убран step с action.
  • actions/setup-node@v4 в fullstack root ci.yml оставлен — node не preinstalled в runner image, и setup-node существует на code.forgejo.org (200).
  • .pre-commit-config.yaml всё ещё содержит github.com (upstream hooks) — вне scope, оставлено намеренно.
  • renovate.json НЕ добавлен (issue #8 явно: вне scope, опциональная фича).
  • Cookiecutter hooks/ не тронуты (нейтральны).
  • Локальный main был устаревшим (PR #14 не был подтянут) — ветка создана из stale main, после fetch + rebase на origin/main 3 PR#14-коммита дропнуты (уже upstream), мои 3 коммита пересели чисто.

Pending

  • renovate.json template — отдельная задача (опциональная auto-dependency-updates для новых проектов)
  • .pre-commit-config.yaml mirror на Forgejo — если появится Forgejo-mirror pre-commit hooks, можно переключить (сейчас upstream на github.com)

Closes #8

## Что сделано - 3 `pyproject.toml` в шаблонах (`cli`, `backend`, `fullstack/backend`): `[project.urls]` Homepage/Repository/Issues — `github.com/slaid098` → `git.slaid098.dev/slaid098` (9 замен) - 4 `.github/dependabot.yml` удалены (`cli`, `backend`, `fullstack/`, `fullstack/backend`) — Forgejo не имеет встроенного dependabot, шаблоны не должны поставлять мёртвый конфиг - 4 `.github/workflows/ci.yml` в шаблонах: `astral-sh/setup-uv@v3` steps удалены (uv preinstalled в runner image, как в основном репо commit `a08385c`); `actions/setup-node@v4` в fullstack root оставлен (node НЕ preinstalled, `setup-node` существует на code.forgejo.org) - `tests/test_cookiecutter_templates.py`: убран `.github/dependabot.yml` из `expected_files` `test_backend_structure_full`; добавлены 3 регрессионных теста (×3 параметризации = 9): `test_pyproject_urls_point_to_forgejo`, `test_no_dependabot_in_templates`, `test_ci_no_setup_uv_action` ## Почему Issue #8: cookiecutter templates всё ещё содержали GitHub-эру (hardcoded `github.com` URLs, dependabot.yml). PR #13 переписал `project-template/SKILL.md` Template GITHUB → Template FORGEJO, но реальные template-файлы остались со старыми URL'ами и dependabot. Новые проекты через `/project-template` получали GitHub URLs в pyproject.toml и мёртвый dependabot.yml. `setup-uv` не существует на code.forgejo.org (404) — шаблоны должны использовать preinstalled uv как основной репо. `.pre-commit-config.yaml` github.com URL'ы (ruff/mypy/pre-commit-hooks upstream) оставлены — это upstream constraint (как cloudflared download URL в Dockerfile PR#14), не нарушает Forgejo-first. `project-template/SKILL.md` уже обновлён в PR #2/PR #13 (L125: `$FORGEJO_URL/<owner>/<project_name>`) — правки skill не нужны. ## Watch out - `.github/workflows/ci.yml` в шаблонах изменены (удалён setup-uv) — issue #8 сам себе противоречит ("НЕ трогать" vs "setup-uv заменить"), но критерии приёмки явные: `rg setup-uv → 0`. Структура jobs сохранена, только убран step с action. - `actions/setup-node@v4` в fullstack root ci.yml оставлен — node не preinstalled в runner image, и setup-node существует на code.forgejo.org (200). - `.pre-commit-config.yaml` всё ещё содержит `github.com` (upstream hooks) — вне scope, оставлено намеренно. - `renovate.json` НЕ добавлен (issue #8 явно: вне scope, опциональная фича). - Cookiecutter `hooks/` не тронуты (нейтральны). - Локальный main был устаревшим (PR #14 не был подтянут) — ветка создана из stale main, после fetch + rebase на origin/main 3 PR#14-коммита дропнуты (уже upstream), мои 3 коммита пересели чисто. ## Pending - `renovate.json` template — отдельная задача (опциональная auto-dependency-updates для новых проектов) - `.pre-commit-config.yaml` mirror на Forgejo — если появится Forgejo-mirror pre-commit hooks, можно переключить (сейчас upstream на github.com) Closes #8
test(templates): assert Forgejo URLs, no dependabot, no setup-uv
All checks were successful
CI (always) / bootstrap (pull_request) Successful in 2s
CI / bootstrap (pull_request) Successful in 5s
CI / lint (pull_request) Successful in 28s
CI / complexity (pull_request) Successful in 29s
CI / typecheck (pull_request) Successful in 34s
CI / test (3.13) (pull_request) Successful in 1m35s
a10437aa88
Author
Owner

Code Review Summary

Чистый refactor cookiecutter-templates в Forgejo-first: 3 pyproject.toml URLs → git.slaid098.dev, 4 dependabot.yml удалены, astral-sh/setup-uv@v3 убран из 4 ci.yml. 3 новых регрессионных теста (×3 параметризации = 9 проверок) закрывают все изменения. CI green, mergeable=true.

Positives

  • Точность изменений: ровно 12 файлов, 3 коммита с атомарными scope (URLs / dependabot+setup-uv / tests). Нет лишних правок.
  • Регрессионные тесты качественные: test_pyproject_urls_point_to_forgejo, test_no_dependabot_in_templates, test_ci_no_setup_uv_action — docstrings ссылаются на issue #8, assertions точные (проверяют и отсутствие github.com, и наличие git.slaid098.dev). Параметризация ×3 шаблона покрывает все варианты.
  • test_backend_structure_full корректно обновлён: .github/dependabot.yml убран из expected_files (строка 109), остальные structure-тесты (cli, fullstack) dependabot не ожидали.
  • Cross-file sync: project-template/SKILL.md уже Forgejo-first (PR #13, L125 $FORGEJO_URL/<owner>/<project_name>) — templates теперь синхронизированы со skill.
  • PR body образцовый: 4 heading'а (## Что сделано, ## Почему, ## Watch out, ## Pending) заполнены осмысленно. Watch out объясняет противоречие в issue #8 ("НЕ трогать" vs "setup-uv заменить") и решение (критерии приёмки явные: rg setup-uv → 0). Pending честно перечисляет отложенное (renovate.json, pre-commit mirror).
  • YAGNI: удаление мёртвого dependabot (Forgejo не имеет встроенного dependabot) — правильное решение, не оставлять dead config.

Cross-file impact (проверено, не блокирующее)

  • project-status.py:1390 — oracle проверяет .github/dependabot.yml в сгенерированных проектах (WARN "обновления вручную" если нет, не FAIL). Templates без dependabot → новые проекты получат WARN — ожидаемо и корректно (dependabot убран намеренно). Не breakage.
  • create-readme.ts:63 — https://github.com/slaid098/${repo_name}.git — pre-existing bug (ADR-093: GitHub мёртв, Forgejo-first). Вне scope PR #15 (PR про cookiecutter templates, не про create-readme tool). Отмечаю для отдельной задачи.

Suggestions (info, not blocking)

  • .pre-commit-config.yaml в templates (cli/backend/fullstack) всё ещё содержит https://github.com/... для upstream hooks (ruff-pre-commit, mirrors-mypy, pre-commit-hooks). PR body явно отмечает это как upstream constraint, вне scope — корректно. Если появится Forgejo-mirror pre-commit hooks, можно переключить (уже в Pending).
  • renovate.json не добавлен — issue #8 явно: опционально, вне scope. Корректно отложено в Pending.

Verdict: APPROVE

## Code Review Summary Чистый refactor cookiecutter-templates в Forgejo-first: 3 pyproject.toml URLs → `git.slaid098.dev`, 4 dependabot.yml удалены, `astral-sh/setup-uv@v3` убран из 4 ci.yml. 3 новых регрессионных теста (×3 параметризации = 9 проверок) закрывают все изменения. CI green, mergeable=true. ### Positives - **Точность изменений:** ровно 12 файлов, 3 коммита с атомарными scope (URLs / dependabot+setup-uv / tests). Нет лишних правок. - **Регрессионные тесты качественные:** `test_pyproject_urls_point_to_forgejo`, `test_no_dependabot_in_templates`, `test_ci_no_setup_uv_action` — docstrings ссылаются на issue #8, assertions точные (проверяют и отсутствие github.com, и наличие git.slaid098.dev). Параметризация ×3 шаблона покрывает все варианты. - **`test_backend_structure_full` корректно обновлён:** `.github/dependabot.yml` убран из `expected_files` (строка 109), остальные structure-тесты (cli, fullstack) dependabot не ожидали. - **Cross-file sync:** `project-template/SKILL.md` уже Forgejo-first (PR #13, L125 `$FORGEJO_URL/<owner>/<project_name>`) — templates теперь синхронизированы со skill. - **PR body образцовый:** 4 heading'а (`## Что сделано`, `## Почему`, `## Watch out`, `## Pending`) заполнены осмысленно. Watch out объясняет противоречие в issue #8 ("НЕ трогать" vs "setup-uv заменить") и решение (критерии приёмки явные: `rg setup-uv → 0`). Pending честно перечисляет отложенное (renovate.json, pre-commit mirror). - **YAGNI:** удаление мёртвого dependabot (Forgejo не имеет встроенного dependabot) — правильное решение, не оставлять dead config. ### Cross-file impact (проверено, не блокирующее) - **`project-status.py:1390`** — oracle проверяет `.github/dependabot.yml` в сгенерированных проектах (WARN "обновления вручную" если нет, не FAIL). Templates без dependabot → новые проекты получат WARN — ожидаемо и корректно (dependabot убран намеренно). Не breakage. - **`create-readme.ts:63`** — `https://github.com/slaid098/${repo_name}.git` — pre-existing bug (ADR-093: GitHub мёртв, Forgejo-first). Вне scope PR #15 (PR про cookiecutter templates, не про create-readme tool). Отмечаю для отдельной задачи. ### Suggestions (info, not blocking) - **`.pre-commit-config.yaml` в templates** (cli/backend/fullstack) всё ещё содержит `https://github.com/...` для upstream hooks (ruff-pre-commit, mirrors-mypy, pre-commit-hooks). PR body явно отмечает это как upstream constraint, вне scope — корректно. Если появится Forgejo-mirror pre-commit hooks, можно переключить (уже в Pending). - **`renovate.json` не добавлен** — issue #8 явно: опционально, вне scope. Корректно отложено в Pending. ### Verdict: APPROVE
slaid098 deleted branch refactor/templates/forgejo-first 2026-08-07 12:59:16 +03:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
slaid098/opencode-config!15
No description provided.