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>
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 buildviabuild.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 checkoutetgit clean. Jamais degit 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.govia la constanteVERSION(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
VERSIONdansmain.goETversion.txt
Mise à jour de la version
A chaque changement de version, il faut mettre à jour 4 éléments :
VERSIONdansmain.go(constante en haut du fichier)version.txtà la racine du projet- Recompiler l'exe via
build.bat(produitGitUpdateChecker.exeà la racine) - 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.txtdepuis le serveur Gitea via HTTP ({repo_url}/raw/branch/{branch}/version.txt) et compare avec laVERSIONlocale - Si la version distante est supérieure, une mise à jour est proposée
Fonctionnement
Auto-update
- Au démarrage, le programme télécharge
version.txtdepuis le serveur Gitea via HTTP - Compare la version distante avec la constante
VERSIONlocale (comparaison par tuple numérique) - Si la version distante est supérieure, propose de télécharger le nouvel exe
- Stratégie de remplacement : télécharge dans
.new, renomme l'exe actuel en.old, place le nouveau - Après mise à jour, lance un script batch de redémarrage
Vérification des dépôts
- Lit la liste des dépôts depuis
config.ini(chemins relatifs à l'exe) - Pour chaque dépôt (en parallèle via goroutines) :
git ls-remotepour vérifier la disponibilité et comparer les hashs (rapide, timeout 15s)git status --porcelainpour détecter les fichiers modifiés/non suivis localement
- Affiche le résultat dans une interface graphique (walk/TableView)
- Propose pour chaque dépôt :
git pullsi MAJ disponible (hash distant différent)git checkout -- .si fichiers locaux modifiésgit clean -fdsi 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 distantpath: 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, formatYYYY-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)