# Developpement, production et versions

## Version courante

La source de verite est le fichier `VERSION`. Le projet suit le versionnement
semantique :

- `MAJEURE` : changement incompatible ou migration majeure ;
- `MINEURE` : fonctionnalite compatible ;
- `CORRECTIF` : correction compatible ;
- suffixe `-dev.N`, `-alpha.N` ou `-rc.N` avant une version stable.

La version est incluse dans le tag Docker, les labels OCI et la reponse
`GET /health/`.

## Developpement

Le code reste sur la machine et est monte dans le conteneur. Gunicorn surveille
les fichiers Python par interrogation periodique et recharge ses workers.

```powershell
docker compose up -d --build
```

Une modification Python, HTML, CSS ou JavaScript ne necessite pas de rebuild.
Une modification de `requirements.txt`, du `Dockerfile` ou des paquets systeme
necessite une reconstruction.

## Production

Le Compose principal n'utilise aucun volume de code. Seuls MariaDB, les
televersements, l'instance Flask, les donnees de fonctionnement et les
sauvegardes sont persistants.

Construire une version immuable :

```powershell
.\docker\build-release.ps1
```

Sous Debian :

```bash
./docker/build-release.sh
```

Deployer la version indiquee dans `VERSION` :

```powershell
$env:GMAO_VERSION = (Get-Content .\VERSION -Raw).Trim()
docker compose -f docker-compose.yml up -d
```

Ne jamais monter les sources ni activer `--reload` en production.

## Procedure de publication

1. Mettre a jour `VERSION`.
2. Completer `CHANGELOG.md`.
3. Executer `python -m pytest`.
4. Construire l'image avec `docker/build-release.ps1`.
5. Verifier `/health/` et sa cle `version`.
6. Creer un commit et un tag Git `gmao-v<version>`.
7. Conserver l'image versionnee ; ne pas deployer uniquement avec `latest`.

Pour une version stable, `build-release.ps1 -TagLatest` ajoute aussi le tag
`latest`. Le script refuse ce tag pour une preversion.
