Aller au contenu

Workflow Git avec Forgejo

PerfShop est hébergé sur Forgejo, un fork communautaire de Gitea qui se comporte exactement comme GitHub ou GitLab du point de vue du développeur. Les commandes Git sont identiques, seuls les noms d'interfaces changent (« Pull Request » devient « Pull Request » — identique ; le nom « Merge Request » de GitLab n'est pas utilisé).

Note

PerfShop n'utilise pas GitLab. Toute la gestion de code source passe par Forgejo auto-hébergé. La documentation dev/git workflow de PerfShop ne décrit que ce workflow Forgejo.

Créer un compte Forgejo

Sur l'instance Forgejo locale de PerfShop (http://<HOST_IP>:3009), un compte forgejo-admin est créé au démarrage par le seed. L'administrateur peut ensuite créer d'autres comptes ou autoriser les inscriptions publiques.

Pour les instances dédiées à la formation, chaque étudiant reçoit un compte individuel créé par le formateur à l'avance.

Cloner

Voir Cloner depuis Forgejo pour les commandes précises.

Workflow branches

Le workflow standard de contribution est le suivant :

flowchart LR
  Main[main] -->|git checkout -b| Feat[feature/ma-fonctionnalite]
  Feat -->|commits| Feat
  Feat -->|git push| Remote[origin/feature/ma-fonctionnalite]
  Remote -->|Pull Request| Review[Revue + CI]
  Review -->|merge| Main

1. Créer une branche

Depuis main à jour :

git checkout main
git pull
git checkout -b feature/ma-fonctionnalite

Nommage des branches recommandé :

Préfixe Usage
feature/... Nouvelle fonctionnalité
fix/... Correction de bug
docs/... Mise à jour de documentation uniquement
refactor/... Refactoring sans changement de comportement
chore/... Tâches techniques (dépendances, CI, build)

2. Committer

git add .
git commit -m "feat(frontend): ajoute le filtre par catégorie sur le catalogue"

PerfShop n'impose pas de format de commit rigide (pas de Conventional Commits obligatoire, pas de linter de message), mais les mainteneurs apprécient des messages clairs et concis en français ou en anglais. La première ligne résume l'intention en 72 caractères maximum ; les lignes suivantes (optionnelles, après une ligne vide) détaillent le contexte.

3. Pousser

git push -u origin feature/ma-fonctionnalite

Le flag -u (ou --set-upstream) configure la branche locale pour suivre la branche distante, ce qui permet ensuite d'utiliser simplement git push et git pull.

4. Ouvrir une Pull Request

Sur l'interface Forgejo, allez dans le dépôt et cliquez sur New Pull Request. Forgejo détecte automatiquement les branches non mergées et vous propose de créer une PR.

Remplissez :

  • Titre — reprend le sujet du commit principal
  • Description — explique le contexte, les choix de conception, les tests effectués
  • Reviewers — désignez un ou plusieurs mainteneurs
  • Labels — éventuels tags (bug, enhancement, documentation, question)

5. Itérer sur la revue

Si les reviewers demandent des changements, continuez à committer et pousser sur la même branche. La PR Forgejo se met à jour automatiquement.

git add .
git commit -m "fix: applique les remarques de la revue"
git push

6. Merge

Une fois la PR approuvée et la CI verte (si elle existe), un mainteneur merge la PR. Trois stratégies sont possibles sur Forgejo, comme sur GitHub :

  • Create a merge commit — conserve tout l'historique de la branche (commit de merge distinct)
  • Squash and merge — combine tous les commits en un seul
  • Rebase and merge — rejoue les commits de la branche sur main sans commit de merge

Le choix dépend de la politique du projet. Par défaut, PerfShop ne force aucune stratégie — c'est au mainteneur qui merge de choisir.

Commandes utiles

Synchroniser avec main

Si votre branche a divergé depuis main et que vous voulez l'actualiser :

git checkout main
git pull
git checkout feature/ma-fonctionnalite
git rebase main

Si des conflits apparaissent, résolvez-les manuellement puis :

git add <fichiers-résolus>
git rebase --continue

Et forcez le push (votre historique a été réécrit) :

git push --force-with-lease

Le --force-with-lease est plus sûr que --force : il refuse de pousser si quelqu'un d'autre a poussé sur la même branche entre temps.

Annuler le dernier commit local

git reset --soft HEAD~1

Les modifications restent dans le staging — vous pouvez re-committer avec un autre message ou d'autres fichiers.

Voir le diff d'un commit

git show <sha>

Chercher dans l'historique

git log --grep="checkout"
git log --author="Philippe"
git log -- frontend/src/pages/Cart.jsx

Clés SSH sur Forgejo

Pour éviter de saisir votre mot de passe à chaque push :

  1. Générez une clé SSH si vous n'en avez pas :
    ssh-keygen -t ed25519 -C "votre@email.com"
    
  2. Copiez le contenu de ~/.ssh/id_ed25519.pub
  3. Sur Forgejo : Settings → SSH / GPG Keys → Add Key
  4. Changez l'URL du remote de HTTPS vers SSH :
    git remote set-url origin git@forgejo.example.com:perfshop/perfshop.git
    

Tokens d'accès personnel

Pour les scripts et la CI qui ne peuvent pas utiliser SSH, Forgejo propose des tokens d'accès personnel à créer dans Settings → Applications → Generate New Token. Le token remplace le mot de passe dans les URLs HTTPS :

git clone https://USERNAME:TOKEN@forgejo.example.com/perfshop/perfshop.git

Stockez jamais les tokens en clair dans un fichier versionné.

.gitignore et fichiers sensibles

Le .gitignore racine du projet exclut déjà :

  • .env (valeurs de configuration locales)
  • node_modules/
  • backend/target/
  • frontend/dist/
  • Fichiers IDE (.idea/, .vscode/, *.iml)
  • Logs et dumps

Ne committez jamais un fichier .env avec des credentials réels, un keystore privé, une clé PGP ou un token d'accès. Si vous le faites par accident, changez immédiatement les credentials compromis — un git revert ne suffit pas car l'historique reste accessible.

Hooks éventuels

PerfShop ne fournit pas de hooks Git obligatoires. Vous pouvez ajouter vos propres hooks locaux dans .git/hooks/ (ex : un pre-commit qui lance mvn spotless:apply ou npm run lint), ils ne seront pas versionnés.

CI / intégration continue

Forgejo supporte un système d'actions compatible GitHub Actions (via Forgejo Actions). Si une instance PerfShop dispose de runners configurés, vous pouvez ajouter des workflows dans .forgejo/workflows/ qui s'exécuteront à chaque push ou PR. Consultez l'interface Forgejo de votre instance pour voir les actions exécutées sur vos PR.

Voir aussi