Skip to main content
Version: 3.1.0

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 push events
  • extractGitInfos on push payload → protect task queued
  • Commit status updates (pending / success / failure / warning) via Gitea Statuses API
  • UI: StepGitForm, StepInitForm, dashboard HeadLineTask + getLinkDetail all handle SourceType.Gitea
  • Config YAML: self.url optional (sourced from activation.token.towerUrl at runtime)

Files Modified:

  • src/protocol/source/gitea/gitea.service.ts — new service
  • src/protocol/source/gitea/gitea.types.ts — types, guards (isGiteaTask, isGiteaSource)
  • src/protocol/source/gitea/gitea-url.tsresolveGiteaApiUrl()
  • src/protocol/source/gitea/gitea.service.spec.ts — 12 unit tests
  • src/protocol/source/gitea/gitea-url.spec.ts — URL resolution tests
  • src/protocol/source/source.service.ts — wired GiteaService, updateAnchorStage, updateProofStage, extractGitInfos
  • src/core/task/task.types.tsisGitTask includes SourceType.Gitea; TaskSourceGit union includes TaskSourceGitea
  • src/core/configuration/config.schema.tsself.url optional
  • src/app.controller.ts — Gitea webhook route + protect wiring
  • src/app.module.tsGiteaService registered
  • ui/src/pages/workflows/sources.types.tsSourceType.Gitea
  • ui/src/pages/workflows/StepGitForm.tsx — Gitea form fields
  • ui/src/pages/workflows/StepInitForm.tsx — Gitea init step
  • ui/src/pages/dashboard/Dashboard.tsxHeadLineTask + getLinkDetail cases
  • ui/src/utils/format.ts — Gitea display name
  • ui/src/assets/gitea.svg — Gitea logo