feat(build): version release résolue au build avec repli dev (P1-7)
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 <noreply@anthropic.com>
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -49,6 +49,10 @@ models/
|
|||||||
# build_info.py : régénéré automatiquement par scripts/rebuild_anon.ps1
|
# build_info.py : régénéré automatiquement par scripts/rebuild_anon.ps1
|
||||||
# avec date/commit/branch. Ne pas versionner.
|
# avec date/commit/branch. Ne pas versionner.
|
||||||
build_info.py
|
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
|
*.mp3
|
||||||
*.wav
|
*.wav
|
||||||
*.mp4
|
*.mp4
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ hiddenimports = [
|
|||||||
"gui_v6.machine_id",
|
"gui_v6.machine_id",
|
||||||
"gui_v6.engine_bridge",
|
"gui_v6.engine_bridge",
|
||||||
"gui_v6.config_state",
|
"gui_v6.config_state",
|
||||||
|
"gui_v6.version",
|
||||||
|
"gui_v6._build_version",
|
||||||
"gui_v6.processing_runner",
|
"gui_v6.processing_runner",
|
||||||
"gui_v6.tabs",
|
"gui_v6.tabs",
|
||||||
"gui_v6.tabs.tab_about",
|
"gui_v6.tabs.tab_about",
|
||||||
|
|||||||
@@ -8,4 +8,6 @@ Lot G1 (socle) : thème, client/stockage licence, shell minimal, onglet À propo
|
|||||||
|
|
||||||
__all__ = ["__version__"]
|
__all__ = ["__version__"]
|
||||||
|
|
||||||
__version__ = "6.0.0-g1"
|
from gui_v6.version import resolve_version
|
||||||
|
|
||||||
|
__version__ = resolve_version()
|
||||||
|
|||||||
18
gui_v6/version.py
Normal file
18
gui_v6/version.py
Normal file
@@ -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
|
||||||
37
tests/unit/test_gui_v6_version.py
Normal file
37
tests/unit/test_gui_v6_version.py
Normal file
@@ -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
|
||||||
Reference in New Issue
Block a user