build(windows): cible windows-release, pour ne plus enchaîner à la main

La production des artefacts Windows tenait en quatre gestes manuels — make
windows, make helper, ISCC, puis le renommage — dont seul le dernier laissait
une trace visible s'il était oublié. L'ordre y était contraint sans que rien
ne le dise : wgsecure.iss source dist\wgsecure.exe et dist\wgsecure-helper.exe
sous leurs noms bruts, si bien que renommer avant de compiler l'installeur
l'aurait fait échouer, ou lui aurait fait embarquer les binaires de la version
précédente.

La cible fixe cet ordre et ajoute la vérification qui manquait : la version
vit dans ce fichier et dans wgsecure.iss, sans rien pour les synchroniser.
Bumper l'un sans l'autre produisait un installeur au mauvais numéro, que
publish ne retrouvait pas. Le contrôle est un prérequis et non une étape de
la recette : placé dans celle-ci, il n'aurait averti qu'après plusieurs
minutes de PyInstaller d'un défaut connu dès la première seconde.

La sortie d'Inno Setup part dans un journal recraché en cas d'échec
seulement : l'afficher noyait le résultat sous les avertissements wow64 de
Wine, la jeter aurait rendu toute panne muette.

Outillage uniquement : aucun changement de comportement de l'application,
donc pas d'incrément de version.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-07 22:47:00 +02:00
co-authored by Claude Opus 5
parent a056ad260a
commit a989f50151
+44 -1
View File
@@ -26,7 +26,7 @@ PI_OPTS := \
--hidden-import cryptography.hazmat.primitives.asymmetric.x25519 \
--collect-submodules PyQt6
.PHONY: all linux windows helper installer-deps release publish version changelog install install-gnome uninstall-gnome run run-admin icon reset-password setup-sudoers check-privileges clean clean-all help venv
.PHONY: all linux windows helper windows-release check-windows-release installer-deps release publish version changelog install install-gnome uninstall-gnome run run-admin icon reset-password setup-sudoers check-privileges clean clean-all help venv
# ── Cible par défaut ────────────────────────────────────────────────────────
all: linux
@@ -187,6 +187,48 @@ release: linux
@mv $(DIST)/$(APP) $(DIST)/$(APP)-$(VERSION)-linux-x86_64
@echo " 📦 Release → $(DIST)/$(APP)-$(VERSION)-linux-x86_64"
# ── Chaîne Windows complète ───────────────────────────────────────────────────
# Compile l'exe, le service, construit l'installeur, puis renomme le tout avec
# la version — dans cet ordre : wgsecure.iss source `dist\wgsecure.exe` et
# `dist\wgsecure-helper.exe` sous leurs noms bruts, renommer avant de compiler
# l'installeur le ferait échouer (ou, pire, embarquer les binaires de la
# version précédente).
#
# La version vit à deux endroits — ce fichier et wgsecure.iss — et rien ne les
# synchronise : la garde ci-dessous refuse de produire un installeur dont le
# numéro contredirait celui de la release.
# Sortie d'ISCC journalisée plutôt qu'affichée : Wine y mêle ses propres
# avertissements (wow64), sans intérêt quand tout se passe bien. En cas
# d'échec le journal est recraché, sinon la raison serait perdue.
ISCC_LOG := /tmp/wgsecure-iscc.log
ISCC := $(HOME)/.wine/drive_c/Program Files (x86)/Inno Setup 6/ISCC.exe
ISS_VERSION = $(shell sed -n 's/^#define MyAppVersion "\(.*\)"/\1/p' wgsecure.iss)
# Vérifications d'abord, compilations ensuite : placées dans la recette de
# windows-release, elles n'auraient averti qu'après plusieurs minutes de
# PyInstaller, pour un défaut connu dès la première seconde.
check-windows-release:
@test "$(ISS_VERSION)" = "$(VERSION)" \
|| (echo " ❌ Version incohérente : Makefile $(VERSION), wgsecure.iss $(ISS_VERSION)"; \
echo " → Alignez #define MyAppVersion dans wgsecure.iss"; exit 1)
@test -f "$(ISCC)" \
|| (echo " ❌ Inno Setup introuvable ($(ISCC))"; \
echo " → Installez Inno Setup 6 dans Wine."; exit 1)
windows-release: check-windows-release installer-deps windows helper
@echo ""
@echo " 📦 Construction de l'installeur Windows…"
@wine "$(ISCC)" wgsecure.iss > $(ISCC_LOG) 2>&1 \
|| (echo " ❌ Échec de la compilation Inno Setup :"; \
tail -20 $(ISCC_LOG); exit 1)
@mv $(DIST)/$(APP).exe $(DIST)/$(APP)-$(VERSION)-windows-x86_64.exe
@mv $(DIST)/$(APP)-helper.exe $(DIST)/$(APP)-helper-$(VERSION).exe
@echo ""
@echo " ✅ Windows → $(DIST)/$(APP)-$(VERSION)-windows-x86_64.exe"
@echo " ✅ Service → $(DIST)/$(APP)-helper-$(VERSION).exe"
@echo " ✅ Setup → $(DIST)/$(APP)-$(VERSION)-setup.exe"
@echo ""
# ── Publication de la release sur Gitea ───────────────────────────────────────
# Rebuild l'artefact Linux (fraîcheur garantie avec VERSION), joint aussi les
# artefacts Windows présents dans dist/ s'ils ont déjà été produits pour cette
@@ -351,6 +393,7 @@ help:
@echo " make helper Service Windows (Wine) "
@echo " make installer-deps Prérequis wgsecure.iss "
@echo " make release Linux + nommage release "
@echo " make windows-release Windows + exe + setup "
@echo " make publish Tague + publie sur Gitea "
@echo " make version Affiche la version "
@echo " make changelog Dernière entrée changelog"