Forges und Signierung
yasrt erkennt die Forge aus der Job-Umgebung und braucht dort nur den Job-Token. Der Signierschlüssel ist das einzige optionale langlebige Secret; beide sind in jeder Log-Zeile, in Fehlermeldungen und im Laufbericht maskiert.
- GitLab:
CI_JOB_TOKEN, Uploads in die Generic Package Registry, Pipeline-Trigger - GitHub:
GITHUB_TOKEN, Uploads am Release - Forgejo:
FORGEJO_TOKEN, wird vor GitHub erkannt;giteaist ein Synonym
Die drei Forges
| GitLab | GitHub | Forgejo | |
|---|---|---|---|
| erkannt an | GITLAB_CI | GITHUB_ACTIONS auf github.com | FORGEJO_ACTIONS, oder GITHUB_SERVER_URL anderswo |
| Token | CI_JOB_TOKEN | GITHUB_TOKEN | FORGEJO_TOKEN oder GITHUB_TOKEN |
Release-Links (assets[].url) | am Release angehängt | im Release-Text gelistet | im Release-Text gelistet |
Uploads (assets[].path) | Generic Package Registry, vom Release verlinkt | am Release angehängt | am Release angehängt |
after_release.triggers | Pipeline-Trigger-API | nicht verfügbar; pro Trigger gemeldet, Exit bleibt 0 | wie GitHub |
yasrt check: Berechtigungsprobe | vergleicht Branch- und Tag-Schutz | nicht geprobt | nicht geprobt |
Forgejo wird vor GitHub erkannt, weil sein Runner die GITHUB_*-Variablen aus Kompatibilität setzt; eine naive Prüfung würde einen Forgejo-Token an api.github.com schicken. gitea wird als Synonym für forgejo akzeptiert.
Signierung
release_commit.sign nimmt auto (signieren, wenn ein Schlüssel da ist), required (scheitern, bevor irgendetwas geschrieben wird, wenn keiner da ist) oder off. Der Schlüssel kommt aus GPG_SEM_REL_B64 (der Variablenname ist konfigurierbar) und darf ein OpenPGP- oder ein OpenSSH-Private-Key sein, base64-kodiert; yasrt erkennt aus dem Material, welcher. Beide liegen für die Dauer des Laufs in einem privaten temporären Verzeichnis und werden danach entfernt; alle drei Forges prüfen SSH-Signaturen.
Beide Wege sind getestet: mit echt erzeugten Schlüsseln, und der entstehende Tag und Commit werden mit git verify-tag / git verify-commit geprüft.
Sicherheit
Der einzige nötige Zugang ist der Job-Token, aus der Umgebung gelesen und git über einen Credential-Helper übergeben, nie in einer URL oder Argumentliste. Der Signierschlüssel ist das einzige optionale langlebige Secret. Beide sind in jeder Log-Zeile, in Fehlermeldungen und im Laufbericht maskiert. Sicherheitslücken meldest du, wie SECURITY.md im Repository es beschreibt.
Wo es lebt
Das öffentliche Zuhause ist github.com/ohartwig/yasrt; das ist der Modulpfad, und dort erscheinen Tags und Releases. Entwicklung und Release-Pipeline laufen auf meinem GitLab, das dorthin spiegelt: Merge Requests dort, Issues und Pull Requests auf GitHub werden beide gelesen.
Weiter
CI-Pipelines
Installation, die dreistufige GitLab-Pipeline, GitHub Actions und Forgejo Actions.