@echo off setlocal enabledelayedexpansion :: Parametri: modulo, tipo di versione (DEV, TEST) set MODULE=%1 set VERSION_TYPE=%2 if "%MODULE%"=="" ( echo Errore: Specificare il modulo come primo parametro exit /b 1 ) if "%VERSION_TYPE%"=="" ( echo Errore: Specificare il tipo di versione (DEV, TEST) come secondo parametro exit /b 1 ) echo Generazione changelog per %MODULE% (%VERSION_TYPE%)... :: Determina il numero di versione if "%VERSION_TYPE%"=="TEST" ( :: Per TEST, usa la versione corrente for /f "tokens=*" %%v in ('git describe --abbrev=0 --tags') do set VERSION=%%v :: Rimuovi eventuali prefissi dal tag set VERSION=!VERSION:v=! set VERSION=!VERSION:%MODULE%-=! ) else if "%VERSION_TYPE%"=="DEV" ( :: Per DEV, calcola la prossima versione for /f "tokens=*" %%v in ('git describe --abbrev=0 --tags') do set LAST_TAG=%%v :: Estrai il numero di versione e incrementa la parte minore set LAST_VERSION=!LAST_TAG:v=! set LAST_VERSION=!LAST_VERSION:%MODULE%-=! for /f "tokens=1,2,3 delims=." %%a in ("!LAST_VERSION!") do ( set MAJOR=%%a set MINOR=%%b set PATCH=%%c set /a MINOR=!MINOR!+1 set VERSION=!MAJOR!.!MINOR!.0 ) ) else ( echo Errore: Tipo di versione non valido. Usare DEV o TEST. exit /b 1 ) echo Versione: %VERSION% :: Trova l'ultimo tag for /f "tokens=*" %%t in ('git describe --abbrev=0 --tags') do set LAST_TAG=%%t :: Crea un file temporaneo per il changelog set TEMP_CHANGELOG=%TEMP%\changelog_temp.md echo ## %VERSION% > %TEMP_CHANGELOG% :: Ottieni tutti i merge commit dall'ultimo tag git log %LAST_TAG%..HEAD --merges --pretty=format:"%%H" > %TEMP%\merge_commits.txt :: Per ogni merge commit, estrai il branch di origine e i commit messages for /f "tokens=*" %%c in (%TEMP%\merge_commits.txt) do ( :: Ottieni il nome del branch di origine for /f "tokens=*" %%b in ('git log -1 --pretty=format:"%%s" %%c ^| findstr /r "Merge branch"') do ( set MERGE_MSG=%%b set BRANCH_NAME=!MERGE_MSG:Merge branch '=! set BRANCH_NAME=!BRANCH_NAME:'=! set BRANCH_NAME=!BRANCH_NAME: into =! :: Rimuovi il prefisso feature/ se presente set CLEAN_BRANCH=!BRANCH_NAME:feature/=! :: Ottieni i commit messages di questo branch set COMMIT_MSGS= for /f "tokens=*" %%m in ('git log %%c^~ --pretty=format:"%%s" --no-merges ^| findstr /v "Merge"') do ( if "!COMMIT_MSGS!"=="" ( set COMMIT_MSGS=%%m ) else ( set COMMIT_MSGS=!COMMIT_MSGS!, %%m ) ) :: Aggiungi al changelog echo - !CLEAN_BRANCH!: !COMMIT_MSGS! >> %TEMP_CHANGELOG% ) ) :: Aggiorna il README.md set README_PATH=..\README.md set TEMP_README=%TEMP%\readme_temp.md if "%VERSION_TYPE%"=="TEST" ( :: Per TEST, sostituisci la sezione "Next Release" con la nuova versione type %README_PATH% | findstr /v /c:"## Next Release" > %TEMP_README% type %TEMP_CHANGELOG% >> %TEMP_README% ) else ( :: Per DEV, aggiungi sotto "Next Release" findstr /v /c:"## Next Release" %README_PATH% > %TEMP_README% echo ## Next Release > %TEMP%\next_release.md type %TEMP%\next_release.md %TEMP_CHANGELOG% >> %TEMP_README% ) :: Sostituisci il README originale copy /y %TEMP_README% %README_PATH% > nul echo Changelog generato con successo per la versione %VERSION% echo Aggiornato %README_PATH% :: Pulizia file temporanei del %TEMP_CHANGELOG% 2>nul del %TEMP%\merge_commits.txt 2>nul del %TEMP_README% 2>nul del %TEMP%\next_release.md 2>nul endlocal