docs: add ADR 0043 for GitLab support via webhook bridge - #1816
Conversation
Site previewPreview: https://8becfb24-site.fullsend-ai.workers.dev Commit: |
ReviewFindingsMedium
Low
Info
Previous runReviewFindingsHigh
Medium
Low
Info
Previous runReviewFindingsHigh
Medium
Low
Info
Previous run (2)ReviewFindingsMedium
Low
Info
Previous run (3)ReviewFindingsMedium
Low
Info
Previous run (4)ReviewFindingsMedium
Low
Previous run (5)ReviewFindingsMedium
Low
Previous run (6)ReviewFindingsMedium
Low
Info
Previous run (7)ReviewFindingsLow
Info
Previous run (8)ReviewFindingsThe prior medium-severity finding (RefProtected comment contradicting GitHub behavior) has been resolved — the comment now correctly scopes enforcement to GitLab-only. One new medium-severity finding: the Security Considerations section and ADR 0043 both incorrectly attribute webhook secret validation to the dispatch pipeline. Medium
Low
|
3ca0501 to
130d954
Compare
130d954 to
de8ee02
Compare
de8ee02 to
0fa7e2e
Compare
|
All findings from the latest review addressed in the squashed commit: Medium — fixed:
Low — fixed:
Info — fixed:
|
This comment was marked as off-topic.
This comment was marked as off-topic.
0fa7e2e to
9039e05
Compare
|
Addressing review findings: Unrelated skill changes: Removed cutting-releases skill changes that slipped in. docs/problems/ misuse: Moved Local webhook server approach: Yes, exactly. The
This keeps the development workflow consistent and avoids requiring GCP deployments for local testing. The production webhook bridge will live as a standalone command under Squashing and force-pushing. |
e9c1cc6 to
10a1aea
Compare
|
Rebased onto clean
All changes are docs-only. Ready for final review. |
|
Resolved all fullsend-ai-review bot findings: Medium:
Low:
Info:
All findings resolved and pushed. |
Adds ADR 0043 documenting the GitLab support architecture via webhook bridge Cloud Function. Supersedes ADR 0028. Key decisions: - Webhook bridge Cloud Function translates GitLab webhooks to pipeline triggers - Central token mint extended with GitLab OIDC and Project Access Tokens - Protected branch enforcement via hardcoded ref=main in bridge - Per-project webhook secrets for validation - GitLab CI/CD templates mirror GitHub workflows structure Related changes: - Add companion implementation plan at docs/plans/gitlab-support.md - Mark ADR 0028 as superseded - Update cross-references in ADRs 0007, 0031, 0036 - Update roadmap with current GitLab support status Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com> Signed-off-by: Greg Allen <gallen@redhat.com>
| **Concern raised during review**: The mint was designed to *generate* short-lived, scope-limited tokens (GitHub App installation tokens). For GitLab, it stores and returns pre-created PATs — it does not actually mint anything. This raises two issues: (1) the mint no longer provides scope-limiting, which was a core security guarantee; (2) each project enrollment requires writing a PAT into the shared mint's Secret Manager, which complicates the "public mint" goal of zero-touch onboarding. | ||
|
|
||
| **Current rationale**: The mint still provides OIDC claim validation (credentials only reach pipelines running `.fullsend` on a protected ref) and centralized audit logging. Without it, PATs would need to be stored as protected CI/CD variables in `.fullsend`, visible to all Maintainers. The mint-via-OIDC path avoids persisting credentials in CI/CD variables. | ||
|
|
There was a problem hiding this comment.
Since the PATs are per-project, it does not seem to make sense to store them in .fullsend - instead each project would have its own variables, scoped for accessing that project.
This does raise another question - if PATs are project-scoped, how do we do cross-project operations? Do we need to copy the PATs of one project into the secrets of the project that is accessing it?
Missing alternative: GitLab
|
| Security layer | Webhook bridge (proposed) | include: project: ref: main |
|---|---|---|
| Agent code runs from protected ref | Bridge hardcodes ref=main |
Template pulled from .fullsend main |
| Secrets hidden from MR branches | Protected CI/CD variables | Protected CI/CD variables (same mechanism) |
| Per-project auth validation | Webhook secret in Secret Manager | Not needed — no inbound webhooks |
| Infrastructure to deploy/monitor | Cloud Function per GitLab instance | None — GitLab CI runner handles it |
What this eliminates
- The bridge Cloud Function (and per-instance deployment for self-hosted GitLab)
- Per-project webhook secret registration and Secret Manager storage
- Webhook secret validation logic
- Bridge availability monitoring
- The wire protocol translation layer
What still needs solving
The include: pattern handles MR events (merge_request_event) and push events natively. It does not cover issue events, comment/note events, or label events — GitLab CI has no native pipeline source for those.
For those events, the ADR's deferred Alternative 4 (scheduled pipeline polling) or a narrowly scoped webhook-to-trigger proxy would be needed. But that's a much smaller problem than a full webhook bridge for all event types — MR/push events are the high-frequency, security-sensitive path.
Suggestion
Consider adding include: project: ref: main as Alternative 5 in the ADR and evaluating it against the webhook bridge. If accepted, the bridge could be reduced to only handling event types that GitLab CI can't trigger natively (issue/comment events), rather than being the universal dispatch mechanism for all GitLab events.
|
Superseeded by #2042. |
|
🤖 Finished Retro · ✅ Success · Started 12:01 PM UTC · Completed 12:08 PM UTC |
Retro: PR #1816 — ADR 0043 GitLab webhook bridgeThis human-authored PR (by Key observations
Proposal filedOne proposal below for a genuinely novel gap: the review agent treating code examples in design/planning documents as production code. Proposals filed
|
Add ADR 0043 documenting the webhook bridge architecture for GitLab support, replacing the broader ADR 0028 approach with a focused, incrementally deployable design.
Key decisions:
Also adds companion implementation document (docs/problems/gitlab-support.md) with phased rollout plan and updates ADR 0028 status to reference its successor.
Closes #1964