Session 25 — Phase 10 · Forgejo Git local + Scripts UI¶
Objectif¶
Déployer un serveur Git auto-hébergé (Forgejo) et une interface web de gestion de scripts de test (Scripts UI) directement dans la stack PerfShop, permettant aux étudiants de travailler sur leurs scripts sans dépendance au GitLab externe.
Ce qui a été livré¶
Nouveaux services¶
| Service | Image | Port | URL |
|---|---|---|---|
perfshop-forgejo |
codeberg.org/forgejo/forgejo:14 |
3009 | perfshop-git.perfshop.io |
perfshop-forgejo-seed |
python:3.11-slim |
— | restart: no |
perfshop-scripts-ui |
node:20-alpine |
3008 | perfshop-scripts.perfshop.io |
Fonctionnalités Scripts UI¶
- Éditeur CodeMirror avec coloration Robot Framework et Python
- Arborescence fichiers avec navigation et expand/collapse
- Upload drag & drop avec choix du dossier cible
- Lancement de scripts via
docker exec perfshop-test-runner - Résultats en temps réel (polling 1.5s)
- Publication vers Forgejo (Sync Git)
- Sync depuis Forgejo (
git pull) - Historique des commits
Corrections docker-compose¶
| Problème | Correction |
|---|---|
FORGEJO__database__PATH=/data/forgejo.db → erreur no such file |
Corrigé en /data/gitea/forgejo.db |
GITEA_ADMIN_* manquants → admin non créé au démarrage |
Variables ajoutées dans les 3 compose |
squash-seed depends_on forgejo-seed manquant |
Ajouté dans les 3 compose |
SESSION_SECRET absent de scripts-ui |
Ajouté + variable dans .env.example et .env.production |
Tag forgejo:latest inexistant |
Corrigé en forgejo:14 |
forgejo-seed liste fixe de scripts |
Remplacé par scan dynamique de tous les .robot et .py |
Bugs corrigés¶
| Bug | Sévérité | Fix |
|---|---|---|
codeberg.org/forgejo/forgejo:latest — manifest unknown |
🔴 Bloquant | Tag corrigé en :14 |
FORGEJO__database__PATH=/data/forgejo.db — no such file |
🔴 Bloquant | Chemin corrigé en /data/gitea/forgejo.db |
| Admin Forgejo non créé au démarrage | 🔴 Bloquant | GITEA_ADMIN_USERNAME/PASSWORD ajoutés |
Seed liste fixe — test_prix_panier.py absent |
🟡 Majeur | Scan dynamique os.walk() |
CodeMirror mode robotframework 404 cdnjs |
🟡 Majeur | Mode inline defineSimpleMode |
SESSION_SECRET hardcodé dans server.js |
🟠 Sécurité | Variable env |
Résultats de validation¶
| Test | Résultat |
|---|---|
| Forgejo accessible | ✅ https://perfshop-git.perfshop.io |
Compte forgejo-admin créé |
✅ |
Compte perfshop-ci créé par seed |
✅ |
Dépôt perfshop-tests créé |
✅ |
| Scripts poussés dans Forgejo | ✅ |
| Scripts UI accessible | ✅ https://perfshop-scripts.perfshop.io |
CT-002 .robot PASS via Scripts UI |
✅ |
CT-003 .py pytest PASS via Scripts UI |
✅ Selenium visible en VNC |
| Squash TM connecté à Forgejo | ✅ SCM configuré |
| Pipeline Squash → Forgejo → Test Runner | ✅ |
Erreurs documentées (anti-patterns)¶
FORGEJO__database__PATH incorrect¶
Catégorie : Fix Théorique Sans Validation Empirique
Cause : chemin /data/forgejo.db spécifié alors que Forgejo attend /data/gitea/
Impact : Forgejo crash en boucle (unable to open database file)
Fix : /data/gitea/forgejo.db
Tag forgejo:latest inexistant¶
Catégorie : Mauvaise connaissance de l'API externe
Cause : le registry Forgejo sur codeberg.org n'expose pas de tag latest
Fix : tag versionné forgejo:14
Admin Forgejo non auto-créé¶
Catégorie : Comportement Forgejo vs Gitea différent
Cause : INSTALL_LOCK=true + GITEA_ADMIN_* variables non ajoutées dans le compose
Fix : GITEA_ADMIN_USERNAME + GITEA_ADMIN_PASSWORD dans environment
Architecture finale Phase 10¶
perfshop-forgejo (Git local)
└── Volume forgejo-data → /data/gitea/forgejo.db
perfshop-forgejo-seed (restart: no)
├── Crée perfshop-ci via API admin
├── Crée token API → /token/forgejo_token
├── Crée dépôt perfshop-tests
└── Pousse tous les .robot et .py de /scripts
forgejo-token-data (volume partagé)
├── Écrit par : forgejo-seed
└── Lu par : scripts-ui (read-only)
perfshop-scripts-ui (Node.js :3008)
├── Auth : session PerfShop
├── Edit : CodeMirror (.robot / .py)
├── Run : docker exec perfshop-test-runner
└── Push : API Forgejo via token
Squash TM
└── SCM : http://perfshop-forgejo:3000/perfshop-ci/