# Guide de Release

## Versioning

Le projet utilise le [Semantic Versioning](https://semver.org/) (SemVer) : `MAJOR.MINOR.PATCH`

- **MAJOR** : Changements incompatibles avec les versions précédentes
- **MINOR** : Nouvelles fonctionnalités rétrocompatibles
- **PATCH** : Corrections de bugs rétrocompatibles

La version est centralisée dans le fichier `VERSION` à la racine du projet.

## Créer une release

### Prérequis

- Tous les changements doivent être commités
- Les tests doivent passer
- Être sur la branche à releaser (ex: `main`, `develop`)

### Utilisation du script

```bash
# Afficher l'aide et la version actuelle
./scripts/release.sh

# Bump patch : 1.0.0 → 1.0.1
./scripts/release.sh patch

# Bump minor : 1.0.0 → 1.1.0
./scripts/release.sh minor

# Bump major : 1.0.0 → 2.0.0
./scripts/release.sh major

# Version spécifique
./scripts/release.sh 2.0.0
```

Le script :
1. Met à jour le fichier `VERSION`
2. Met à jour `config/packages/api_platform.yaml`
3. Crée un commit `chore(release): vX.Y.Z`
4. Crée le tag `vX.Y.Z`

### Pousser la release

```bash
git push && git push --tags
```

### Créer la release sur Gitea

1. Aller sur le dépôt Gitea
2. **Releases** > **New Release**
3. Sélectionner le tag `vX.Y.Z`
4. Titre : `v1.0.0` (ou avec un nom descriptif)
5. Description : résumé des changements (voir section Notes de release)

## Notes de release

Template pour les notes de release :

```markdown
## Nouveautés
- Feature A
- Feature B

## Corrections
- Fix du bug X
- Fix du bug Y

## Changements
- Refactoring de Z
- Mise à jour des dépendances
```

## Fichiers impactés par le versioning

| Fichier | Usage |
|---------|-------|
| `VERSION` | Source unique de vérité |
| `config/packages/api_platform.yaml` | Version affichée dans l'API |
| `Inventory_frontend/nuxt.config.ts` | Lit VERSION au build |
| Footer de l'app | Affiche `v{{ appVersion }}` |

## Déploiement en production

### 1. Base de données

Dump de la base locale :
```bash
pg_dump -h localhost -p 5433 -U root -d inventory > backup_v1.0.0.sql
```

Import en production :
```bash
psql -h <PROD_HOST> -U <PROD_USER> -d inventory < backup_v1.0.0.sql
```

### 2. Variables d'environnement production

Créer un fichier `.env.local` en production avec :

```env
APP_ENV=prod
APP_SECRET=<générer avec: openssl rand -hex 32>
DATABASE_URL="postgresql://user:password@host:5432/inventory?serverVersion=16"
CORS_ALLOW_ORIGIN='^https://votre-domaine\.com$'
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE=<votre-passphrase>
```

### 3. Build production

Backend :
```bash
composer install --no-dev --optimize-autoloader
php bin/console cache:clear --env=prod
php bin/console doctrine:migrations:migrate --no-interaction
```

Frontend :
```bash
cd Inventory_frontend
NUXT_PUBLIC_API_BASE_URL=https://api.votre-domaine.com yarn build
```

### 4. Checklist avant mise en prod

- [ ] Tests passent
- [ ] Migrations DB testées
- [ ] Variables d'environnement configurées
- [ ] Clés JWT générées
- [ ] CORS configuré
- [ ] SSL/HTTPS actif
- [ ] Backup de la DB prod existante (si upgrade)
