From 6586b89b8f8b21ee7a1ace3396dcfe865970d2db Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Wed, 15 Apr 2026 18:40:58 +0200 Subject: [PATCH] feat(gui): afficher version + build date + commit dans titre et status bar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Demande utilisateur : pouvoir identifier la build au premier coup d'oeil sans confondre ancien/nouveau exe lors des tests. Implémentation : - build_info.py (gitignored, fallback "dev" pour mode développement) régénéré automatiquement par scripts/rebuild_anon.ps1 avec : BUILD_DATE = "2026-04-15 18:15" BUILD_COMMIT = "234137e" BUILD_BRANCH = "main" - Pseudonymisation_Gui_V5.py : fonction _version_long() qui construit "v5.4 · 2026-04-15 18:15 · #234137e" depuis build_info (avec fallback silencieux si module absent en dev). Affichée dans : - Titre fenêtre : "Pseudonymisation de vos documents — v5.4 · ..." - Status bar en bas à droite - anonymisation_onefile.spec : build_info.py ajouté aux datas bundlées. - scripts/rebuild_anon.ps1 : STEP 4a génère build_info.py avant le PyInstaller avec git rev-parse short + branch + date courante. - .gitignore : build_info.py exclu (volatile, regénéré). En mode dev (pas frozen) : affichage "v5.4" seul (fallback). En mode frozen : affichage complet avec date/commit. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 4 ++++ Pseudonymisation_Gui_V5.py | 24 ++++++++++++++++++++++-- anonymisation_onefile.spec | 2 +- scripts/rebuild_anon.ps1 | 14 ++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index bd18cc4..afa741c 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,10 @@ models/ # Exception : assets embarqués dans l'exe (splash, icônes…) doivent être versionnés !assets/** !assets + +# build_info.py : régénéré automatiquement par scripts/rebuild_anon.ps1 +# avec date/commit/branch. Ne pas versionner. +build_info.py *.mp3 *.wav *.mp4 diff --git a/Pseudonymisation_Gui_V5.py b/Pseudonymisation_Gui_V5.py index 5d74675..a2be728 100644 --- a/Pseudonymisation_Gui_V5.py +++ b/Pseudonymisation_Gui_V5.py @@ -89,6 +89,24 @@ except ImportError: APP_TITLE = "Pseudonymisation de vos documents" APP_VERSION = "v5.4" +# Métadonnées de build — chargées depuis build_info.py (régénéré par rebuild_anon.ps1) +try: + from build_info import BUILD_DATE, BUILD_COMMIT, BUILD_BRANCH +except Exception: + BUILD_DATE = "dev" + BUILD_COMMIT = "dev" + BUILD_BRANCH = "dev" + + +def _version_long() -> str: + """Version étendue : v5.4 · 2026-04-15 18:15 · 234137e""" + parts = [APP_VERSION] + if BUILD_DATE != "dev": + parts.append(BUILD_DATE) + if BUILD_COMMIT != "dev": + parts.append(f"#{BUILD_COMMIT}") + return " · ".join(parts) + def _app_dir() -> Path: """Répertoire racine de l'application (compatible PyInstaller/Nuitka).""" if getattr(sys, 'frozen', False): @@ -283,7 +301,9 @@ class ToolTip: class App: def __init__(self, root: tk.Tk): self.root = root - self.root.title(APP_TITLE) + # Titre avec version longue pour identifier la build au premier coup d'œil + # (évite les confusions entre exe ancien/nouveau lors des tests). + self.root.title(f"{APP_TITLE} — {_version_long()}") self.root.geometry("780x820") self.root.minsize(600, 650) @@ -726,7 +746,7 @@ class App: ).pack(side=tk.LEFT) tk.Label( - status_bar, text=APP_VERSION, font=self._f_small, + status_bar, text=_version_long(), font=self._f_small, bg=CLR_BG, fg=CLR_TEXT_SECONDARY, anchor="e", ).pack(side=tk.RIGHT) diff --git a/anonymisation_onefile.spec b/anonymisation_onefile.spec index 34ebf2a..a8ba508 100644 --- a/anonymisation_onefile.spec +++ b/anonymisation_onefile.spec @@ -25,7 +25,7 @@ for data_file in [ datas.append((src, 'data')) for pyfile in ['anonymizer_core_refactored_onnx.py', 'eds_pseudo_manager.py', 'gliner_manager.py', 'camembert_ner_manager.py', - 'Pseudonymisation_Gui_V5.py']: + 'Pseudonymisation_Gui_V5.py', 'build_info.py']: datas.append((os.path.join(app_dir, pyfile), '.')) a = Analysis( diff --git a/scripts/rebuild_anon.ps1 b/scripts/rebuild_anon.ps1 index 2cf4339..1a2fca0 100644 --- a/scripts/rebuild_anon.ps1 +++ b/scripts/rebuild_anon.ps1 @@ -50,6 +50,20 @@ Write-Host " Venv détecté : $venvPython" Write-Host "=== STEP 4 : Régénérer finess_numbers.txt (entjur fix) ===" & $venvPython "$project\scripts\build_finess_gazetteers.py" 2>&1 | Out-Host +Write-Host "=== STEP 4a : Générer build_info.py (identifiant de build) ===" +$commit = (git rev-parse --short HEAD 2>&1).Trim() +$branch = (git rev-parse --abbrev-ref HEAD 2>&1).Trim() +$buildDate = Get-Date -Format "yyyy-MM-dd HH:mm" +$buildInfo = @" +"""Métadonnées de build - GENERE AUTOMATIQUEMENT par rebuild_anon.ps1. +Ne PAS editer a la main - ecrase a chaque rebuild.""" +BUILD_DATE = "$buildDate" +BUILD_COMMIT = "$commit" +BUILD_BRANCH = "$branch" +"@ +$buildInfo | Set-Content "$project\build_info.py" -Encoding UTF8 +Write-Host " build_info.py: $buildDate / $commit / $branch" + Write-Host "=== STEP 4bis : Désactiver scan Defender sur dist/ (évite locks PyInstaller) ===" try { Add-MpPreference -ExclusionPath "$project\dist" -ErrorAction SilentlyContinue