src/webhooks/dispatch.rs:48 Offen
Review direkt am Diff
Ein Kommentar bleibt an seiner Zeile. Wer reviewt, kann einen Vorschlag schreiben, den der Autor mit einem Klick als Commit übernimmt. Freigaben werden gezählt, Konflikte erkannt.
Repositories, Merge Requests mit Inline-Review, Tickets, Wikis, Releases, signierte Webhooks und eine CI/CD-Engine. Ein Prozess, ein PostgreSQL, auf deinem eigenen Server.
$docker compose up -d --buildEine einzige Binary und eine Datenbank. Kein Konto bei einem Drittanbieter, keine Telemetrie an irgendjemanden. Sieh dir an, wie es gebaut ist.
Darstellung eines Merge Requests in FerrisGit, vom Push bis zum Merge: ein Push über HTTPS erzeugt den Request, eine Reviewerin schlägt eine Änderung an einer Zeile vor, der Autor übernimmt sie mit einem Klick, die Reviewerin gibt frei, der Request wird gemergt. Der Merge startet die Pipeline des Repositorys: format und clippy laufen, dann test, und alle drei sind erfolgreich.
/api, jede dokumentiertJede Kachel ist ein Stück des echten Produkts. Die Oberfläche ist vorerst auf Französisch; fünf Sprachen sind für 0.2 geplant.
src/webhooks/dispatch.rs:48 Offen
Ein Kommentar bleibt an seiner Zeile. Wer reviewt, kann einen Vorschlag schreiben, den der Autor mit einem Klick als Commit übernimmt. Freigaben werden gezählt, Konflikte erkannt.
Nach jedem Push liest FerrisGit die Datei auf dem Standard-Branch und erstellt eine Pipeline. Stages sind Barrieren, needs sind Abhängigkeiten; Jobs laufen in Docker-Containern über einen kleinen Runner oder als Kubernetes-Pods.
Labels, Meilensteine, Zuständige und vier Zustände. Ziehe eine Karte, um ihren Zustand zu ändern, oder nutze das Kartenmenü per Tastatur.
| Aktion | Leser | Mitw. | Maint. |
|---|---|---|---|
| Stöbern, klonen, lesen | |||
| Pushen, Tickets und Requests öffnen, reviewen | |||
| Mergen, Releases, Einstellungen, Mitwirkende |
Eine Rolle auf einer Gruppe gilt für alles darunter. Die höchste Rolle gewinnt.
Zwölf Ereignisse zu Merge Requests, Tickets, Pipelines und Mitwirkenden. Jede Zustellung trägt eine HMAC-SHA256-Signatur ihres rohen Bodys; das Secret ist verschlüsselt gespeichert.
Besucher stöbern in Katalog, README, Dateien, Commits und Releases öffentlicher Repositories und klonen sie. Ein Admin-Schalter schaltet die öffentlichen Seiten ab.
Kein Konto kommt daran vorbei. Authenticator-Apps (TOTP), Passkeys (WebAuthn) und zehn einmalige Wiederherstellungscodes.
Repositories, Tickets, Merge Requests und Benutzer, schon beim Tippen. Benachrichtigungen in der Anwendung zeigen, was dich betrifft.
Beschreibe die Jobs in .ferrisgit-ci.yml im Wurzelverzeichnis des Repositorys. Nach jedem erfolgreichen Push liest FerrisGit die Datei auf dem Standard-Branch und erstellt eine Pipeline. Lege den Schalter um, um zu sehen, was der Scheduler tut, wenn ein Job fehlschlägt.
stages: [lint, test]
jobs:
format:
stage: lint
image: rust:1
script:
- rustup component add rustfmt
- cargo fmt --all -- --check
clippy:
stage: lint
image: rust:1
script:
- rustup component add clippy
- cargo clippy --all-targets -- -D warnings
test:
stage: test
image: rust:1
needs: [format, clippy]
script:
- cargo test --all-targets
Pipeline bestanden
lint
test
format und clippy starten gemeinsam; test deklariert needs: [format, clippy] und startet, sobald beide erfolgreich waren.
ferrisgit-runner fragt den Server ab und führt jeden Job in einem Container aus. Oder Kubernetes: der Server erzeugt pro Job einen Pod in deinem Cluster.FerrisGit ist ein Container-Image mit PostgreSQL daneben. Probiere es mit Docker Compose, installiere das Helm-Chart auf Kubernetes oder starte es aus dem Quellcode.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
cp .env.example .env
# set POSTGRES_PASSWORD, JWT_SECRET, SETTINGS_ENCRYPTION_KEY and the admin password in .env
docker compose up -d --build
Compose baut das Image aus dem Quellcode. Um stattdessen das veröffentlichte Image zu verwenden, ersetze build: . durch image: masmarino/ferrisgit:0.1.1 in docker-compose.yml.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
helm upgrade --install ferrisgit ./helm/ferrisgit \
--namespace ferrisgit --create-namespace \
--set image.tag=0.1.1 \
--set ingress.host=git.example.com \
--set-string ferrisgit.trustedProxyCidrs=10.42.0.0/16
kubectl -n ferrisgit rollout status deployment/ferrisgit
Bleiben sie leer, erzeugt das Chart das Datenbankpasswort, JWT_SECRET, SETTINGS_ENCRYPTION_KEY und das Passwort des ersten Administrators im Secret ferrisgit-secrets. Das Release muss ferrisgit heißen.
git clone https://github.com/Masmarino/FerrisGit.git
cd FerrisGit
cp .env.example .env # then set real secrets
./scripts/dev.sh # PostgreSQL via Compose, cargo run on :8080, ng serve on :4201
Benötigt rustup, Node.js 26, Docker mit Compose und git im PATH. Das Skript startet PostgreSQL, wendet die Migrationen an und startet das Backend auf Port 8080 und den Angular-Entwicklungsserver auf Port 4201.
Ein Prozess, fünf Crates, eine hexagonale Architektur: die Domäne weiß nichts von der Datenbank, die Adapter wissen nichts von den Anwendungsfällen.
Abb. 1 Eine Instanz. Die orange Linie folgt einem Push vom Client bis zu den Jobs, die er auslöst.
Was eine Instanz schützt, genau benannt. Die Daten verlassen deinen Server nie.
SETTINGS_ENCRYPTION_KEY.X-Frame-Options: DENY, und die Anmelderouten sind pro IP ratenbegrenzt.Fünf Versionen, keine ausgeliefert. Ein Punkt wird erst abgehakt, wenn er ausgeliefert ist.
Die öffentliche Instanz zeigt das Produkt. Deine Instanz behält deinen Code.
camille · 2 min
Exponentielles Backoff, damit ein flatternder Endpunkt nicht länger bombardiert wird.