Kai Ole Hartwig
yasrt · Dokumentation

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; gitea ist ein Synonym

Die drei Forges

GitLabGitHubForgejo
erkannt anGITLAB_CIGITHUB_ACTIONS auf github.comFORGEJO_ACTIONS, oder GITHUB_SERVER_URL anderswo
TokenCI_JOB_TOKENGITHUB_TOKENFORGEJO_TOKEN oder GITHUB_TOKEN
Release-Links (assets[].url)am Release angehängtim Release-Text gelistetim Release-Text gelistet
Uploads (assets[].path)Generic Package Registry, vom Release verlinktam Release angehängtam Release angehängt
after_release.triggersPipeline-Trigger-APInicht verfügbar; pro Trigger gemeldet, Exit bleibt 0wie GitHub
yasrt check: Berechtigungsprobevergleicht Branch- und Tag-Schutznicht geprobtnicht 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

Zurück zu yasrt

Die Übersicht: Problem, Fit-Check, drei Kommandos, alle Kapitel.

yasrt →
Zurück zu yasrt

CI-Pipelines

Installation, die dreistufige GitLab-Pipeline, GitHub Actions und Forgejo Actions.

Lesen →
CI-Pipelines