Rebuild the Gitea Codex review bot from the product contract with a Go HTTP service, durable SQL queue, typed Gitea client, isolated runner, and deployment updates. Co-Authored-By: Claude <noreply@anthropic.com>
2.5 KiB
Webhook setup
The Go service accepts signed Gitea webhooks at:
POST /webhook/gitea
It processes only issue_comment and pull_request_comment events. The handler verifies the exact raw request body with HMAC-SHA256 using GITEA_WEBHOOK_SECRET, enforces ALLOWED_REPOS, ignores bot-authored comments, and queues recognized @codex commands.
Configure Gitea
- Deploy the service at a URL reachable by Gitea, for example
https://bot.example.com/webhook/gitea. - Set the same random secret in Gitea and
GITEA_WEBHOOK_SECRET. - Configure either an instance/global webhook or one repository webhook per target repository.
- Use JSON content type and enable only Issue comment and Pull request comment events.
- Add every allowed
owner/repositorytoALLOWED_REPOS. - Test the webhook from Gitea, then check
GET /healthz.
WEBHOOK_MODE=global or WEBHOOK_MODE=repo is a deployment label; webhook provisioning remains an administrator responsibility.
Environment
Required values are GITEA_BASE_URL, GITEA_TOKEN, GITEA_BOT_USERNAME, GITEA_WEBHOOK_SECRET, ALLOWED_REPOS, and either DATABASE_URL or the DB_* values. API-key Codex mode also requires OPENAI_API_KEY.
The recommended local development database is SQLite:
DATABASE_URL=sqlite://./gitea-codex.db
Production deployments should use MariaDB and a token with only the Gitea permissions needed to read pull requests/files and create comments. Keep the runner image pinned to a reviewed digest and treat review execution as untrusted code execution.
Command examples
@codex review
@codex review security
@codex review performance --full
@codex review tests
@codex rerun
@codex explain
@codex ignore
@codex help
Commands must begin the comment. Inline mentions in ordinary discussion text are intentionally ignored for compatibility. @codex fix is not supported.
Security notes
- Invalid signatures return HTTP 401.
- Fork pull requests are skipped unless
ALLOW_UNTRUSTED_FORKS=true. - The bot launches review containers through the host Docker API; secure the Docker socket and runner host accordingly.
- The review container receives credentials required by the configured Codex/Gitea workflow. Use least-privilege credentials, restrict network access, and do not use unpinned images in production.
- Health detail endpoints expose bounded job metadata. Put them behind an internal network or reverse-proxy authentication if repository names and review errors are sensitive.