Modification du versionnage auto

This commit is contained in:
2026-05-10 16:12:23 +02:00
parent 703d2ecda3
commit c2b75076d0
57 changed files with 827 additions and 313 deletions

View File

@@ -1,36 +1,25 @@
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM --- Se place dans le dossier du .bat ---
cd /d "%~dp0"
REM Chemin du fichier de version pour la CUISINE
set "VERSION_FILE=..\Excel\prod\Ratio_Cuisine_VERSION.txt"
REM === PARAMETRES CUISINE ===
set "ROOT=%~dp0.."
REM On lit l'ANCIENNE version avant de la mettre à jour (pour nommer la sauvegarde)
set "VERSION_FILE=%ROOT%\Excel\dev\Ratio_Cuisine_VERSION.txt"
set "SRC=%ROOT%\Excel\dev\Ratio_Cuisine_dev.xlsm"
set "DST_DIR=%ROOT%\Excel\prod"
set "DST=%DST_DIR%\Ratio_Cuisine.xlsm"
set "BACKUP_DIR=%ROOT%\Excel\backup"
set KEEP_BACKUPS=10
REM === Lire ancienne version pour nom sauvegarde ===
set "OLD_VERSION="
if exist "%VERSION_FILE%" (
set /p OLD_VERSION=<"%VERSION_FILE%"
)
REM Nombre de sauvegardes Cuisine à conserver
set KEEP_BACKUPS=10
echo Mise à jour de version...
python "maj_version.py" "%VERSION_FILE%"
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
pause
exit /b 1
)
REM === 2) CHEMINS DES FICHIERS EXCEL ===
set SRC=..\Excel\dev\Ratio_Cuisine_dev.xlsm
set DST_DIR=..\Excel\prod
REM Dossier commun de sauvegardes (Cuisine + Restauration)
set BACKUP_DIR=..\Excel\backup
REM Vérifications
REM === Vérifications ===
if not exist "%SRC%" (
echo ERREUR : fichier source introuvable :
echo %SRC%
@@ -45,33 +34,48 @@ if not exist "%DST_DIR%" (
exit /b 1
)
REM Création auto du dossier de sauvegarde s'il n'existe pas
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
)
REM === 3) NOM DU FICHIER DE SAUVEGARDE AVEC ANCIENNE VERSION ===
if "%OLD_VERSION%"=="" (
REM Sécurité : si on n'a pas réussi à lire la version, on met un nom générique
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_Vers%OLD_VERSION%.xlsm"
REM === Sauvegarde de l'ancienne prod avant remplacement ===
if exist "%DST%" (
if "%OLD_VERSION%"=="" (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_Vers%OLD_VERSION%.xlsm"
)
echo Sauvegarde de l'ancienne production...
copy /Y "%DST%" "%BACKUP%"
)
REM === 4) COPIE VERS PROD ===
REM === Copie DEV vers PROD ===
echo Copie vers la version de production...
copy /Y "%SRC%" "%DST_DIR%\Ratio_Cuisine.xlsm"
copy /Y "%SRC%" "%DST%"
REM === 5) SAUVEGARDE ===
echo Création de la sauvegarde datée...
copy /Y "%SRC%" "%BACKUP%"
if errorlevel 1 (
echo ERREUR lors de la copie vers production.
pause
exit /b 1
)
echo Terminé.
exit /b 0
REM === Mise à jour version TXT + cellule C1 du classeur PROD ===
echo Mise à jour de version...
python "%~dp0maj_version.py" "%VERSION_FILE%" "%DST%"
REM === 6) NETTOYAGE : on ne garde que les %KEEP_BACKUPS% dernières sauvegardes Cuisine ===
REM Tri par date décroissante (les plus récentes d'abord). On supprime au-delà de KEEP_BACKUPS.
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
pause
exit /b 1
)
REM === Nettoyage sauvegardes anciennes ===
echo Nettoyage des anciennes sauvegardes Cuisine...
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_Cuisine_Vers*.xlsm" 2^>nul') do (
echo Suppression ancienne sauvegarde : %%F
del /q "%BACKUP_DIR%\%%F"
)
)
echo Terminé.
exit /b 0

View File

@@ -1,80 +1,76 @@
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM --- Se place dans le dossier du .bat ---
cd /d "%~dp0"
echo --- Mise en prod Ratio_Restauration ---
REM Chemin du fichier de version pour la RESTAURATION
set "VERSION_FILE=..\Excel\prod\Ratio_Restauration_VERSION.txt"
set "ROOT=%~dp0.."
set "VERSION_FILE=%ROOT%\Excel\dev\Ratio_Restauration_VERSION.txt"
set "SRC=%ROOT%\Excel\dev\Ratio_Restauration_dev.xlsm"
set "DST_DIR=%ROOT%\Excel\prod"
set "DST=%DST_DIR%\Ratio_Restauration.xlsm"
set "BACKUP_DIR=%ROOT%\Excel\backup"
set KEEP_BACKUPS=10
REM On lit l'ANCIENNE version pour la sauvegarde
set "OLD_VERSION="
if exist "%VERSION_FILE%" (
set /p OLD_VERSION=<"%VERSION_FILE%"
)
REM Nombre de sauvegardes Cuisine à conserver
set KEEP_BACKUPS=10
echo Mise à jour de version...
python "maj_version.py" "%VERSION_FILE%"
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
pause
exit /b 1
)
REM === 2) CHEMINS DES FICHIERS EXCEL ===
set SRC=..\Excel\dev\Ratio_Restauration_dev.xlsm
set DST_DIR=..\Excel\prod
REM Dossier commun de sauvegardes (Cuisine + Restauration)
set BACKUP_DIR=..\Excel\backup
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
)
REM Vérifications
if not exist "%SRC%" (
echo ERREUR : fichier source introuvable :
echo %SRC%
endlocal
exit /b 1
)
if not exist "%DST_DIR%" (
echo ERREUR : dossier de destination introuvable :
echo %DST_DIR%
endlocal
exit /b 1
)
REM === NOM DU FICHIER DE SAUVEGARDE AVEC ANCIENNE VERSION ===
if "%OLD_VERSION%"=="" (
REM Sécurité si la lecture a échoué
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_Vers%OLD_VERSION%.xlsm"
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
)
if exist "%DST%" (
if "%OLD_VERSION%"=="" (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_Vers%OLD_VERSION%.xlsm"
)
echo Sauvegarde de l'ancienne production...
if exist "%DST_DIR%\~$Ratio_Restauration.xlsm" (
echo ERREUR : Ratio_Restauration.xlsm est ouvert dans Excel.
exit /b 1
)
copy /Y "%DST%" "%BACKUP%"
)
REM === 4) COPIE VERS PROD ===
echo Copie vers la version de production...
copy /Y "%SRC%" "%DST_DIR%\Ratio_Restauration.xlsm"
copy /Y "%SRC%" "%DST%"
REM === 5) SAUVEGARDE DATÉE ===
echo Création de la sauvegarde datée...
copy /Y "%SRC%" "%BACKUP%"
if errorlevel 1 (
echo ERREUR lors de la copie vers production.
exit /b 1
)
echo --- Mise en prod terminee ---
endlocal
exit /b 0
echo Mise à jour de version...
python "%~dp0maj_version.py" "%VERSION_FILE%" "%DST%"
REM === 6) NETTOYAGE : on ne garde que les %KEEP_BACKUPS% dernières sauvegardes Restauration ===
REM Tri par date décroissante (les plus récentes d'abord). On supprime au-delà de KEEP_BACKUPS.
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_restauration_Vers*.xlsm" 2^>nul') do (
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
exit /b 1
)
echo Nettoyage des anciennes sauvegardes Restauration...
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_Restauration_Vers*.xlsm" 2^>nul') do (
echo Suppression ancienne sauvegarde : %%F
del /q "%BACKUP_DIR%\%%F"
)
)
echo --- Mise en prod terminee ---
exit /b 0

View File

@@ -1,51 +1,135 @@
import sys
import subprocess
from pathlib import Path
from datetime import date
# =========================================================
# CONFIG
# =========================================================
VBS_SCRIPT = Path(__file__).parent / "set_cell_silent.vbs"
# =========================================================
# PREFIXE VERSION
# =========================================================
def detecter_major(path: Path) -> int:
nom = path.name.lower()
if "restauration" in nom:
return 2
return 1
# =========================================================
# LECTURE VERSION
# =========================================================
def lire_version(path: Path, major: int):
def lire_version(path: Path):
if not path.exists():
return [1, 0, 0]
return [major, 0, 0]
contenu = path.read_text(encoding="utf-8").strip().splitlines()
if not contenu:
return [1, 0, 0]
return [major, 0, 0]
version_str = contenu[0].strip()
try:
parts = [int(x) for x in version_str.split(".")]
while len(parts) < 3:
parts.append(0)
return parts[:3]
except ValueError:
return [1, 0, 0]
version = [int(x) for x in contenu[0].split(".")]
while len(version) < 3:
version.append(0)
version = version[:3]
# force le major correct
version[0] = major
return version
except Exception:
return [major, 0, 0]
def ecrire_version(path: Path, version):
version_str = ".".join(str(x) for x in version)
today = date.today().isoformat()
texte = f"{version_str}\n{today}\n"
path.write_text(texte, encoding="utf-8")
return version_str
# =========================================================
# INCREMENT
# =========================================================
def increment_patch(version):
version[2] += 1
return version
# =========================================================
# ECRITURE TXT
# =========================================================
def ecrire_version_txt(path: Path, version):
version_str = ".".join(str(x) for x in version)
contenu = f"{version_str}\n{date.today().isoformat()}\n"
path.write_text(contenu, encoding="utf-8")
return version_str
# =========================================================
# ECRITURE EXCEL
# =========================================================
def ecrire_version_excel(classeur: Path, version_str: str):
if not classeur.exists():
print(f"Classeur introuvable : {classeur}")
return
valeur = f"Version : {version_str}"
cmd = [
"cscript",
"//nologo",
str(VBS_SCRIPT),
str(classeur),
"Tableau de bord",
"C1",
valeur
]
subprocess.run(cmd, check=True)
# =========================================================
# MAIN
# =========================================================
def main():
if len(sys.argv) < 2:
print("Usage : python maj_version.py chemin_du_VERSION.txt")
if len(sys.argv) < 3:
print("Usage :")
print("python maj_version.py VERSION.txt classeur.xlsm")
sys.exit(1)
version_file = Path(sys.argv[1])
version = lire_version(version_file)
classeur = Path(sys.argv[2])
major = detecter_major(version_file)
version = lire_version(version_file, major)
version = increment_patch(version)
new_version_str = ecrire_version(version_file, version)
print(f"Nouvelle version : {new_version_str}")
version_str = ecrire_version_txt(version_file, version)
ecrire_version_excel(classeur, version_str)
print(f"Nouvelle version : {version_str}")
print(f"Classeur mis à jour : {classeur.name}")
if __name__ == "__main__":
main()
main()

View File

@@ -1,68 +1,71 @@
' set_cell_silent.vbs
' Usage: cscript //nologo set_cell_silent.vbs "C:\chemin\fichier.xlsm" "NomFeuille" "A1" "Valeur"
Option Explicit
Dim f, sheetName, addr, val
Dim xl, wb, ws
Dim xl, wb
Dim filePath, sheetName, cellAddress, cellValue
If WScript.Arguments.Count < 4 Then
WScript.Echo "[ERR] Args: set_cell_silent.vbs <fichier.xlsm> <feuille> <cellule> <valeur>"
WScript.Quit 1
WScript.Echo "[ERR] Usage : set_cell_silent.vbs fichier.xlsm feuille cellule valeur"
WScript.Quit 1
End If
f = WScript.Arguments(0)
filePath = WScript.Arguments(0)
sheetName = WScript.Arguments(1)
addr = WScript.Arguments(2)
val = WScript.Arguments(3)
cellAddress = WScript.Arguments(2)
cellValue = WScript.Arguments(3)
On Error Resume Next
Set xl = CreateObject("Excel.Application")
If Err.Number <> 0 Then
WScript.Echo "[ERR] Excel non disponible (" & Err.Description & ")"
WScript.Quit 1
WScript.Echo "[ERR] Creation Excel : " & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
xl.Visible = False
xl.DisplayAlerts = False
' Désactiver macros et événements AVANT douvrir
On Error Resume Next
xl.AutomationSecurity = 3 ' msoAutomationSecurityForceDisable
xl.EnableEvents = False
xl.ScreenUpdating = False
On Error GoTo 0
xl.AskToUpdateLinks = False
xl.AutomationSecurity = 3
Err.Clear
Set wb = xl.Workbooks.Open(filePath, 0, False)
On Error Resume Next
Set wb = xl.Workbooks.Open(f, False, False)
If Err.Number <> 0 Then
xl.Quit
WScript.Echo "[ERR] Ouverture classeur: " & Err.Description
WScript.Quit 1
WScript.Echo "[ERR] Ouverture classeur: " & Err.Description
xl.Quit
Set xl = Nothing
WScript.Quit 1
End If
On Error GoTo 0
On Error Resume Next
Set ws = wb.Worksheets.Item(sheetName)
Err.Clear
wb.Worksheets(sheetName).Range(cellAddress).Value = cellValue
If Err.Number <> 0 Then
wb.Close False
xl.Quit
WScript.Echo "[ERR] Feuille introuvable: " & sheetName
WScript.Quit 1
WScript.Echo "[ERR] Ecriture cellule: " & Err.Description
wb.Close False
xl.Quit
Set wb = Nothing
Set xl = Nothing
WScript.Quit 1
End If
On Error GoTo 0
On Error Resume Next
ws.Range(addr).Value2 = val
If Err.Number <> 0 Then
wb.Close False
xl.Quit
WScript.Echo "[ERR] Ecriture cellule " & addr & " : " & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
Err.Clear
wb.Save
If Err.Number <> 0 Then
WScript.Echo "[ERR] Sauvegarde: " & Err.Description
wb.Close False
xl.Quit
Set wb = Nothing
Set xl = Nothing
WScript.Quit 1
End If
Err.Clear
wb.Close False
Set wb = Nothing
xl.Quit
WScript.Quit 0
Set xl = Nothing
WScript.Quit 0