API NestJS minimaliste — support du TP cours-02, Partie 2 (Git Flow).
| Branche | Rôle |
|---|---|
main |
Code en production — ne jamais développer directement dessus |
develop |
Code stabilisé en cours d'intégration |
feature/... |
Développement d'une fonctionnalité → fusionne dans develop |
release/... |
Préparation d'une livraison → fusionne dans main puis develop |
hotfix/... |
Correctif urgent → fusionne dans main puis develop |
Détail des règles et cycles de vie → BRANCHES.md
Par défaut, les Pull Requests sont ouvertes dans ton fork : par exemple release/1.1.0 est proposée vers main de ton dépôt forké.
Si l'enseignant le demande explicitement, la Pull Request peut viser le dépôt central GVI2026/tp-git-flow. Sans droit d'écriture ou sans accès GitHub disponible, le scénario peut être simulé localement avec les merges indiqués dans ce README, en gardant la même logique de revue et de validation.
Prérequis : VS Code + Docker Desktop + extension Dev Containers
-
Forker le dépôt sur GitHub, puis le cloner :
git clone <url-de-ton-fork> cd cours-02-git-flow-api
-
Ouvrir dans VS Code et accepter "Reopen in Container" — ou via la palette de commandes :
Dev Containers: Reopen in Container -
Attendre l'initialisation (première fois ~2 min). Les dépendances npm et les migrations Prisma s'exécutent automatiquement.
-
Lancer l'application :
npm run start:dev
-
Swagger disponible sur http://localhost:3000/api
Prérequis : Node.js 24, PostgreSQL 18
-
Copier et renseigner les variables d'environnement :
cp .env.example .env # Éditer .env : renseigner DATABASE_URL -
Installer les dépendances :
npm install
-
Appliquer les migrations :
npx prisma migrate dev --name init
-
Lancer l'application :
npm run start:dev
npm test| Méthode | Route | Description |
|---|---|---|
POST |
/tasks |
Créer une tâche |
GET |
/tasks |
Lister toutes les tâches |
GET |
/tasks/:id |
Récupérer une tâche |
PATCH |
/tasks/:id |
Mettre à jour une tâche |
DELETE |
/tasks/:id |
Supprimer une tâche |
GET |
/tasks/stats |
{ total, done, pending } |
- Forker le dépôt sur GitHub, puis le cloner.
- Vérifier que les deux branches permanentes existent :
Tu dois voir
git branch -a
mainetorigin/develop. - Se placer sur
develop:git checkout develop
- Créer la branche de fonctionnalité depuis
develop:git checkout -b feature/add-task-stats
- Implémenter
GET /tasks/statsdansTasksServiceetTasksController. - Décommenter le bloc
TODOdanstasks.service.spec.tset l'adapter. - Vérifier que tous les tests passent :
npm test - Committer proprement (conventional commits) :
git add . git commit -m "feat: add task stats endpoint"
- Fusionner la feature dans
develop:git checkout develop git merge feature/add-task-stats
- Supprimer la branche locale :
git branch -d feature/add-task-stats
- Créer la branche de release depuis
develop:git checkout -b release/1.1.0
- Mettre à jour le fichier
VERSION:1.1.0 - Committer cette préparation :
git commit -am "chore: prepare release 1.1.0"
- Pousser la branche de release :
git push origin release/1.1.0
- Ouvrir une Pull Request
release/1.1.0→mainsur GitHub. - Après merge, créer un tag sur
main:git checkout main git pull git tag v1.1.0 git push origin v1.1.0
- Répercuter la release dans
develop:git checkout develop git merge main git push origin develop
Après avoir terminé le scénario principal, simule un correctif urgent en production.
La validation du champ title est actuellement incomplète : un POST /tasks avec { "title": "" } accepte une chaîne vide.
- Créer une branche
hotfix/fix-title-validationdepuismain:git checkout main git checkout -b hotfix/fix-title-validation
- Corriger le problème dans
CreateTaskDto. - Écrire un test qui vérifie que le titre vide est rejeté.
- Committer :
fix: reject empty task title - Merger dans
main, taggerv1.1.1:git checkout main git merge hotfix/fix-title-validation git tag v1.1.1 git push origin main v1.1.1
- Répercuter dans
develop:git checkout develop git merge main git push origin develop
Avant la séance, s'assurer que :
- La branche
developexiste et est poussée :git push origin develop mainest protégée : PR obligatoire, CI doit passer avant mergedevelopest semi-protégée : push direct interdit depuis GitHub, merge local autorisénpm testest vert sur un dépôt fraîchement cloné