Gitea Self-Hosted Source Provider
Version: 3.1.0 Date: 2026-06-12
Goal: Support Gitea self-hosted instances as a 4th Git source provider (alongside GitLab, GitHub, Bitbucket), enabling on-premise teams to protect commits through Tower.
Solution: Full backend service (GiteaService) + UI workflow form, wired into the existing source/task/protect pipeline. Gitea-specific URL resolution strips trailing slashes and auto-appends /api/v1. PAT stored internally as username:token; only the token value is requested in the UI.
Features:
- Discover Gitea repos via PAT + instance URL (auto-resolves
/api/v1) - Webhook init/reload on
pushevents extractGitInfoson push payload → protect task queued- Commit status updates (pending / success / failure / warning) via Gitea Statuses API
- UI:
StepGitForm,StepInitForm, dashboardHeadLineTask+getLinkDetailall handleSourceType.Gitea - Config YAML:
self.urloptional (sourced fromactivation.token.towerUrlat runtime)
Files Modified:
src/protocol/source/gitea/gitea.service.ts— new servicesrc/protocol/source/gitea/gitea.types.ts— types, guards (isGiteaTask,isGiteaSource)src/protocol/source/gitea/gitea-url.ts—resolveGiteaApiUrl()src/protocol/source/gitea/gitea.service.spec.ts— 12 unit testssrc/protocol/source/gitea/gitea-url.spec.ts— URL resolution testssrc/protocol/source/source.service.ts— wiredGiteaService,updateAnchorStage,updateProofStage,extractGitInfossrc/core/task/task.types.ts—isGitTaskincludesSourceType.Gitea;TaskSourceGitunion includesTaskSourceGiteasrc/core/configuration/config.schema.ts—self.urloptionalsrc/app.controller.ts— Gitea webhook route + protect wiringsrc/app.module.ts—GiteaServiceregisteredui/src/pages/workflows/sources.types.ts—SourceType.Giteaui/src/pages/workflows/StepGitForm.tsx— Gitea form fieldsui/src/pages/workflows/StepInitForm.tsx— Gitea init stepui/src/pages/dashboard/Dashboard.tsx—HeadLineTask+getLinkDetailcasesui/src/utils/format.ts— Gitea display nameui/src/assets/gitea.svg— Gitea logo