Modification du versionnage auto
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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()
|
||||
@@ -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 d’ouvrir
|
||||
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
|
||||
Reference in New Issue
Block a user