Ce que FerrisGit fait aujourd'hui

Tout ce qui figure sur cette page existe aujourd'hui. Ce qui est prévu se trouve dans la feuille de route.

L'interface de l'application et sa documentation sont en français pour l'instant.

Dépôts et groupes

Hébergez du code sous votre compte ou dans une hiérarchie de groupes, et décidez qui peut faire quoi.

  • Des dépôts personnels, ou rangés dans des groupes et des sous-groupes
  • Publics ou privés ; la description et la visibilité peuvent être modifiées ensuite
  • Rôles Lecteur, Contributeur et Mainteneur, par dépôt ou par groupe
  • Git en HTTP(S) : clone, fetch et push avec votre nom d'utilisateur et un jeton d'accès personnel
  • Étoiles des dépôts et statistiques de langages

Demandes de fusion

La relecture se fait sur le diff, et toute la discussion reste au même endroit.

  • Commentaires en ligne en fils de discussion
  • Suggestions de code applicables depuis l'interface
  • Approbations et demandes de modifications
  • Détection des conflits
  • Une chronologie de tout ce qui s'est passé

Tickets

Suivez le travail à côté du code.

  • Étiquettes et jalons
  • Assignations
  • Un tableau kanban à quatre états

CI/CD

Un moteur intégré, configuré par un fichier du dépôt.

  • Des pipelines décrits dans .ferrisgit-ci.yml, à la racine du dépôt
  • Runners Docker (un petit binaire ferrisgit-runner qui interroge le serveur) ou Kubernetes, où chaque job s'exécute dans un Pod
  • Variables par dépôt, chiffrées au repos (runners Docker uniquement)
  • Caches par job (Kubernetes uniquement)
.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

Pages publiques et recherche

Ouvrez un projet à des personnes qui n'ont pas de compte.

  • Les visiteurs parcourent les dépôts publics en lecture seule : catalogue, README, fichiers, commits et releases
  • Les fichiers des releases se téléchargent sans connexion
  • Les utilisateurs connectés disposent de la recherche, des notifications dans l'application et d'un tableau de bord personnel

Documentation

Intégrée à l'application, à l'adresse /docs.

  • Ouverte à tous, connectés ou non
  • Un guide d'utilisation, la référence CI/CD, l'administration et l'auto-hébergement, et la référence de l'API REST
  • En français, avec une recherche

Comment c'est fait

La même instance que sur l'accueil. Les numéros ouvrent les onglets et sections correspondants.

Architecture d'une instance FerrisGitDessin isométrique. Un client Git et un navigateur parlent à un seul binaire Rust, ferrisgit-api, composé des crates api, application, domain et infrastructure. Le binaire range ses données dans PostgreSQL et dans des dépôts Git sur disque, et exécute les jobs de pipeline soit par un ferrisgit-runner sur un hôte Docker, soit dans des Pods d'un cluster Kubernetes. Une ligne orange suit un push jusqu'à ses jobs. Sept cercles numérotés mènent aux tuiles de la page.api application domain infrastructure ferrisgit-runner ferrisgit-api : un seul binaire ferrisgit-runner Client Git HTTPS, identifiant + jeton pas encore de SSH Navigateur connecté, ou anonyme sur les pages publiques api API REST, Git en HTTP, interface web domain entités et ports, sans E/S application cas d'usage infrastructure adaptateurs : PostgreSQL, git, Docker, Kubernetes, SMTP, webhooks PostgreSQL comptes, tickets, pipelines ; migrations au démarrage Dépôts Git sur disque, wikis inclus Hôte Docker le runner interroge toutes les 5 s par défaut, un job à la fois, en conteneur Cluster Kubernetes un Pod par job, créé par le serveur git push pipeline créé jobs interroge les jobs

Fig. 1 Une instance. La ligne orange suit un push, du client jusqu'aux jobs qu'il déclenche.

  • requête ou stockage
  • un push, jusqu'à ses jobs
  • le runner interroge
  • une tuile numérotée de cette page

Wikis, webhooks, comptes et déploiement

Comptes et administration

La double authentification n'est pas optionnelle.

  • Obligatoire pour tous les comptes : application d'authentification (TOTP), clés d'accès (WebAuthn) et codes de secours à usage unique
  • Inscription libre derrière un interrupteur d'administrateur, ou comptes créés par invitation par e-mail
  • Administration : utilisateurs et invitations, réglages de l'instance, métriques d'usage et page de santé

Webhooks

Prévenez d'autres outils quand quelque chose se passe.

  • Requêtes signées (HMAC-SHA256) pour les événements des demandes de fusion, des collaborateurs, des pipelines et des tickets
  • Secrets chiffrés au repos
  • Pas encore de nouvelles tentatives ni de journal des envois : les deux figurent dans la feuille de route

Wikis et releases

La documentation et les livrables restent avec le code.

  • Chaque wiki est stocké dans un dépôt Git à part
  • Les releases portent des fichiers joints

Sous le capot

Ce que vous déployez, et ce qu'il lui faut.

  • Un seul binaire Rust (axum) sert l'API REST, le protocole Git et l'application web Angular
  • PostgreSQL 18 pour les données ; le contenu des dépôts sur le disque du serveur
  • Docker Compose ou un chart Helm pour Kubernetes ; image masmarino/ferrisgit
  • Une architecture hexagonale, répartie sur cinq crates Cargo

Ce qui n'est pas (encore) là

Tout cela figure dans la feuille de route. Rien de cela n'existe aujourd'hui.

  • Git en SSH et clés de déploiement : Git n'est servi qu'en HTTP(S)
  • Branches protégées : un Contributeur peut pousser sur n'importe quelle branche du dépôt
  • Analyse de la qualité du code et analyse de sécurité, y compris sur les demandes de fusion
  • Forks et demandes de fusion entre dépôts, fusions squash et rebase
  • Authentification unique (OIDC, LDAP)
  • Une interface en anglais, italien, espagnol et allemand, et un réglage du thème : elle est en français aujourd'hui et suit le thème du système
  • Un lien avec ArtiFerris
Voir la feuille de route

Essayez-le, puis faites tourner le vôtre.

L'instance publique montre le produit. Votre instance garde votre code.