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
GitRust