Forgejo

Connect Forgejo to Proval with a personal access token and repository webhook.

Connect Forgejo to Proval with a personal access token, the Proval dashboard forms, and a repository webhook.

External network. If Forgejo reaches Proval over the public internet, use https:// (reverse proxy in front of port 7901). Internal LAN http:// is fine for many self-hosted setups.

Prerequisites

Step 1: Personal access token

  1. Profile → SettingsApplicationsGenerate New Token
  2. Select read_api and write_repository
Forgejo personal access token with API scopes

Step 2: Connect in Proval

Forgejo connection

  1. Dashboard → Git ProviderAdd Forgejo connection
  2. Fill in the form
  3. Test Connection, then save
Proval Forgejo connection form

Repository

  1. RepositoriesAdd repository
  2. Fill in the form
  3. Create

Use the same webhook secret in Step 3.

Step 3: Repository webhook

http://<your-server>:7901/webhook/forgejo

Use https:// when TLS terminates before Proval. LAN http:// may require allow internal webhooks.

  1. Repository → SettingsWebhooksAdd WebhookForgejo
  2. Fill in the form
  3. Select All events, or Custom events and enable:
    • Pull request events → Modification
    • Pull request events → Comments
    • Issue events → Modification
    • Issue events → Comments
Forgejo webhook form with URL and secret

Instance admins can add the same webhook for all repositories under Site administrationDefault webhooks.

Allow internal HTTP webhooks

When Forgejo and Proval are on a private LAN with plain http://:

  1. Edit Forgejo app.ini (no GUI)
  2. Set ALLOWED_HOST_LIST and restart Forgejo
[webhook]
ALLOWED_HOST_LIST = private,192.168.1.10

Docker Compose:

environment:
    - GITEA__webhook__ALLOWED_HOST_LIST=private,192.168.1.10

See Forgejo: webhook config.

Troubleshooting

  • 401 — secret does not match Proval
  • 404 — repository not registered in Proval
  • Host not allowedAllow internal webhooks
  • No review — Forgejo cannot reach port 7901, or events not enabled
  • Test connection fails — invalid token or missing scopes