Files
Lanceur-Geco/CLAUDE.md
2026-03-24 17:42:04 +01:00

5.1 KiB

Git Update Checker

Description

Outil Windows (.exe) avec interface graphique qui vérifie les mises à jour de plusieurs dépôts Git distants et propose de les télécharger. Conçu pour être placé sur une clé USB dont la lettre de lecteur peut changer. Le programme peut s'auto-mettre à jour car il est lui-même dans un dépôt git.

Structure du projet

Lanceur-geco/
├── git_updater.py    # Script principal Python (GUI tkinter)
├── version.txt       # Fichier contenant le numéro de version (ex: "0.5.1")
├── config.ini        # Configuration multi-repo
├── build.bat         # Script de compilation en .exe via PyInstaller
├── log/              # Dossier de logs (créé automatiquement, 1 fichier par jour)
└── CLAUDE.md

Règles importantes

  • Tous les chemins doivent être relatifs à l'emplacement de l'exe. Jamais de chemin absolu (pas de C:\, G:\, etc.). Utiliser .. et des chemins relatifs pour référencer les dossiers.
  • Accès lecture seule : le programme ne fait que git fetch, git pull et git checkout. Jamais de git push, git commit, git add, ou toute opération d'écriture vers le remote.
  • Multi-repo : le programme peut surveiller plusieurs dépôts Git configurés dans config.ini.

Versioning

  • La version est définie en dur dans git_updater.py via la constante VERSION (ex: VERSION = "0.5.1")
  • Le fichier version.txt à la racine du projet contient le même numéro de version (utilisé par le mécanisme d'auto-update distant)
  • Format : semver simplifié MAJEUR.MINEUR.PATCH (ex: 0.5.1)
  • Les deux doivent toujours être synchronisés : quand on change la version, mettre à jour VERSION dans git_updater.py ET version.txt

Mise à jour de la version

A chaque changement de version, il faut mettre à jour 3 éléments :

  1. VERSION dans git_updater.py (constante en haut du fichier)
  2. version.txt à la racine du projet
  3. Recompiler l'exe via build.bat et copier dist/GitUpdateChecker.exe à la racine du projet

Mécanisme de comparaison

  • La fonction _version_tuple(v) convertit la chaîne version en tuple d'entiers (ex: "0.5.1" -> (0, 5, 1)) pour permettre la comparaison numérique
  • L'auto-update télécharge version.txt depuis le serveur Gitea via HTTP ({repo_url}/raw/branch/master/version.txt) et compare avec la VERSION locale
  • Si la version distante est supérieure, une mise à jour est proposée

Fonctionnement

Auto-update

  1. Au démarrage, le programme télécharge version.txt depuis le serveur Gitea via HTTP
  2. Compare la version distante avec la constante VERSION locale (comparaison par tuple numérique)
  3. Si la version distante est supérieure, propose de télécharger le nouvel exe
  4. Stratégie de remplacement : télécharge dans .new, renomme l'exe actuel en .old, place le nouveau
  5. Après mise à jour, demande un redémarrage

Vérification des dépôts

  1. Lit la liste des dépôts depuis config.ini (chemins relatifs à l'exe)
  2. Pour chaque dépôt :
    • git fetch pour récupérer l'état distant
    • Compare commits locaux vs distants
    • Détecte les fichiers supprimés/modifiés localement
  3. Affiche le résultat dans une interface graphique (tkinter)
  4. Propose pour chaque dépôt :
    • git pull si nouveaux commits distants
    • git checkout -- . si fichiers locaux manquants/modifiés

Configuration (config.ini)

Supporte plusieurs sections [repo:NomDuRepo] :

[repo:Batch]
url = http://192.168.1.235:3125/zogzog/Batch
path = ../Batch

[repo:Powershell]
url = http://192.168.1.235:3125/zogzog/Powershell
path = ../Powershell
  • url : URL du dépôt Git distant
  • path : Chemin relatif vers le dossier local du dépôt (relatif à l'exe)

Logging

  • Les logs sont écrits dans log/ à côté de l'exe (1 fichier par jour, format YYYY-MM-DD.log)
  • Les vieux logs sont nettoyés automatiquement (30 jours de rétention)
  • Chaque action git, erreur, et résultat est loggé avec timestamp
  • Bouton "Ouvrir les logs" dans la GUI pour accéder au dossier

Build

build.bat

Requiert Python + pip. Installe PyInstaller automatiquement si absent. Produit dist/GitUpdateChecker.exe. Copier config.ini à côté de l'exe.

Contraintes techniques

  • Chemins relatifs : Tout est relatif à l'exe, jamais de chemin absolu
  • Encodage : Force UTF-8 pour les caractères Unicode
  • Clé USB : Fonctionne sur n'importe quelle lettre de lecteur
  • Git requis : Git doit être installé et dans le PATH de la machine
  • Serveur Gitea : Le remote origin pointe vers une instance Gitea locale (192.168.1.235:3125)
  • Lecture seule : Aucune opération d'écriture vers le remote (pas de push/commit)
  • Interface : GUI tkinter (inclus dans Python, pas de dépendance externe)
  • Logs : Dossier log/ à côté de l'exe, rotation automatique 30 jours

Conventions

  • Langage : Python 3, pas de dépendances externes (seulement stdlib + tkinter)
  • Interface : GUI tkinter en français
  • Langue : Français pour l'interface utilisateur