Aller au contenu

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/