Was FerrisGit heute kann

Alles auf dieser Seite gibt es heute. Was geplant ist, steht in der Roadmap.

Die Oberfläche der Anwendung und ihre Dokumentation sind vorerst auf Französisch.

Repositories und Gruppen

Hosten Sie Code unter Ihrem eigenen Konto oder in einer Hierarchie von Gruppen, und legen Sie fest, wer was darf.

  • Repositories, die einem Benutzer gehören oder in Gruppen und Untergruppen verschachtelt sind
  • Öffentlich oder privat; Beschreibung und Sichtbarkeit lassen sich später ändern
  • Rollen Leser, Mitwirkender und Maintainer, pro Repository oder pro Gruppe
  • Git über HTTP(S): Clone, Fetch und Push mit Benutzernamen und einem persönlichen Zugriffstoken
  • Sterne für Repositories und Sprachstatistiken

Merge Requests

Das Review geschieht direkt am Diff, und die ganze Diskussion bleibt an einem Ort.

  • Inline-Kommentare in Threads
  • Codevorschläge, die sich über die Oberfläche übernehmen lassen
  • Freigaben und Änderungsanforderungen
  • Konflikterkennung
  • Ein Verlauf von allem, was geschehen ist

Issues

Verfolgen Sie die Arbeit neben dem Code.

  • Labels und Meilensteine
  • Zuständige
  • Ein Kanban-Board mit vier Zuständen

CI/CD

Eine integrierte Engine, konfiguriert durch eine Datei im Repository.

  • Pipelines, beschrieben in .ferrisgit-ci.yml im Hauptverzeichnis des Repositorys
  • Docker-Runner (eine kleine Binärdatei ferrisgit-runner, die den Server abfragt) oder Kubernetes, wo jeder Job als Pod läuft
  • Variablen pro Repository, verschlüsselt gespeichert (nur Docker-Runner)
  • Caches pro Job (nur Kubernetes)
.ferrisgit-ci.yml
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

Öffentliche Seiten und Suche

Öffnen Sie ein Projekt für Menschen ohne Konto.

  • Besucher durchsuchen öffentliche Repositories schreibgeschützt: Katalog, README, Dateien, Commits und Releases
  • Release-Dateien lassen sich ohne Anmeldung herunterladen
  • Angemeldete Benutzer haben Suche, Benachrichtigungen in der Anwendung und eine persönliche Übersicht

Dokumentation

In die Anwendung integriert, unter /docs.

  • Für alle offen, angemeldet oder nicht
  • Ein Benutzerhandbuch, die CI/CD-Referenz, Administration und Self-Hosting sowie die Referenz der REST-API
  • Auf Französisch, mit Suche

Wie es gebaut ist

Dieselbe Instanz wie auf der Startseite. Die Nummern öffnen die passenden Reiter und Abschnitte.

Architektur einer FerrisGit-InstanzIsometrische Zeichnung. Ein Git-Client und ein Browser sprechen mit einer einzigen Rust-Binary, ferrisgit-api, bestehend aus den Crates api, application, domain und infrastructure. Die Binary legt ihre Daten in PostgreSQL und in Git-Repositories auf der Festplatte ab und führt Pipeline-Jobs entweder über einen ferrisgit-runner auf einem Docker-Host oder als Pods in einem Kubernetes-Cluster aus. Eine orange Linie folgt einem Push bis zu seinen Jobs. Sieben nummerierte Kreise führen zu den Kacheln der Seite.api application domain infrastructure ferrisgit-runner ferrisgit-api: eine einzige Binary ferrisgit-runner Git-Client HTTPS, Benutzername + Token noch kein SSH Browser angemeldet oder anonym auf öffentlichen Seiten api REST-API, Git über HTTP, Weboberfläche domain Entitäten und Ports, ohne I/O application Anwendungsfälle infrastructure Adapter: PostgreSQL, git, Docker, Kubernetes, SMTP, Webhooks PostgreSQL Konten, Issues, Pipelines; Migrationen laufen beim Start Git-Repositories auf Platte, inkl. Wikis Docker-Host der Runner fragt standard- mäßig alle 5 s ab, ein Job nach dem anderen, im Container Kubernetes-Cluster ein Pod pro Job, vom Server erzeugt git push Pipeline angelegt Jobs fragt Jobs ab

Abb. 1 Eine Instanz. Die orange Linie folgt einem Push vom Client bis zu den Jobs, die er auslöst.

  • Anfrage oder Speicherung
  • ein Push, bis zu seinen Jobs
  • der Runner fragt ab
  • eine nummerierte Kachel dieser Seite

Wikis, Webhooks, Konten und Betrieb

Konten und Administration

Mehrfaktor-Authentifizierung ist nicht optional.

  • Für jedes Konto verpflichtend: Authenticator-Apps (TOTP), Passkeys (WebAuthn) und einmalig nutzbare Backup-Codes
  • Freie Registrierung hinter einem Schalter für Administratoren, oder Konten per E-Mail-Einladung
  • Administration: Benutzer und Einladungen, Instanzeinstellungen, Nutzungsmetriken und eine Statusseite

Webhooks

Sagen Sie anderen Werkzeugen Bescheid, wenn etwas passiert.

  • Signierte Anfragen (HMAC-SHA256) für Ereignisse zu Merge Requests, Mitwirkenden, Pipelines und Issues
  • Verschlüsselt gespeicherte Secrets
  • Noch keine Wiederholungsversuche und kein Zustellprotokoll: beides steht in der Roadmap

Wikis und Releases

Dokumentation und Auslieferungen bleiben beim Code.

  • Jedes Wiki wird in einem eigenen Git-Repository gespeichert
  • Releases tragen angehängte Dateien

Unter der Haube

Was Sie betreiben und was es braucht.

  • Eine Rust-Binärdatei (axum) liefert die REST-API, das Git-Protokoll und die Angular-Webanwendung aus
  • PostgreSQL 18 für die Daten; Repository-Inhalte auf der Festplatte des Servers
  • Docker Compose oder ein Helm-Chart für Kubernetes; Image masmarino/ferrisgit
  • Eine hexagonale Architektur, verteilt auf fünf Cargo-Crates

Was (noch) fehlt

All das steht in der Roadmap. Nichts davon gibt es heute.

  • Git über SSH und Deploy Keys: Git wird nur über HTTP(S) ausgeliefert
  • Geschützte Branches: Ein Mitwirkender kann auf jeden Branch des Repositorys pushen
  • Codequalitäts-Scans und Sicherheitsanalyse, auch in Merge Requests
  • Forks und Merge Requests zwischen Repositories, Squash- und Rebase-Merges
  • Single Sign-on (OIDC, LDAP)
  • Eine Oberfläche auf Englisch, Italienisch, Spanisch und Deutsch und eine Design-Einstellung: Heute ist sie auf Französisch und folgt dem System-Design
  • Eine Verbindung zu ArtiFerris
Zur Roadmap

Ausprobieren, dann selbst betreiben.

Die öffentliche Instanz zeigt das Produkt. Deine Instanz behält deinen Code.