Add OpenProject Gitea integration plugin

Implements a Gitea integration for OpenProject following the same
patterns as the bundled GitHub and GitLab integrations.

- Webhook endpoint at /webhooks/gitea with HMAC-SHA256 verification
- Handles pull_request and issue_comment events
- Links Gitea PRs to work packages via OP# references or URLs
- Posts journal comments on WPs for PR lifecycle events
- Gitea tab on the work package split view
- V3 API endpoint: GET /api/v3/work_packages/:id/gitea_pull_requests
- Admin settings UI for bot user and webhook secret
- Nightly cron job to clean up unlinked PR records
This commit is contained in:
quafzi committed 2026-08-28 22:33:27 +02:00
commit 5d409989df
45 files changed
+2561

No files matched your search

@@ -0,0 +1,50 @@
<div
class="op-pull-request--title"
[textContent]="pullRequest.title"
></div>
<span class="op-pull-request--state" [ngClass]="'op-pull-request--state_' + state">
{{ state }} |
<a
[ngClass]="'op-pull-request--link_' + state"
[href]="pullRequest.htmlUrl"
target="_blank"
rel="noopener noreferrer"
[textContent]="pullRequest.repository + '#' + pullRequest.number"
></a>
</span>
@if (pullRequest.labels && pullRequest.labels.length > 0) {
<button (click)="toggleLabels(pullRequest.number)" class="op-pull-request--label_icon" title="Show/Hide labels">
Labels
</button>
}
<div class="op-pull-request--info_created">
{{ text.label_created_by }}
<span class="op-pull-request--user">
@if (pullRequest.giteaUser) {
<span
class="op-pull-request--username"
[textContent]="pullRequest.giteaUser.login"
></span>
}
</span>
<span class="op-pull-request--date">
{{ text.label_last_updated_on }}
<op-date-time [dateTimeValue]="pullRequest.gitea_updated_at" />
</span>.
</div>
<div
class="op-pull-request--labels"
[ngClass]="'op-pull-request--labels-' + pullRequest.number"
style="display: none;">
@for (label of pullRequest.labels; track label) {
<span>
<span class="op-pull-request--label" [ngStyle]="{'background-color': label.color}">
{{ label.name }}
</span>
</span>
}
</div>