Cosa fa FerrisGit oggi

Tutto ciò che trovi in questa pagina esiste oggi. Ciò che è previsto è nella roadmap.

Per ora l'interfaccia dell'applicazione e la sua documentazione sono in francese.

Repository e gruppi

Ospita il codice sotto il tuo account o in una gerarchia di gruppi, e decidi chi può fare cosa.

  • Repository di un utente, o annidati in gruppi e sottogruppi
  • Pubblici o privati; descrizione e visibilità si possono modificare in seguito
  • Ruoli Lettore, Contributore e Maintainer, per repository o per gruppo
  • Git su HTTP(S): clone, fetch e push con il tuo nome utente e un token di accesso personale
  • Stelle dei repository e statistiche sui linguaggi

Merge request

La revisione avviene sul diff e tutta la discussione resta in un unico posto.

  • Commenti in linea a thread
  • Suggerimenti di codice applicabili dall'interfaccia
  • Approvazioni e richieste di modifica
  • Rilevamento dei conflitti
  • Una cronologia di tutto ciò che è successo

Issue

Tieni traccia del lavoro accanto al codice.

  • Etichette e milestone
  • Assegnatari
  • Una board kanban a quattro stati

CI/CD

Un motore integrato, configurato da un file nel repository.

  • Pipeline descritte in .ferrisgit-ci.yml alla radice del repository
  • Runner Docker (un piccolo binario ferrisgit-runner che interroga il server) o Kubernetes, dove ogni job gira come un Pod
  • Variabili per repository, cifrate a riposo (solo runner Docker)
  • Cache per job (solo 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

Pagine pubbliche e ricerca

Apri un progetto a chi non ha un account.

  • I visitatori sfogliano i repository pubblici in sola lettura: catalogo, README, file, commit e release
  • I file delle release si scaricano senza accedere
  • Gli utenti connessi hanno la ricerca, le notifiche nell'applicazione e una dashboard personale

Documentazione

Integrata nell'applicazione, all'indirizzo /docs.

  • Aperta a tutti, con o senza accesso
  • Una guida utente, il riferimento CI/CD, amministrazione e self-hosting, e il riferimento dell'API REST
  • In francese, con ricerca

Com'è fatto

La stessa istanza della pagina iniziale. I numeri aprono le schede e le sezioni corrispondenti.

Architettura di un'istanza di FerrisGitDisegno isometrico. Un client Git e un browser parlano con un solo binario Rust, ferrisgit-api, composto dai crate api, application, domain e infrastructure. Il binario conserva i dati in PostgreSQL e in repository Git su disco, ed esegue i job delle pipeline tramite un ferrisgit-runner su un host Docker o come Pod in un cluster Kubernetes. Una linea arancione segue un push fino ai suoi job. Sette cerchi numerati rimandano ai riquadri della pagina.api application domain infrastructure ferrisgit-runner ferrisgit-api: un solo binario ferrisgit-runner Client Git HTTPS, utente + token ancora niente SSH Browser con login, o anonimo sulle pagine pubbliche api API REST, Git su HTTP, interfaccia web domain entità e porte, senza I/O application casi d'uso infrastructure adattatori: PostgreSQL, git, Docker, Kubernetes, SMTP, webhook PostgreSQL account, issue, pipeline; le migrazioni partono all'avvio Repository Git su disco, wiki incluse Host Docker il runner interroga ogni 5 s di default, un job alla volta, in un container Cluster Kubernetes un Pod per job, creato dal server git push pipeline creata job interroga i job

Fig. 1 Un'istanza. La linea arancione segue un push dal client ai job che avvia.

  • richiesta o archiviazione
  • un push, fino ai suoi job
  • il runner interroga
  • un riquadro numerato di questa pagina

Wiki, webhook, account e distribuzione

Account e amministrazione

L'autenticazione a più fattori non è facoltativa.

  • Obbligatoria per ogni account: app di autenticazione (TOTP), passkey (WebAuthn) e codici di backup monouso
  • Registrazione libera dietro un interruttore dell'amministratore, oppure account creati su invito via e-mail
  • Amministrazione: utenti e inviti, impostazioni dell'istanza, metriche d'uso e una pagina di stato

Webhook

Avvisa altri strumenti quando succede qualcosa.

  • Richieste firmate (HMAC-SHA256) per gli eventi di merge request, collaboratori, pipeline e issue
  • Segreti cifrati a riposo
  • Ancora nessun nuovo tentativo e nessun registro delle consegne: entrambi sono nella roadmap

Wiki e release

Documentazione e artefatti da distribuire restano insieme al codice.

  • Ogni wiki è conservato in un repository Git a sé
  • Le release portano file allegati

Sotto il cofano

Cosa installi e di cosa ha bisogno.

  • Un solo binario Rust (axum) serve l'API REST, il protocollo Git e l'applicazione web Angular
  • PostgreSQL 18 per i dati; il contenuto dei repository sul disco del server
  • Docker Compose o un chart Helm per Kubernetes; immagine masmarino/ferrisgit
  • Un'architettura esagonale, suddivisa in cinque crate Cargo

Quello che (ancora) non c'è

Tutto questo è nella roadmap. Nulla di questo esiste oggi.

  • Git su SSH e deploy key: Git è servito solo su HTTP(S)
  • Branch protetti: un Contributore può fare push su qualsiasi branch del repository
  • Analisi della qualità del codice e analisi di sicurezza, anche sulle merge request
  • Fork e merge request tra repository, merge con squash e rebase
  • Single sign-on (OIDC, LDAP)
  • Un'interfaccia in inglese, italiano, spagnolo e tedesco e un'impostazione del tema: oggi è in francese e segue il tema del sistema
  • Un collegamento con ArtiFerris
Vedi la roadmap

Provalo, poi avvia il tuo.

L'istanza pubblica mostra il prodotto. La tua istanza custodisce il tuo codice.