All checks were successful
Validation Dashboard / Tests backend et build frontend (push) Successful in 50s
58 lines
3.2 KiB
Markdown
58 lines
3.2 KiB
Markdown
# Contrat `app.json`
|
||
|
||
Le dashboard et le portail applicatif utilisent exclusivement le manifeste placé dans le dossier de chaque application déployée :
|
||
|
||
```text
|
||
/opt/manus-deploy/apps/<dossier-technique>/app.json
|
||
```
|
||
|
||
> Une application sans manifeste valide n’est pas considérée comme déployée. Elle n’apparaît donc ni dans le dashboard ni dans le portail.
|
||
|
||
## Schéma minimal
|
||
|
||
```json
|
||
{
|
||
"id": "itinova-contacts",
|
||
"name": "Itinova Contacts",
|
||
"category": "ITINOVA",
|
||
"containerName": "itinova-contacts",
|
||
"giteaRepo": "itinova-contacts",
|
||
"giteaOwner": "manus-admin",
|
||
"image": "images/itinova-contacts.png",
|
||
"ai": {
|
||
"engines": [
|
||
{
|
||
"provider": "Google Gemini",
|
||
"model": "gemini-2.5-flash",
|
||
"role": "Assistant conversationnel",
|
||
"billing": "paid",
|
||
"source": "application"
|
||
}
|
||
]
|
||
},
|
||
"urls": {
|
||
"recette": "https://contacts.recette.santinova-soft.org",
|
||
"prod": "https://contacts.santinova-soft.org"
|
||
}
|
||
}
|
||
```
|
||
|
||
| Champ | Rôle | Règle |
|
||
|---|---|---|
|
||
| `id` | Identifiant stable de l’application | Minuscules, chiffres et tirets uniquement. |
|
||
| `name` | Libellé affiché | Chaîne non vide. |
|
||
| `category` | Emplacement dans le portail | `ITINOVA`, `SANTINOVA` ou `INFRA`. Les applications `INFRA` restent visibles dans le dashboard mais sont exclues du portail. |
|
||
| `containerName` | Conteneur géré par Docker | Obligatoire pour le contrôle de démarrage et de statut. À défaut, le dashboard utilise `id`. |
|
||
| `giteaRepo` | Dépôt source | Sert au webhook CI/CD et à l’inventaire. |
|
||
| `giteaOwner` | Organisation/propriétaire Gitea | Facultatif si la valeur par défaut suffit. |
|
||
| `image` | Image locale du portail | Chemin relatif à `portail-santinova/images/`. |
|
||
| `ai.engines` | Moteurs IA déclarés | Tableau optionnel de métadonnées publiques : `provider`, `model`, `role` optionnel, `billing` (`free` ou `paid`) et `source` (`application` ou `referential`). Ne jamais y mettre une clé, un jeton ni un endpoint privé. |
|
||
| `urls.recette` | URL de recette | Obligatoire et HTTPS pour un dashboard recette. |
|
||
| `urls.prod` | URL de production | Obligatoire et HTTPS pour un dashboard de production. |
|
||
|
||
## Règles de déploiement
|
||
|
||
Chaque premier déploiement doit créer ou mettre à jour le manifeste dans le même commit que le `docker-compose.yml` et les éléments nécessaires à l’application. Lorsqu’une application est promue, son manifeste de production doit contenir l’URL de production avant le démarrage du dashboard. Lorsque l’application utilise un moteur IA, le même commit renseigne `ai.engines` avec des informations descriptives vérifiées, jamais avec des secrets. `billing: "free"` signifie qu’aucune facturation d’API externe n’est appliquée ; `billing: "paid"` couvre les accès facturés ou consommant un crédit. `source: "application"` affiche « Moteur IA configuré dans l’applicatif » tandis que `source: "referential"` affiche « Utilisation du référentiel IA ».
|
||
|
||
Le dashboard ne maintient plus de liste statique d’applications, et le portail ne maintient plus de tuiles codées en dur. Cette règle élimine les écarts de version, d’URL, de catégorie et de statut entre les deux interfaces.
|