pdca0-dev-hub/releaser/create-release-readme-changes.bat

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