# 03 — Outil de gestion des versions

Projet **(RE)Sources Relationnelles** — Bloc INFCDAAL3

## 1. Outil choisi : Git + Gitea (auto-hébergé)

Le versionnement du code repose sur **Git**, hébergé sur une instance
**Gitea** auto-hébergée par l'équipe :

- Instance : `https://gitea.sam-coffre.duckdns.org/`
- Motivations du choix :
  - **Maîtrise des données** : hébergement sur notre propre serveur (cohérent
    avec un contexte ministériel / RGPD, pas de dépendance à un tiers).
  - **Léger et open source** : Gitea est simple à administrer et gratuit.
  - **Fonctionnalités complètes** : dépôts Git, *pull requests*, *issues*,
    *releases*, et **Gitea Actions** (CI/CD) intégrés.

## 2. Organisation du dépôt

- **Branche principale** : `master` (branche de référence, protégée, déployée).
- **Branches de fonctionnalité** *(recommandé)* : une branche par fonctionnalité
  (`feature/…`), fusionnée via *pull request* après relecture.
- Fichiers de configuration Git présents : `.gitignore`, `.gitattributes`,
  `.editorconfig` (cohérence entre développeurs).

## 3. Convention de nommage des commits

Convention recommandée (type *Conventional Commits*) :

```
<type>: <description courte>

Types : feat, fix, docs, style, refactor, test, chore
Exemples :
  feat: ajout de la création de ressources
  fix: correction de la redirection HTTPS
  docs: rédaction du plan de sécurisation
```

## 4. Flux de travail (workflow) proposé

1. Créer une branche depuis `master` : `git checkout -b feature/ma-fonctionnalite`.
2. Développer + commits atomiques.
3. Pousser la branche : `git push origin feature/ma-fonctionnalite`.
4. Ouvrir une **Pull Request** sur Gitea.
5. La **CI** (Pint + tests) s'exécute automatiquement sur la PR.
6. Relecture par un pair, puis fusion dans `master`.
7. La fusion déclenche le **déploiement automatique** en production.

## 5. Gestion des livraisons (releases)

- Utilisation des **tags Git** pour marquer les versions : `v1.0.0`, `v1.1.0`…
- Convention **SemVer** : `MAJEUR.MINEUR.CORRECTIF`.
- Les *Releases* Gitea documentent chaque version livrée (notes de version).

## 6. Sécurité du dépôt

- Aucun secret versionné : `.env`, clés et certificats sont exclus via
  `.gitignore`.
- Accès au dépôt restreint aux membres de l'équipe (comptes Gitea).
- Historique complet et traçable (auteur, date, message de chaque modification).
