# Monorepo

> Plusieurs applications dans un même dépôt : un service par application, chacun construit avec son propre Dockerfile.

Source : https://docs.fransys.cloud/guides/monorepo/ Vérifié sur la console le 2026-10-23.

## Le principe

Un service Fransys par application du dépôt, tous reliés au même dépôt. Chaque service a son pipeline, qui construit l'image avec le Dockerfile de son application.

```txt
mon-depot/
└── apps/
    ├── api/
    │   └── Dockerfile
    └── front/
        └── Dockerfile
```

## Les étapes, pour chaque application

1. **Ajouter le service** : une **Application** par sous-dossier, avec un nom clair (`api`, `front`).
2. **Relier le dépôt** : la même origine du code, le même dépôt et la même branche.
3. **Brancher la CI** : Fransys ouvre une merge request qui ajoute son pipeline.
4. **Indiquer le Dockerfile** : dans votre dépôt, créez une variable de CI propre à ce service (sur GitHub : Settings › Secrets and variables › Actions › Variables), par exemple `DOCKERFILE_PATH_API` = `apps/api/Dockerfile`. Dans le fichier de pipeline ajouté par la merge request, remplacez la variable `DOCKERFILE_PATH` par la vôtre, puis renommez le fichier (par exemple `fransys_api.yml`) pour qu'il ne soit pas écrasé par celui du service suivant.
5. **Merger et vérifier** : quand le pipeline passe, le dernier commit apparaît dans le service.

Recommencez pour chaque application, avec sa propre variable (`DOCKERFILE_PATH_FRONT`…).

## Conseils

- Une faute dans le chemin du Dockerfile fait échouer le build : vérifiez-le dans le journal du pipeline.
- Chaque push déclenche les pipelines de toutes les applications. Pour n'en construire qu'une, ajoutez un filtre de chemins à son pipeline (`paths:` sur GitHub Actions, `rules: changes:` sur GitLab CI).
- La même logique vaut pour GitLab.
