112 lines
3.6 KiB
Batchfile
112 lines
3.6 KiB
Batchfile
@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 |