No description
- Luau 79.1%
- Nix 20.9%
|
|
||
|---|---|---|
| config | ||
| repos | ||
| schemas | ||
| .editorconfig | ||
| .gitignore | ||
| .luaurc | ||
| AGENTS.md | ||
| architecture.code-workspace | ||
| flake.nix | ||
| LICENSE | ||
| mise.lock | ||
| mise.toml | ||
| README.md | ||
| shell.nix | ||
Foundry — Architecture
Document de référence pour agents IA et contributeurs. Mis à jour manuellement — source de vérité pour la structure de l'organisation.
Vue d'ensemble
Foundry est une forge logicielle qui prend une définition déclarative (definition.toml) et produit des packages signés et reproductibles pour toutes les plateformes cibles. Chaque sous-dossier de C:\Users\Adam\projects\foundry\ est un repo Git indépendant hébergé sur git.stalla.dev/foundry/<nom>.
foundry/
├── apps/ ← cœur : définitions + CI + builders Luau
├── updater/ ← exécutable autonome de mise à jour
├── meta/ ← index JSON + feed de releases
├── nix/ ← flake Nix + overlay nixpkgs
├── scoop/ ← bucket Scoop (Windows)
├── winget/ ← manifests winget (Windows)
├── homebrew/ ← tap Homebrew (macOS)
├── aur/ ← PKGBUILDs (Arch Linux)
├── choco/ ← packages Chocolatey (Windows)
└── architecture/ ← ce repo : documentation transversale
Stack technique
| Outil | Rôle |
|---|---|
| Lune | Runtime Luau — tous les scripts de build et CI |
| mise | Gestion des toolchains (cmake, ninja, cosign, lune…) |
| cosign | Signature keyless des artefacts via Sigstore |
| sccache / buildcache | Cache de compilation distribué via S3 |
| Forgejo | CI/CD + registry OCI + releases |
Flux complet
definition.toml
│
▼
forge:build (apps/.mise/tasks/forge/build.luau)
│ résout les sources, compile via cmake/cargo/make/wasm-pack
│ injecte sccache/buildcache via secrets CI
▼
Artefacts bruts
.flatpak · .AppImage · -setup.exe · .dmg · .wasm
│
▼
forge:sign (apps/.mise/tasks/forge/sign.luau)
│ cosign sign-blob + SHA256SUMS + SBOM (syft)
▼
forge:publish (apps/.mise/tasks/forge/publish.luau)
│ OCI registry (skopeo) + Forgejo Releases
│
├──▶ dispatch → foundry/meta (bump index JSON)
├──▶ dispatch → foundry/nix (bump hash dans .nix)
├──▶ dispatch → foundry/scoop (commit manifest JSON)
├──▶ dispatch → foundry/winget (commit YAML + PR upstream)
├──▶ dispatch → foundry/homebrew(commit cask .rb)
├──▶ dispatch → foundry/aur (commit PKGBUILD)
└──▶ dispatch → foundry/choco (commit nuspec)
Règles de séparation des repos
Un repo séparé est justifié si au moins une de ces conditions est vraie :
- Cycle de vie différent — le repo peut être mis à jour sans rebuilder (bump version + hash).
- Outillage externe spécifique — PR upstream requise (winget-pkgs, homebrew-core, AUR).
- Audience distincte — consommé directement par des tiers (Homebrew tap, Scoop bucket).
- Review humaine requise — winget et homebrew-core exigent une PR approuvée.
Secrets CI requis
Tous les secrets sont définis dans les settings Forgejo du repo apps.
| Secret | Usage |
|---|---|
CACHE_S3_ENDPOINT |
Endpoint S3 du bucket sccache |
CACHE_S3_BUCKET |
Nom du bucket (ex: ccache) |
CACHE_S3_REGION |
Région S3 (défaut: us-east-1) |
CACHE_S3_ACCESS_KEY |
Clé d'accès S3 |
CACHE_S3_SECRET_KEY |
Clé secrète S3 |
REGISTRY_TOKEN |
Token push OCI registry |
MISE_TOKEN |
Token GitHub pour mise (rate limit) |
Ces secrets ne doivent jamais apparaître dans un definition.toml.