OpenCode Gitea Review — плагин
Ревью pull request в Gitea и Forgejo через OpenCode: комментарии к строкам, решения approve и request_changes, запуск по /oc.
- 77 ★ репозитория
- Последний коммит
Расширенный доступ
Почему такой уровень
- Токен Gitea с правом записи в репозиторий публикует комментарии и решения ревью от имени аккаунта.
- Фрагменты кода из PR уходят выбранному провайдеру моделей.
Установка
- Работает в
Ручная установка
curl -fsSL https://raw.githubusercontent.com/ccsert/opencode-review-gitea/main/templates/workflow-docker.yaml -o .gitea/workflows/opencode-review.yamlСкачивает workflow без запуска скрипта. Создайте папку `.gitea/workflows` заранее.
Доступ и проверки
Как мы проверяемРасширенный доступИнструмент запускает код или ходит в сеть, а внешние данные только читает.
- Токен Gitea с правом записи в репозиторий публикует комментарии и решения ревью от имени аккаунта.
- Фрагменты кода из PR уходят выбранному провайдеру моделей.
Это чужой код. Посмотрите файлы в репозитории перед установкой.
Что делает
OpenCode Gitea Review — инструмент ревью кода для PR в Gitea и Forgejo на плагинах OpenCode. Модели Claude, GPT или DeepSeek читают изменения и пишут комментарии к конкретным строкам, помечая замечания типом (ошибка, безопасность, производительность) и серьезностью. Итог может быть одобрением, запросом правок или просто комментарием. Ревью запускается комментарием `/oc` или `/opencode` либо при открытии PR через Gitea Actions. Повторный запуск проверяет только новые изменения. Режим черновика складывает комментарии в ожидающее ревью под аккаунтом человека, чтобы тот отредактировал и отправил их в интерфейсе. Нормы команды берутся из базовой ветки, общего репозитория или адреса, есть шесть шаблонов ревью и проверочные списки для Go, Java, Python, фронтенда, инфраструктуры и безопасности.
Для кого. Командам на Gitea или Forgejo, которым нужен автоматический первый проход по PR с понятными тегами замечаний и ручным контролем.
Подходит, если
- В PR много строк, и ревьюер хочет получить предварительные замечания до собственного чтения.
- Автор обновил PR, и нужен повторный проход только по новым изменениям.
- Команда хочет проверять код по собственному документу норм из общего репозитория.
- Результат ИИ должен лечь в черновик под вашим именем, а не публиковаться сразу.
- Для Python-сервиса нужен список проверок на безопасность перед слиянием.
Не подходит, если
- Репозиторий размещен на GitHub: проект рассчитан на Gitea и Forgejo.
- Код нельзя отправлять внешним провайдерам моделей без собственного шлюза.
- Нужна полная замена человеческого ревью без проверки комментариев.
Пример запроса к агенту
/oc проверь этот PR на ошибки и вопросы безопасности и оставь результат в черновике ревью.Ограничения
Нужны раннер Gitea или Forgejo Actions и секреты репозитория: токен Gitea `OPENCODE_GIT_TOKEN` с правами `read:user` и `write:repository`, а для черновиков еще `write:issue`, и ключ провайдера, по умолчанию `DEEPSEEK_API_KEY`. Фрагменты кода отправляются выбранному провайдеру моделей. Для шлюзов вроде LiteLLM с нестандартными именами моделей нужно описать собственного провайдера в `.opencode-review/opencode.json`. Docker-образ `ghcr.io/ccsert/opencode-review:latest` пересобирается по понедельникам, для воспроизводимости закрепите версию.
Как отключить. Удалите файл `.gitea/workflows/opencode-review.yaml` и, если ставили из исходников, папку `.opencode-review/`. Секреты репозитория удалите в настройках Gitea.
Частые вопросы
Как подключить ревью к Gitea?
Скачайте шаблон workflow командой `curl -fsSL https://raw.githubusercontent.com/ccsert/opencode-review-gitea/main/templates/workflow-docker.yaml -o .gitea/workflows/opencode-review.yaml`, проверьте его и закоммитьте. Установка скрипта не нужна.
Как запустить ревью вручную?
Откройте PR и оставьте комментарий `/oc` или `/opencode`. Можно и без установки в репозиторий: внешний режим черновика запускается через Docker для выбранного PR.
Какую модель выбрать?
Переменная `MODEL` в workflow задается как `провайдер/модель`: по умолчанию `deepseek/deepseek-chat`, также подходят `anthropic/claude-sonnet-4-5` и `openai/gpt-4o` с соответствующим ключом.
Что такое режим черновика?
Комментарии сохраняются как ожидающее ревью под аккаунтом человека. Вы правите их в обычном интерфейсе Gitea и сами нажимаете отправку.
Проверяет ли он каждый раз весь PR?
Нет, при обновлении PR идет инкрементальное ревью: только изменения после прошлого прохода.
Обсуждение
Вопросов и отзывов пока нет.
Похожие
ПлагиныМаркетплейс плагинов Claude Code от shokai: второе мнение Codex, ревью PR, обход репозитория на уязвимости, режим фабрики.
Фоновый демон в цикле берет задачи с GitHub или Forgejo, пишет спецификации, ревьюит и чинит PR, пока те не готовы к слиянию.
GitHub Action, который запускает Claude Code в pull requests и issues: отвечает на упоминания, делает ревью и вносит правки
gitai — открытый сервер контроля версий для сотен агентов: слияние через compare-and-swap, серверная история и CLI graft.
Навык и плагин для Git и GitHub: ветки, Conventional Commits и путь запроса на слияние до зеленого мержа.
Клиент Git для Windows, macOS и Linux со встроенным MCP-сервером: агент читает репозиторий, PR, задачи и логи CI, запись выключена
Коротко о README
Конфигурация лежит в отдельной папке `.opencode-review/` и не пересекается с вашим `.opencode/`. Docker-вариант добавляет один файл workflow, вариант из исходников дает полный контроль над агентами и инструментами.
Бейдж для README
Исходный SKILL.md
---
name: review-security
description: Security review checklist for a PR diff. Use when the diff touches authentication, authorization, sessions, tokens, passwords, cryptography, user input parsing, SQL or shell construction, file paths, URLs fetched by the server, deserialization, secrets, CORS, or CI workflows.
---
# Security Review Checklist
Report a security finding only with a concrete path: **attacker-controlled input → code in the diff → sink → capability gained**. Name each step with `path:line`. "Could be unsafe" without an input is not a finding.
## Injection
- SQL built by string concatenation or interpolation with request data. Parameterized queries, ORM query builders and constant identifiers are safe.
- Shell commands with `shell=True`, `exec`, backticks or `sh -c` that include input. Argument arrays without a shell are safe.
- Template rendering with autoescape disabled, `innerHTML`, `dangerouslySetInnerHTML`, `v-html`, `|safe`.
- Paths joined from input without normalization and a base-directory check (`../` traversal, absolute paths, symlinks).
- Regular expressions compiled from input (ReDoS) or applied to unbounded input with nested quantifiers.
## Authentication and authorization
- New endpoints or handlers without the auth middleware/decorator that their neighbors use.
- Object access by ID without an ownership or tenant check (IDOR).
- Mass assignment: request bodies bound directly to models that contain role, owner, price or `isAdmin` fields.
- Debug flags, test bypasses or environment toggles that skip checks in production.
- Token comparison with `==` instead of a constant-time comparison; JWT `alg: none`, missing expiry or audience checks.
## Secrets and data exposure
- Credentials, keys or tokens committed in code, fixtures or configuration.
- Secrets, passwords, tokens or personal data written to logs, error messages or API responses.
- Stack traces or internal errors returned to clients.
## Server-side requests and deserialization
- Server fetching a URL derived from input without an allowlist (SSRF to metadata services, localhost, internal hosts).
- `pickle`, `yaml.load` without SafeLoader, Java native serialization, `BinaryFormatter`, or `eval` on untrusted data.
## Cryptography
- MD5/SHA1 for passwords or signatures; passwords hashed without a slow KDF (bcrypt, scrypt, argon2, PBKDF2).
- Hard-coded IVs or keys, ECB mode, `Math.random()`/`random` for tokens.
- TLS verification disabled (`verify=False`, `InsecureSkipVerify`, `rejectUnauthorized: false`).
## CI and supply chain
- Workflows that run untrusted PR code with secrets, `pull_request_target` checkouts of the PR head, or interpolating `${{ github.event.* }}` text directly into `run:` scripts.
- New dependencies from unusual registries, unpinned install scripts (`curl | sh`), or loosened lockfile integrity.
## Do not report
- Missing rate limiting, CSP or headers when the diff does not touch them.
- Theoretical issues in test-only code that never handles real input.
- Internal values (constants, config read at startup) treated as attacker input.