architecture-globale.mmd 98 lignes · 4288 octets
%%{init: {"theme": "default"}}%%
flowchart TB
    %% -------------------------------------------------------------------------
    %% Clients externes
    %% -------------------------------------------------------------------------
    subgraph Clients
        Browser["Navigateur Web"]
        GitCLI["Git CLI"]
    end

    %% -------------------------------------------------------------------------
    %% Point d'entrée binaire
    %% -------------------------------------------------------------------------
    subgraph Binaire["Binaire gitrust (src/main.rs)"]
        Main["main()"]
    end

    %% -------------------------------------------------------------------------
    %% Crates applicatifs gitrust
    %% -------------------------------------------------------------------------
    subgraph Crates["Crates Gitrust"]
        Web["gitrust-web\nRoutes HTTP · templates Askama\nhandlers Axum · SSR + API REST"]
        SSH["gitrust-ssh\nServeur SSH (russh)\nauth par clé · sessions git"]
        Hooks["gitrust-hooks\nimpl RustwardenHooks\non_user_registered · on_user_deleted"]
        Core["gitrust-core\nModels SeaORM · services métier\nmigrations · rôles · DTOs"]
        Git["gitrust-git\nBare repos · tree browser\nblob reader · pack protocol (git2)"]
    end

    %% -------------------------------------------------------------------------
    %% Framework rustwarden-core
    %% -------------------------------------------------------------------------
    subgraph Framework["Framework"]
        RW["rustwarden-core\nAuth · JWT · sessions\nResourceService · i18n · SMTP worker"]
    end

    %% -------------------------------------------------------------------------
    %% Stockage persistant
    %% -------------------------------------------------------------------------
    subgraph Stockage["Stockage"]
        PG[("PostgreSQL\nusers · repositories · ssh_keys\nteams · ci_pipelines · notifications")]
        FS[("Filesystem\nbare repos .git\nSSH host key")]
    end

    %% -------------------------------------------------------------------------
    %% CI/CD (optionnel — CI_ENABLED=true)
    %% -------------------------------------------------------------------------
    subgraph CI["CI/CD (optionnel)"]
        CiWorker["CiWorker\ntokio::spawn · mpsc"]
        Dagger["Dagger Engine\ncontainers isolés · cache"]
        CiEngine["ci-engine\nmodule Dagger Python\nEasy Mode"]
        Syft["Syft\ngénération SBOM CycloneDX"]
        DTrack["Dependency-Track\nanalyse vulnérabilités CVE"]
    end

    %% -------------------------------------------------------------------------
    %% Flux clients → serveurs
    %% -------------------------------------------------------------------------
    Browser -->|"HTTP :4000"| Web
    GitCLI  -->|"SSH :2222"| SSH
    GitCLI  -->|"HTTPS :4000"| Web

    %% -------------------------------------------------------------------------
    %% main() → crates
    %% -------------------------------------------------------------------------
    Main --> Web
    Main --> SSH
    Main --> Hooks
    Main -.->|"si CI_ENABLED"| CiWorker

    %% -------------------------------------------------------------------------
    %% Crates → Core et Git
    %% -------------------------------------------------------------------------
    Web   --> Core
    Web   --> Git
    SSH   --> Core
    SSH   --> Git
    Hooks --> Core

    %% -------------------------------------------------------------------------
    %% Core → Framework et PostgreSQL
    %% -------------------------------------------------------------------------
    Core --> RW
    Core --> PG

    %% -------------------------------------------------------------------------
    %% Git → Filesystem
    %% -------------------------------------------------------------------------
    Git --> FS

    %% -------------------------------------------------------------------------
    %% CI pipeline
    %% -------------------------------------------------------------------------
    CiWorker --> Core
    CiWorker -->|"dagger call"| Dagger
    Dagger   -->|"Easy Mode"| CiEngine
    Dagger   -->|"Power Mode (.dagger/)"| FS
    CiWorker -.->|"si CI_SBOM_ENABLED"| Syft
    Syft     -.->|"si CI_DTRACK_ENABLED"| DTrack