Back openDesk Edu for a sovereign, open-source education â every vote counts.
Vote nowSave products you love by clicking the heart icon.
Comprehensive guide to testing Stripe payment integrations â test cards, webhook simulation, checkout flows, edge cases, and CI/CD strategies for bulletproof payment systems.
Codeberg ist eine Git-Hosting-Plattform fĂŒr freie Software, die auf Forgejo basiert. In Europa gehostet, der DSGVO unterliegend und von einer Non-Profit-Organisation verwaltet, beantwortet sie eine einfache Frage: Was wĂ€re, wenn Ihr Code-Hosting nicht den Preislaunen eines einzelnen Konzerns ausgeliefert wĂ€re?
Wir sind nicht hier, um Ihnen Codeberg schmackhaft zu machen. Die Runner-Images sind minimal. Einige GitHub Actions haben keine Forgejo-Ăquivalente. Aber fĂŒr Teams, die ein selbstgehostetes CI/CD ohne Vendor-Lock-in wĂŒnschen, lohnt es sich, die Kompromisse zu verstehen.
Forgejo Actions sehen fast aus wie GitHub Actions. Das âfastâ verbirgt einige TĂŒcken. Dieser Guide deckt den gesamten Workflow ab, vom CLI-Setup bis hin zu Production-Pipelines.
tea ist die offizielle CLI fĂŒr Gitea und Forgejo. Sie ĂŒbernimmt das Repo-Management, Issue-Tracking, Secrets und mehr direkt aus dem Terminal.
| Methode | Befehl |
|---|---|
| Homebrew | brew install tea |
| Chocolatey | choco install gitea.tea |
| Scoop | scoop install tea |
| Go | go install code.gitea.io/tea@latest |
| AUR | pacman -S tea |
| Binary | dl.gitea.com/tea |
tea login add --name codeberg --url https://codeberg.org --token <TOKEN>
tea login default codeberg # set as default
tea whoami # verify it works
```text
### HĂ€ufige Operationen
```bash
tea repos list # list your repos
tea repo create --name my-project --private # create a new repo
tea issues list # check issues
tea pr create --title "Fix auth" # open a pull request
tea open # open repo in browser
```text
Verwenden Sie `--repo owner/repo` und `--login codeberg`, wenn Sie ein spezifisches Repository oder eine bestimmte Instanz ansprechen mĂŒssen.
---
## Verwaltung von Secrets
Secrets sind das RĂŒckgrat jeder CI/CD-Pipeline. Sie werden fĂŒr Deploy-Keys, API-Token und SSH-Zugangsdaten benötigt.
### Via CLI
```bash
tea actions secrets list # view existing secrets
tea actions secrets create DEPLOY_KEY # create (prompts for value)
tea actions secrets delete DEPLOY_KEY # remove a secret
```text
### Via Web UI
Navigieren Sie in Ihrem Browser zu `/{owner}/{repo}/settings/actions/secrets`.
### Via API
FĂŒr alles, was die CLI nicht abdeckt:
```bash
tea api /repos/{owner}/{repo}/actions/secrets \
--method PUT \
--body '{"name":"SSH_PRIVATE_KEY","data":"<base64-encoded-value>"}'
```text
### Einrichten eines SSH Deploy Keys
Hier ist ein praktisches Beispiel. Generieren Sie ein SchlĂŒsselpaar, fĂŒgen Sie den öffentlichen SchlĂŒssel der `authorized_keys` Ihres Servers hinzu und speichern Sie dann den privaten SchlĂŒssel als Secret:
```bash
# Generate a deploy key
ssh-keygen -t ed25519 -f deploy_key -N ""
# Store the private key as a Codeberg secret
tea actions secrets create SSH_PRIVATE_KEY
# Paste the contents of deploy_key when prompted
# Add the public key to your target server
ssh-copy-id -i deploy_key.pub user@your-server.com
```text
Referenzieren Sie Secrets in Workflows mit `${{ secrets.SSH_PRIVATE_KEY }}`. Forgejo injiziert zudem automatisch nĂŒtzliche Variablen: `FORGEJO_TOKEN`, `FORGEJO_SERVER_URL`, `FORGEJO_REPOSITORY`, `FORGEJO_REF` und `FORGEJO_SHA`.
---
## Forgejo Actions: Nicht ganz GitHub Actions
Forgejo Actions folgen einer Philosophie von âVertrautheit vor KompatibilitĂ€tâ. Das YAML sieht aus wie bei GitHub Actions, aber das Verhalten stimmt nicht immer ĂŒberein. Diesen Abschnitt sollten Sie als Lesezeichen speichern.
### Wesentliche Unterschiede
| Aspekt | GitHub Actions | Forgejo Actions |
| -------- | --------------- | ----------------- |
| `permissions` auf Job-Ebene | UnterstĂŒtzt | **Ignoriert** (auf Step-Ebene verwenden) |
| `timeout-minutes` auf Job-Ebene | UnterstĂŒtzt | **Ignoriert** (auf Step-Ebene verwenden) |
| `continue-on-error` auf Job-Ebene | UnterstĂŒtzt | **Ignoriert** (auf Step-Ebene verwenden) |
| Standard-Runner-Image | ubuntu-latest (vollstÀndige Suite) | Debian bookworm + Node.js (minimal) |
| Kontextvariable | nur `github.*` | `forgejo.*`, `forge.*`, `github.*` (alle als Alias) |
| Action-Registry | GitHub Marketplace | `https://data.forgejo.org/` |
| LXC-Container | Nicht verfĂŒgbar | UnterstĂŒtzt |
Die Unterscheidung zwischen Job-Ebene und Step-Ebene ist das gröĂte Problem bei der Migration. Setzen Sie `timeout-minutes: 10` auf der Job-Ebene, bewirkt dies stillschweigend gar nichts. Verschieben Sie es in jeden einzelnen Step. Das Gleiche gilt fĂŒr `permissions` und `continue-on-error`.
Das Runner-Image ist die zweite Ăberraschung. Das `ubuntu-latest` von GitHub wird mit Docker, SSH und Build-Tools ausgeliefert. Der Standard-Runner von Forgejo ist ein schlankes Debian-Image mit Node.js. Benötigen Sie SSH? Installieren Sie es. Benötigen Sie Docker? Installieren Sie es. Kleinere Images, aber ausfĂŒhrlichere Workflows.
---
## Action-URL-Auflösung
Auf GitHub funktioniert `actions/checkout@v4` einfach so. Auf Forgejo hĂ€ngt die Auflösung von Kurzformen von der Instanz-Konfiguration ab. Verwenden Sie immer vollqualifizierte URLs, um Ăberraschungen zu vermeiden.
### GĂ€ngige Action-Mappings
| GitHub-Kurzform | Forgejo-URL |
| ----------------- | ------------- |
| `actions/checkout@v4` | `https://data.forgejo.org/actions/checkout@v4` |
| `actions/setup-node@v4` | `https://data.forgejo.org/actions/setup-node@v4` |
| `actions/setup-go@v5` | `https://data.forgejo.org/actions/setup-go@v5` |
| `actions/upload-artifact@v4` | `https://data.forgejo.org/actions/upload-artifact@v4` |
| `actions/download-artifact@v4` | `https://data.forgejo.org/actions/download-artifact@v4` |
| `actions/cache@v4` | `https://data.forgejo.org/actions/cache@v4` |
FĂŒr Actions, die nur auf GitHub existieren, referenzieren Sie diese direkt:
```yaml
- uses: https://github.com/appleboy/ssh-action@v1
```text
Hinweis: Der Runner muss `github.com` erreichen können, damit dies funktioniert. In Air-Gapped-Setups sollten Sie diese Actions spiegeln oder als Vendor-Kopie einbinden.
---
## Praktisches CI/CD-Beispiel
Hier ist ein vollstÀndiger Deployment-Workflow, der eine Node.js-App baut und diese via SSH bereitstellt:
```yaml
# .forgejo/workflows/deploy.yml
name: Build and Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: docker # Forgejo uses 'docker' label, not 'ubuntu-latest'
steps:
# Step-level timeout matters â job-level is ignored
- name: Checkout
timeout-minutes: 5
uses: https://data.forgejo.org/actions/checkout@v4
- name: Setup Node.js
timeout-minutes: 5
uses: https://data.forgejo.org/actions/setup-node@v4
with:
node-version: '22'
- name: Install dependencies
timeout-minutes: 10
run: npm ci
- name: Build
timeout-minutes: 5
run: npm run build
# The runner is minimal â install SSH if the action needs it
- name: Install SSH client
timeout-minutes: 2
run: apt-get update && apt-get install -y openssh-client
# appleboy/ssh-action has no Forgejo mirror, use GitHub directly
- name: Deploy via SSH
timeout-minutes: 5
uses: https://github.com/appleboy/ssh-action@v1
with:
host: ${{ secrets.DEPLOY_HOST }}
username: ${{ secrets.DEPLOY_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/app
git pull origin main
npm ci --production
pm2 restart app
```text
Beachten Sie die Forgejo-spezifischen Entscheidungen: das `docker` Runner-Label, vollqualifizierte Action-URLs und die explizite Installation des SSH-Clients. Lassen Sie einen dieser Punkte weg, und Ihre Pipeline bricht ab.
---
## HÀufige Fallstricke und Lösungen
| Problem | Ursache | Lösung |
| --------- | ------- | ----- |
| `timeout-minutes` wird ignoriert | Auf Job-Ebene gesetzt | Auf Step-Ebene verschieben |
| Action nicht gefunden | Kurzform-URL ohne Registry-Konfiguration | Vollqualifizierte URL verwenden |
| Runner ohne SSH, Docker etc. | Standard-Image ist minimal | `apt-get install -y <package>` in einem Step |
| Actions-Tab fehlt komplett | FĂŒr das Repo nicht aktiviert | Einstellungen â Units â Actions aktivieren |
| Secret im Workflow nicht zugÀnglich | Falscher Scope (env vs. repo) | Sicherstellen, dass es ein Repo- oder Org-Secret ist |
| GitHub-only Action schlÀgt in Air-Gapped-Env fehl | Runner kann github.com nicht erreichen | Action auf Ihre Forgejo-Instanz spiegeln |
| `github.*` Kontext funktioniert nicht | Veraltete Forgejo-Version | Update durchfĂŒhren oder `forgejo.*` / `forge.*` Aliase nutzen |
---
## Fazit
Codeberg ist sinnvoll, wenn Sie digitale SouverĂ€nitĂ€t, DSGVO-KonformitĂ€t oder UnabhĂ€ngigkeit vom Platform-Lock-in benötigen. Der Kompromiss ist ein kleineres Ăkosystem und ausfĂŒhrlichere Workflow-Dateien.
Die wichtigsten Erkenntnisse: Verwenden Sie immer vollqualifizierte Action-URLs, setzen Sie Timeouts und Berechtigungen auf der Step-Ebene und rechnen Sie mit einem minimalen Runner-Image, das eine explizite Tool-Installation erfordert. Sobald man diese drei Regeln verinnerlicht hat, ist die Migration von GitHub Actions zu Forgejo Actions unkompliziert.
Wenn Ihr Team GitHub Actions bereits kennt, bemisst sich die Lernkurve in Stunden, nicht in Tagen. Die tea CLI fĂŒllt die LĂŒcke, die `gh` hinterlĂ€sst, und die Workflow-Syntax ist so Ă€hnlich, dass das MuskelgedĂ€chtnis gröĂtenteils ĂŒbernommen werden kann. Achten Sie nur auf die Fallstricke auf der Job-Ebene.