From 5f05ba0fb8c72e5a587ede734b5aea908b9efdfc Mon Sep 17 00:00:00 2001 From: Domi31tls Date: Thu, 2 Jul 2026 11:02:57 +0200 Subject: [PATCH] =?UTF-8?q?feat(build):=20version=20release=20r=C3=A9solue?= =?UTF-8?q?=20au=20build=20avec=20repli=20dev=20(P1-7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Crée gui_v6/version.py (DEFAULT_VERSION + resolve_version()) qui tente d'importer gui_v6._build_version (généré au build Windows, non commité). Câble gui_v6.__version__ sur resolve_version(). Ajoute gui_v6/_build_version.py au .gitignore et aux hiddenimports du spec PyInstaller. 4 tests TDD. Co-Authored-By: Claude Fable 5 --- .gitignore | 4 ++++ anonymisation_gui_v6_onefile.spec | 2 ++ gui_v6/__init__.py | 4 +++- gui_v6/version.py | 18 +++++++++++++++ tests/unit/test_gui_v6_version.py | 37 +++++++++++++++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 gui_v6/version.py create mode 100644 tests/unit/test_gui_v6_version.py diff --git a/.gitignore b/.gitignore index d54b421..07d311d 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,10 @@ models/ # build_info.py : régénéré automatiquement par scripts/rebuild_anon.ps1 # avec date/commit/branch. Ne pas versionner. build_info.py + +# gui_v6/_build_version.py : généré au build Windows par build_windows_oneclick.ps1 +# (contient BUILD_VERSION = "2026.MM.JJ.HHMM"). Ne pas commiter. +gui_v6/_build_version.py *.mp3 *.wav *.mp4 diff --git a/anonymisation_gui_v6_onefile.spec b/anonymisation_gui_v6_onefile.spec index 894a64d..5b93036 100644 --- a/anonymisation_gui_v6_onefile.spec +++ b/anonymisation_gui_v6_onefile.spec @@ -78,6 +78,8 @@ hiddenimports = [ "gui_v6.machine_id", "gui_v6.engine_bridge", "gui_v6.config_state", + "gui_v6.version", + "gui_v6._build_version", "gui_v6.processing_runner", "gui_v6.tabs", "gui_v6.tabs.tab_about", diff --git a/gui_v6/__init__.py b/gui_v6/__init__.py index b1af0c2..641686c 100644 --- a/gui_v6/__init__.py +++ b/gui_v6/__init__.py @@ -8,4 +8,6 @@ Lot G1 (socle) : thème, client/stockage licence, shell minimal, onglet À propo __all__ = ["__version__"] -__version__ = "6.0.0-g1" +from gui_v6.version import resolve_version + +__version__ = resolve_version() diff --git a/gui_v6/version.py b/gui_v6/version.py new file mode 100644 index 0000000..6821c35 --- /dev/null +++ b/gui_v6/version.py @@ -0,0 +1,18 @@ +"""Résolution de la version affichée/télémesurée de la GUI V6 (P1-7, Plan 3). + +Au build Windows, scripts/build_windows_oneclick.ps1 génère gui_v6/_build_version.py +contenant BUILD_VERSION = "2026.MM.JJ.HHMM" (même valeur que l'AppVersion de +l'installeur et que build_info.BUILD_VERSION). Ce fichier n'est PAS commité +(.gitignore). En dev, repli sur DEFAULT_VERSION. +""" + +DEFAULT_VERSION = "6.0.0-dev" + + +def resolve_version(default: str = DEFAULT_VERSION) -> str: + try: + from gui_v6._build_version import BUILD_VERSION + except Exception: + return default + version = str(BUILD_VERSION).strip() + return version if version else default diff --git a/tests/unit/test_gui_v6_version.py b/tests/unit/test_gui_v6_version.py new file mode 100644 index 0000000..579aa0f --- /dev/null +++ b/tests/unit/test_gui_v6_version.py @@ -0,0 +1,37 @@ +"""Tests de la résolution de version GUI V6 (P1-7, Plan 3). + +La version release (schéma 2026.MM.JJ.HHMM) est générée au build Windows dans +gui_v6/_build_version.py (non commité). En dev, repli sur la version par défaut. +""" +import sys +import types + +import pytest + +from gui_v6.version import DEFAULT_VERSION, resolve_version + + +def test_resolve_version_sans_module_build_retourne_defaut(monkeypatch): + monkeypatch.setitem(sys.modules, "gui_v6._build_version", None) + # sys.modules[name] = None => ImportError au `from ... import` + assert resolve_version() == DEFAULT_VERSION + + +def test_resolve_version_avec_module_build_retourne_version_injectee(monkeypatch): + fake = types.ModuleType("gui_v6._build_version") + fake.BUILD_VERSION = "2026.07.02.1130" + monkeypatch.setitem(sys.modules, "gui_v6._build_version", fake) + assert resolve_version() == "2026.07.02.1130" + + +def test_resolve_version_build_version_vide_retourne_defaut(monkeypatch): + fake = types.ModuleType("gui_v6._build_version") + fake.BUILD_VERSION = "" + monkeypatch.setitem(sys.modules, "gui_v6._build_version", fake) + assert resolve_version() == DEFAULT_VERSION + + +def test_dunder_version_est_cable_sur_resolve_version(): + import gui_v6 + # En dev (pas de _build_version généré), __version__ == défaut. + assert gui_v6.__version__ == DEFAULT_VERSION