Vad jag saknade på Codeberg som ny användare
Jag började nyligen att flytta från GitHub till Codeberg.GitHub to Codeberg.
I och med samlade jag ihop en mängd anteckningar över de problem jag stötte på. Det är inte på något sätt menat som klagomål på Forgejo (eller Codeberg), men kanske hjälper det till att få dessa kvarvarande problem lösta, och om så är fallet fyller det ett syfte. Och, det är bara att rätta mig om jag har missförstått någon av dem, de flesta punkterna har dock ärenden på dem.
Innehållsförteckning#
- Tokens är inte tids eller repo-begränsade
- Kan inte ta bort workflow-körningar från UI
- Kan inte dela workflows mellan repos
- Lokala återanvändbara workflows är buggiga
- Ingen nyckellös artifakt-signering
- Webb-UI kan inte signera merge-commits
- Ingen SLSA Level 3 supply chain-säkerhet
- Inget fullständigt OpenSSF Scorecard-stöd
- Ingen centraliserad säkerhetsfynd-dashboard
- Ingen automatisk blockering av sårbara beroenden
- Artifact upload/download-actions trasiga
1. Tokens upphör aldrig och är inte repo-begränsade#
GitHub fine-grained tokens:
- Begränsad till specifika repos
- Måste upphöra (7 dagar till 1 år)
- Mycket granulära behörigheter
Forgejo tokens:
- Upphör aldrig
- Gäller för alla repos du har tillgång till
Vad jag gjorde:
- Manuell rotation med kalender-påminnelser
- Bot-konton med begränsad åtkomst istället för personliga tokens
- Minimala scopes
Säkerhetsrisk från tokens som aldrig upphör. Kan inte begränsa till specifika repos.
Ärenden: #8837, #4992, #2332, #1712
2. Kan inte ta bort workflow-körningar från UI#
GitHub och GitLab låter dig ta bort workflow-körningar från UI eller API. Codeberg låter dig ta bort PR:er med UI, men inte workflows. Inte bra om du av misstag pushade hemligheter till loggar (även om du borde rotera dem ändå.)
| GitLab | GitHub | Forgejo | |
|---|---|---|---|
| Ta bort via UI | Ja | Ja | Nej |
| Ta bort via API | Ja | Ja | Nej |
Ärenden: #2184 (har “valuable code”-etikett), #6939 Gitea PR #26275 stängdes - för komplex.
Lösning: Ingenting jag kan göra. Vänta på auto-cleanup.
3. Kan inte dela workflows mellan repos#
GitHub låter organisationer dela workflows från ett centralt .github-repo.
Forgejo stöder endast lokala återanvändbara workflows.
Ärende: #2436
Lösning: Kopierade och duplicerade workflows till varje repo.
4. Lokala återanvändbara workflows är buggiga#
GitHubs återanvändbara workflows via workflow_call låter dig definiera en gång, anropa var som helst.
Forgejo har en bugg där jobb inte expanderar ordentligt - runs-on blir [], jobbet väntar för evigt.
Lösning: Inlined allt, duplicering.
5. Ingen nyckellös artifakt-signering#
GitHub + Sigstore = signera artifakter utan att hantera nycklar. OIDC-token bevisar identitet, Fulcio utfärdar efemärt certifikat, klart.
Codeberg har ingen OIDC-provider för workflows.
Vad jag gjorde: Cosign med nycklar, eller GPG i GoReleaser. Du hanterar nycklar själv.
6. Webb-UI kan inte signera merge-commits#
Om grenskydd kräver signerade commits, misslyckas webb-UI:s sammanslagningar: Codeberg kan inte signera. Påverkar merge commits, squash merges - allt som skapar en ny commit.
Rebase fungerar - spelar upp befintliga signerade commits, ingen ny commit.
Lösning: Använd rebase merge (Inställningar → Repository → Merge Requests → Fast Forward).
För Renovate, sätt automergeStrategy: rebase.
Slå ihop lokalt.
Måste konfigureras per repo - ingen org-omfattande inställning.
7. Ingen SLSA Level 3 supply chain-säkerhet#
SLSA bevisar hur programvara byggdes. SLSA Level 3 betyder att signeringsnyckeln kontrolleras av plattformen eller ett annat pålitligt team, så en komprometterad byggprocess kan inte förfalska proveniens. Flera steg skulle behöva hända här - det finns flera vägar framåt:
A) om du vill använda Codeberg som pålitlig provider som signerar dina builds B) om du vill sätta upp något i din egen organisation med en anpassad signeringstjänst - Tekton Chains och anpassade Forgejo build runners.
Jag pratar om perspektiv A här, eftersom jag är i Codeberg-slutanvändarperspektivet i detta dokument.
På GitHub litar Sigstore på GitHub och kommer att signera dina builds. På Codeberg skickar du din signeringsnyckel som en hemlighet. Dina byggsteg kan komma åt den (Ett skadligt beroende skulle kunna stjäla den).
Vad du kan få:
| Level | Status | Hur |
|---|---|---|
| L1 | Ja | Witness skapar in-toto attestations |
| L2 | Delvis | Signerad, men self-hosted är inte “trusted third-party” |
| L3 | Nej | Omöjligt utan plattformskontrollerad signering |
Lösning: Använd witness för L1-L2 och sigstore.
För L3 skulle vi behöva:
- Forgejo OIDC-tokens (#2389)
- Sigstore måste lita på Codeberg som utfärdare
- Någon måste bygga en SLSA Forgejo-generator
- Codeberg måste vilja erbjuda en signeringstjänst
OIDC-tokens skulle möjliggöra:
- L3 med en tredjepartstjänst för signering som litar på Forgejo OIDC (t.ex. om Sigstore lade till Forgejo som pålitlig utfärdare)
- L3 med Codebergs Forgejo + en Codeberg-hostad signeringstjänst (du kontrollerar inte Codebergs OIDC-utfärdare)
Om du behöver L3 av complianceskäl är detta en blockerare.
Så, förslag för att uppnå SLSA Level 3 med Codeberg
Om någon inblandad i Codeberg läser detta…
En praktisk väg skulle vara för Codeberg att erbjuda en signeringstjänst för anpassade runners. I denna modell bygger din self-hostade runner programvaran och samlar provenance-metadata, men istället för att signera det lokalt skickar runnern provenance till en Codeberg-hostad signeringstjänst. Denna tjänst skulle verifiera att förfrågan kom från en legitim runner (via OIDC-tokens eller liknande), sedan signera provenance med nycklar lagrade i Codebergs infrastruktur som du inte kan komma åt. Detta skapar den nödvändiga förtroendegränsen - du kontrollerar byggmiljön, men Codeberg kontrollerar attestationssigneringen.
Alternativt skulle Codeberg eller pålitlig aktör i samarbete med kunna erbjuda hanterade runners liknande GitHub Actions hosted runners, där både byggkörning och signering sker på Codeberg-kontrollerad infrastruktur. Kombinerat med att Sigstore lägger till Codeberg som pålitlig OIDC-identitetsprovider för nyckellös signering, skulle detta ge full L3-kompatibilitet. Metoden med hanterade runners är mer omfattande men kräver betydande infrastrukturinvestering från Codeberg, medan signeringstjänst-metoden låter användare behålla sina befintliga anpassade runners och endast centraliserar det förtroendesensitiva signeringssteget.
Vidare läsning:
8. Inget fullständigt OpenSSF Scorecard-stöd#
OpenSSF Scorecard betygsätter dina säkerhetspraxis och ger dig ett märke.
På Codeberg fungerar CLI lokalt men API:et indexerar inte Codeberg-repos och märkestjänsten känner bara till github.com och gitlab.com.
Vad jag gjorde: Kör scorecard --local . och lagra resultat som artifakter.
~8 av 17 kontroller fungerar lokalt.
9. Ingen centraliserad säkerhetsfynd-dashboard#
GitHubs Security-flik visar sårbarhetsfynd från skannrar på ett ställe.
Forgejo har ingen Security-flik, ingen SARIF-uppladdning.
Vad jag gjorde: Kör trivy/grype, misslyckas builds på HIGH/CRITICAL, granska artifakter manuellt. Skanning fungerar, bara ingen dashboard.
10. Ingen automatisk blockering av sårbara beroenden#
GitHub blockerar PR:er som lägger till sårbara beroenden med hjälp av sin dependency graph.
Forgejo har ingenting inbyggt.
Vad jag gjorde: govulncheck + osv-scanner för Go.
govulncheck analyserar call graphs - rapporterar endast sårbarheter i kod du faktiskt anropar.
För andra ekosystem: npm audit, pip-audit, cargo audit, eller osv-scanner.
11. Artifact upload/download-actions trasiga#
Nit-plockning, men kostade mig fortfarande tid och förvirring.
code.forgejo.org speglar GitHub Actions.
Men upload-artifact och download-artifact v4+ fungerar inte - de behöver GitHubs Artifact API.
| Spegel (trasig v4+) | Patchad (fungerar) |
|---|---|
code.forgejo.org/actions/upload-artifact | code.forgejo.org/forgejo/upload-artifact |
code.forgejo.org/actions/download-artifact | code.forgejo.org/forgejo/download-artifact |
Vad jag gjorde: Använd forgejo/*-versionerna istället för actions/*.
De flesta andra speglar fungerar bra.
Sammanfattning#
| # | Funktion | GitHub | Codeberg | Lösning |
|---|---|---|---|---|
| 1 | Token-utgång/scoping | Ja | Nej | Manuell rotation, bot-konton |
| 2 | Ta bort workflow-körningar | Ja | Nej | Vänta på auto-cleanup |
| 3 | Workflows mellan repos | Ja | Nej | Kopiera till varje repo |
| 4 | Återanvändbara workflows | Fungerar | Bugg #8780 | Inline |
| 5 | Nyckellös signering | Ja | Nej | Cosign med nycklar |
| 6 | Signerade merge | Ja | Nej | Rebase |
| 7 | SLSA L3 | Ja | Endast L1-L2 | Witness |
| 8 | OpenSSF Scorecard | Ja | Endast lokalt | Kör lokalt |
| 9 | Säkerhets-dashboard | Ja | Nej | Artifakter |
| 10 | Beroende-blockering | Ja | Nej | govulncheck |
| 11 | Artifact-actions | N/A | v4-speglar trasiga | Använd forgejo/* |
Jag tänkte själv börja kika på att:
- Översätta Forgejo till svenska
- Titta på hur OpenSSF Scorecard-stöd för Forgejo/Codeberg kan förbättras.