Files
Loki/tools/gen-icon/main.go
T
nathaninline 1f3961eaa9 v0.6.10 : dossier de travail pour l'agent, lancement Windows explicite, mise à jour lisible, icône noire
- mode agent : les outils write/edit/bash résolvent les chemins relatifs dans
  JEAN_HOME/workspace et le shell y démarre, au lieu du répertoire courant du
  processus (Bureau, ProgramData\jean\bin). Les chemins absolus demandés
  explicitement restent honorés.
- Windows : le double-clic n'installe plus en silence. Boîte de dialogue unique,
  raccourcis menu Démarrer + Bureau, puis relance depuis la copie installée — un
  seul binaire fait foi. Désinstallation : retrait des raccourcis.
- update : contrôle des droits AVANT le téléchargement (l'échec tombait sur le
  fichier temporaire, avec un message brut), message donnant la commande exacte,
  timeout UI porté de 30 s à 10 min.
- jean where + bouton « Où sont mes fichiers ? » : emplacements, et alerte quand
  le binaire lancé n'est pas celui installé.
- icônes : source unique (sys_brand_icon.go) pour la zone de notification, la
  barre de menus macOS et l'icône du .exe, alignée sur le favicon noir. macOS en
  icône template (une icône noire figée disparaît sur une barre sombre).
- CI : le bundle macOS part de icon.png au lieu de convertir le .ico via sips,
  dont l'échec était masqué par « || true » ; notes de release versionnées.
2026-08-04 11:17:43 +02:00

40 lines
1.2 KiB
Go

// gen-icon écrit cmd/jean/icon.ico à partir de l'icône de marque dessinée dans
// internal/jean (sys_brand_icon.go), pour que l'icône du .exe soit toujours la
// même que le favicon de l'UI et que celle de la zone de notification.
//
// Lancé par `go generate ./cmd/jean`, AVANT goversioninfo qui embarque le .ico
// dans les ressources Windows.
package main
import (
"fmt"
"os"
"strings"
"github.com/nathaninline/jean/internal/jean"
)
func main() {
out := "icon.ico"
if len(os.Args) > 1 {
out = os.Args[1]
}
// Les tailles attendues par l'explorateur Windows, de la barre des tâches à
// l'aperçu en grandes icônes.
write(out, jean.BrandICO(16, 32, 48, 64, 128, 256))
// PNG 1024 pour le bundle macOS : la CI en tire le .icns via sips/iconutil.
// Elle partait auparavant du .ico, ce qui suppose que sips sache lire un ICO —
// et l'échec y est masqué par « || true », donc une app Mac sans icône passait
// inaperçue. Un PNG ne laisse aucune place au doute.
write(strings.TrimSuffix(out, ".ico")+".png", jean.BrandIconPNG(1024))
}
func write(path string, data []byte) {
if err := os.WriteFile(path, data, 0o644); err != nil {
fmt.Fprintln(os.Stderr, "gen-icon:", err)
os.Exit(1)
}
fmt.Println("OK ->", path)
}