fix: [66] Pipeline-Identitaet auf ci-bot umstellen (JWT-Auto-Merge + Protection) #67

Merged
forgejo-bot merged 3 commits from bug/66 into main 2026-09-28 13:54:58 +00:00
Owner

Löst #66 – und stellt nebenbei die komplette Pipeline-Identität auf den neuen Service-User ci-bot um.

Das Problem

automerge.go:208 [E] Unable to get scheduled User[-2]: user does not exist [uid: -2, name: ]

Der ephemeral Action-Token mappet auf den Actions-Pseudo-User (uid -2). handlePullRequestAutoMerge lädt beim Merge den gespeicherten Doer → nicht auflösbar → der geplante Merge wird still verworfen.

Der Fix (in diesem PR)

  • pr-auto-merge: Auto-Merge per Authorized Integration (JWT) schedulen – authentifiziert als echter User, DoerID ist auflösbar. Fallback auf Token mit deutlicher Warnung.
  • pr-triage.yml: enable-openid-connect: true + Audience der ci-bot-Integration (pr-triage.yml, Event pull_request, write:repository)
  • branch-protection.yml: Audience auf die ci-bot-Integration umgestellt (vorher: persönliche Integration von hobbypunk mit vollen Admin-Rechten)

Warum ci-bot

  • Least Privilege: Das JWT agiert mit den Rechten des Integration-Owners – bisher Instanz-Admin, jetzt ein Bot-Collaborator mit Admin auf genau diesem Repo
  • Ehrliche Attribution: Auto-Merges erscheinen als „merged by ci-bot"
  • Konsistent: Renovate hat bereits seinen eigenen User

Self-healing

Die Triage schedult Label-basiert bei jedem Lauf cancel + neu – bereits geplante kaputte Schedules (Doer -2) heilen mit dem ersten Triage-Lauf nach dem Merge.

Aufräumen: Die alte persönliche Integration (u:1:…, Branch-Protection auf hobbypunk) kann in deinen Settings gelöscht werden.

Löst #66 – und stellt nebenbei die komplette Pipeline-Identität auf den neuen Service-User **ci-bot** um. ## Das Problem ``` automerge.go:208 [E] Unable to get scheduled User[-2]: user does not exist [uid: -2, name: ] ``` Der ephemeral Action-Token mappet auf den Actions-Pseudo-User (uid -2). `handlePullRequestAutoMerge` lädt beim Merge den gespeicherten Doer → nicht auflösbar → der geplante Merge wird **still verworfen**. ## Der Fix (in diesem PR) - `pr-auto-merge`: Auto-Merge per **Authorized Integration (JWT)** schedulen – authentifiziert als echter User, `DoerID` ist auflösbar. Fallback auf Token mit deutlicher Warnung. - `pr-triage.yml`: `enable-openid-connect: true` + Audience der ci-bot-Integration (`pr-triage.yml`, Event `pull_request`, `write:repository`) - `branch-protection.yml`: Audience auf die **ci-bot**-Integration umgestellt (vorher: persönliche Integration von hobbypunk mit vollen Admin-Rechten) ## Warum ci-bot - **Least Privilege:** Das JWT agiert mit den Rechten des Integration-Owners – bisher Instanz-Admin, jetzt ein Bot-Collaborator mit Admin auf genau diesem Repo - **Ehrliche Attribution:** Auto-Merges erscheinen als „merged by ci-bot" - **Konsistent:** Renovate hat bereits seinen eigenen User ## Self-healing Die Triage schedult Label-basiert bei jedem Lauf cancel + neu – bereits geplante kaputte Schedules (Doer -2) heilen mit dem ersten Triage-Lauf nach dem Merge. **Aufräumen:** Die alte persönliche Integration (`u:1:…`, Branch-Protection auf hobbypunk) kann in deinen Settings gelöscht werden.
[66] Auto-Merge per Authorized Integration schedulen (Doer -2 ist nicht aufloesbar)
All checks were successful
PR Triage / triage (pull_request) Successful in 14s
CI / scan_ruby (pull_request) Successful in 38s
CI / lint (pull_request) Successful in 44s
CI / test (pull_request) Successful in 54s
CI / system-test (pull_request) Successful in 1m5s
CI / coverage (pull_request) Successful in 29s
cee8b97845
---------

Co-Authored-By: opencode (Mistral GLM) <opencode-agent[bot]@hoppe-dev.eu>
forgejo-actions changed title from [66] Auto-Merge per Authorized Integration schedulen (Doer -2) to fix: [66] Auto-Merge per Authorized Integration schedulen (Doer -2) 2026-09-28 13:40:13 +00:00

📊 Coverage

Metrik Abdeckung
Zeilen 97.69% (2619/2681)
Branches 81.46% (637/782)
Methoden 96.71% (412/426)

Patch-Coverage: keine getrackten Zeilen geändert

Schwächste Dateien im Projekt

Datei Abdeckung
app/models/concerns/has_uuid_v7.rb 54.55%
app/components/form/select.rb 72.41%
app/components/layout/flash.rb 84.0%
app/components/concerns/actionable.rb 86.67%
app/components/layout/sidebar.rb 89.47%
app/controllers/settings/security_controller.rb 90.24%
app/controllers/sessions_controller.rb 90.32%
app/components/concerns/inferrable.rb 90.63%
app/components/users/avatar.rb 91.23%
app/controllers/settings/security/otps_controller.rb 91.67%

🔍 Report im Browser ansehen · 📄 Run-Artifact „coverage-report“

<!-- coverage-report --> ## 📊 Coverage | Metrik | Abdeckung | |---|---| | Zeilen | 97.69% (2619/2681) | | Branches | 81.46% (637/782) | | Methoden | 96.71% (412/426) | **Patch-Coverage**: keine getrackten Zeilen geändert **Schwächste Dateien im Projekt** | Datei | Abdeckung | |---|---| | app/models/concerns/has_uuid_v7.rb | 54.55% | | app/components/form/select.rb | 72.41% | | app/components/layout/flash.rb | 84.0% | | app/components/concerns/actionable.rb | 86.67% | | app/components/layout/sidebar.rb | 89.47% | | app/controllers/settings/security_controller.rb | 90.24% | | app/controllers/sessions_controller.rb | 90.32% | | app/components/concerns/inferrable.rb | 90.63% | | app/components/users/avatar.rb | 91.23% | | app/controllers/settings/security/otps_controller.rb | 91.67% | [🔍 Report im Browser ansehen](https://pages.hoppe-dev.eu/hobbypunk/rails-base_app/pr-67/coverage) · [📄 Run-Artifact „coverage-report“](https://code.hoppe-dev.eu/hobbypunk/rails-base_app/actions/runs/1727/artifacts/coverage-report)
[66] Audiences der ci-bot-Integrationen eintragen
Some checks failed
PR Triage / triage (pull_request) Successful in 2m10s
CI / test (pull_request) Successful in 3m7s
CI / system-test (pull_request) Successful in 3m13s
CI / coverage (pull_request) Has been cancelled
CI / scan_ruby (pull_request) Successful in 2m39s
CI / lint (pull_request) Successful in 2m44s
bafb6d74a0
---------

Co-Authored-By: opencode (Mistral GLM) <opencode-agent[bot]@hoppe-dev.eu>
hobbypunk changed title from fix: [66] Auto-Merge per Authorized Integration schedulen (Doer -2) to [66] Pipeline-Identitaet auf ci-bot umstellen (JWT-Auto-Merge + Protection) 2026-09-28 13:50:07 +00:00
forgejo-actions changed title from [66] Pipeline-Identitaet auf ci-bot umstellen (JWT-Auto-Merge + Protection) to fix: [66] Pipeline-Identitaet auf ci-bot umstellen (JWT-Auto-Merge + Protection) 2026-09-28 13:52:16 +00:00
forgejo-bot scheduled this pull request to auto merge when all checks succeed 2026-09-28 13:52:16 +00:00
forgejo-bot canceled auto merging this pull request when all checks succeed 2026-09-28 13:52:17 +00:00
forgejo-bot scheduled this pull request to auto merge when all checks succeed 2026-09-28 13:52:17 +00:00
forgejo-bot canceled auto merging this pull request when all checks succeed 2026-09-28 13:52:17 +00:00
forgejo-bot scheduled this pull request to auto merge when all checks succeed 2026-09-28 13:52:17 +00:00
[66] Kommentar: Service-User heisst forgejo-bot
All checks were successful
PR Triage / triage (pull_request) Successful in 14s
CI / scan_ruby (pull_request) Successful in 51s
CI / lint (pull_request) Successful in 56s
CI / test (pull_request) Successful in 1m15s
CI / system-test (pull_request) Successful in 1m21s
CI / coverage (pull_request) Successful in 30s
be86c34c0c
---------

Co-Authored-By: opencode (Mistral GLM) <opencode-agent[bot]@hoppe-dev.eu>
forgejo-bot canceled auto merging this pull request when all checks succeed 2026-09-28 13:53:09 +00:00
forgejo-bot scheduled this pull request to auto merge when all checks succeed 2026-09-28 13:53:09 +00:00
forgejo-bot deleted branch bug/66 2026-09-28 13:54:58 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
hobbypunk/rails-base_app!67
No description provided.