# Stratégie de déploiement RollerLogic

## 🎯 Système de tagging hybride

Le projet utilise une approche **hybride** pour gérer les versions et les déploiements :

### 📦 Numéro de version sémantique (v1.3.73)

**Usage :** Affichage dans l'application et documentation

**Localisation :**

- `version.json` (source de vérité)
- `rollerlogic-api/package.json`
- `rollerlogic-mobile/package.json`
- `admin/js/config.production.js`

**Quand bumper :**

```bash
npm run version:bump:patch   # Bugfix (v1.3.73 → v1.3.74)
npm run version:bump:minor   # Nouvelle feature (v1.3.0 → v1.4.0)
npm run version:bump:major   # Breaking change (v1.0.0 → v2.0.0)
```

⚠️ **Ne bumper QUE pour les vrais changements** (features, bugfixes, breaking changes)  
✅ **PAS à chaque commit** - Évite d'atteindre v99.99.99

**Visible par :**

- Endpoint `/version` de l'API
- Interface du jeu mobile (écran À propos)
- Panel admin
- Logs de déploiement

---

### 🔑 Tag SHA (f57555c)

**Usage :** Déploiement Docker sur production

**Comment ça marche :**

- Chaque commit génère automatiquement un SHA unique (ex: `f57555c`)
- GitHub Actions crée une image Docker avec ce tag
- Le déploiement utilise **toujours le SHA** au lieu du numéro de version

**Avantages :**

- ✅ **Chaque commit = déploiement unique** (jamais de conflit)
- ✅ **Zéro gestion manuelle** (SHA généré automatiquement)
- ✅ **Traçabilité parfaite** (tag pointe directement vers le commit GitHub)
- ✅ **Rollback facile** (juste redéployer un SHA précédent)

**Workflow automatique :**

```
1. git commit -m "fix: correction bug"
2. git push
   ↓
3. GitHub Actions détecte le commit SHA: e7d9997
   ↓
4. Build images Docker avec tags :
   - ghcr.io/.../rollerlogic-api:e7d9997 ← Utilisé pour le déploiement
   - ghcr.io/.../rollerlogic-api:v1.3.73  ← Référence lisible
   - ghcr.io/.../rollerlogic-api:latest
   ↓
5. Déploiement automatique sur OVH avec le tag e7d9997
   ↓
6. Docker Swarm voit un nouveau tag → Pull et redéploie !
```

---

## 🔄 Workflow de développement

### Changements mineurs (refactor, doc, typo)

```bash
git commit -m "refactor: amélioration code"
git push
# ✅ Déploiement automatique (nouveau SHA)
# ℹ️  Version reste v1.3.73 (pas de bump nécessaire)
```

### Bugfix

```bash
# Code fix
npm run version:bump:patch  # v1.3.73 → v1.3.74
git commit -am "fix(api): correction erreur 404"
git push
# ✅ Déploiement automatique (nouveau SHA)
# ✅ Version visible par les utilisateurs : v1.3.74
```

### Nouvelle feature

```bash
# Code de la feature
npm run version:bump:minor  # v1.3.0 → v1.4.0
git commit -am "feat: ajout mode nuit"
git push
# ✅ Déploiement automatique (nouveau SHA)
# ✅ Version visible par les utilisateurs : v1.4.0
```

---

## 📊 Exemple concret

**Semaine type :**

```
Lundi    : 5 commits (refactor, typos) → Version reste v1.3.73, 5 SHA différents
Mardi    : 3 commits (bugfix) → Bump v1.3.74, 3 SHA différents
Mercredi : 2 commits (doc) → Version reste v1.3.74, 2 SHA différents
Jeudi    : 4 commits (feature) → Bump v1.4.0, 4 SHA différents
```

**Résultat :**

- 14 commits dans la semaine
- 14 déploiements automatiques (chaque SHA unique)
- Seulement 2 bumps de version (bugfix + feature)
- Version affichée : v1.4.0 (lisible et significative)

---

## 🔍 Vérifications

### Sur GitHub

```bash
# Voir les images build pour un commit
https://github.com/Taaazzz-prog/RollerLogic_game/commit/e7d9997
→ Associated Docker images: e7d9997, v1.3.73, latest
```

### Sur le serveur

```bash
ssh taaazzz@51.75.55.185

# Voir le tag SHA en production
docker service inspect rollerlogic_rollerlogic-api \
  --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'
# → ghcr.io/.../rollerlogic-api:e7d9997@sha256:...

# Voir la version sémantique
curl https://api.rollerlogic.com/version
# → {"version":"v1.3.73"}
```

---

## 🎯 Best Practices

✅ **DO**

- Bumper la version pour les features, bugfixes, breaking changes
- Commiter et pusher souvent (le SHA gère le déploiement)
- Utiliser des messages de commit conventionnels

❌ **DON'T**

- Ne PAS bumper à chaque commit
- Ne PAS modifier manuellement le tag dans le stack file
- Ne PAS s'inquiéter du nombre de commits

---

## 🔧 Rollback

Si besoin de revenir à une version précédente :

```bash
# Option 1 : Rollback Git
git revert <commit-sha>
git push
# → Nouveau commit, nouveau SHA, déploiement automatique

# Option 2 : Redéployer un SHA spécifique
ssh taaazzz@51.75.55.185
cd ~/RollerLogic
# Modifier le tag dans rollerlogic-stack.yml
sed -i 's/:e7d9997/:abc1234/g' rollerlogic-stack.yml
docker stack deploy -c rollerlogic-stack.yml rollerlogic --with-registry-auth
```

---

**Date de mise en place :** 14 février 2026  
**Dernière mise à jour :** 14 février 2026
