Files
Lanceur-Geco/CLAUDE.md
zogzog 98b5187bfc v0.7.7 - Icone PNG embarquee dans l'en-tete GUI
Changements :
- Icone icon.png embarquee dans l'exe via go:embed
- Affichage de l'icone a gauche du titre dans l'interface
- Mise a jour CLAUDE.md pour refleter la migration Go

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-25 12:42:33 +01:00

6.9 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.

Langage

Go (anciennement Python, migré en Go depuis v0.7.x).

  • GUI : github.com/lxn/walk (contrôles natifs Windows)
  • Exe unique, aucune dépendance externe à l'exécution
  • Build : go build via build.bat

Structure du projet

Lanceur-geco/
├── main.go              # Point d'entrée, constante VERSION
├── config.go            # Chargement config.ini (repos + self-update)
├── git.go               # Opérations git (check, clone, pull, checkout, clean)
├── gui.go               # Interface graphique (walk/TableView)
├── logger.go            # Logging fichier (1 fichier/jour, rotation 30j)
├── selfupdate.go        # Auto-mise à jour du programme
├── platform_windows.go  # Code spécifique Windows (création processus)
├── version.txt          # Numéro de version (utilisé par l'auto-update distant)
├── config.ini           # Configuration multi-repo
├── build.bat            # Script de compilation en .exe
├── app.manifest         # Manifeste Windows (DPI, elevation)
├── icon.ico             # Icône application
├── go.mod / go.sum      # Dépendances Go
├── log/                 # Dossier de logs (créé automatiquement)
└── 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 ls-remote, git fetch, git pull, git checkout et git clean. 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 main.go via la constante VERSION (ex: const VERSION = "0.7.6")
  • 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.7.6)
  • Les deux doivent toujours être synchronisés : quand on change la version, mettre à jour VERSION dans main.go ET version.txt

Mise à jour de la version

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

  1. VERSION dans main.go (constante en haut du fichier)
  2. version.txt à la racine du projet
  3. Recompiler l'exe via build.bat (produit GitUpdateChecker.exe à la racine)
  4. Créer un commit avec le message suivant :
v{VERSION} - {description courte des changements}

Changements :
- {changement 1}
- {changement 2}
- ...

Exemple :

v0.7.6 - Clone dossier non-vide et verification rapide

Changements :
- Clone dans dossier non-vide (git init + remote add + fetch + checkout)
- Verification rapide via git ls-remote au lieu de git fetch
- Support branche par repo dans config.ini

Mécanisme de comparaison

  • La fonction parseVersion(v) convertit la chaîne version en [3]int (ex: "0.7.6" -> [0, 7, 6]) pour permettre la comparaison numérique
  • L'auto-update télécharge version.txt depuis le serveur Gitea via HTTP ({repo_url}/raw/branch/{branch}/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, lance un script batch de 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 (en parallèle via goroutines) :
    • git ls-remote pour vérifier la disponibilité et comparer les hashs (rapide, timeout 15s)
    • git status --porcelain pour détecter les fichiers modifiés/non suivis localement
  3. Affiche le résultat dans une interface graphique (walk/TableView)
  4. Propose pour chaque dépôt :
    • git pull si MAJ disponible (hash distant différent)
    • git checkout -- . si fichiers locaux modifiés
    • git clean -fd si fichiers non suivis en trop

Clone dans dossier non-vide

Si le dossier cible existe déjà mais n'a pas de .git (ex: repos imbriqués), le programme fait un clone "in-place" : git init + git remote add + git fetch + git checkout -b <branch>

Configuration (config.ini)

Supporte plusieurs sections [repo:NomDuRepo] :

[self-update]
url = http://192.168.1.235:3125/zogzog/Lanceur-geco
exe_name = GitUpdateChecker.exe
branch = master

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

[repo:Soft]
url = http://192.168.1.235:3125/zogzog/Soft.git
path = ../SOFT/
branch = master
  • url : URL du dépôt Git distant
  • path : Chemin relatif vers le dossier local du dépôt (relatif à l'exe)
  • branch : Branche à suivre (optionnel, défaut: master)

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 "Logs" dans la GUI pour ouvrir le dossier

Build

build.bat

Requiert Go installé et dans le PATH. Installe rsrc automatiquement si absent. Produit GitUpdateChecker.exe à la racine (exe unique, pas de dépendances). Flags de build : -H windowsgui -s -w (pas de console, symboles strippés).

Contraintes techniques

  • Chemins relatifs : Tout est relatif à l'exe, jamais de chemin absolu
  • 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 native Windows via walk (pas de console)
  • Logs : Dossier log/ à côté de l'exe, rotation automatique 30 jours
  • Repos imbriqués : Supporte les dépôts git imbriqués (ex: parent/enfant) via clone in-place

Conventions

  • Langage : Go 1.22+
  • GUI : github.com/lxn/walk (contrôles natifs Windows)
  • Interface en français
  • Pas de console (flag -H windowsgui)