Publicado el 15 Jul

Git

Git Changelog – Powershell

Por Damian Rodriguez, in Git

Con cada deploy de nuestros paquetes npm escribir en un changelog.md todos los features, hotfixes y enhancements puede traer un dolor de cabeza. Por tal motivo es conveniente automatizar tanto como se pueda cada uno de los pasos que llevan los deploys.

Para poder realizar esto necesitamos adaptarnos a ciertas convenciones a la hora de escribir los mensajes de nuestros commits.

Para el siguiente script utilizaremos la siguiente nomemclarura.


hotfix-{taskId}-{simple description} -> hotfixes
fb-{taskId}-{simple description} -> features

Podemos encontrar commits que no son hotfixes o features. Estos commits son validos, no nos preocuparemos por ellos. Nos enfocaremos en este ejemplo solamente en features y hotfixes.

Taggear nuestros projectos es otra importante tarea que necesitaremos realizar y mantener actualizada. Basados en nuestros tags podremos leer los commits en bloques.

Mantener un correcto versionado de un projecto con sus ramas y tags es critico a la hora de buscar commits, realizar y mantener el control de varios entornos al mismo tiempo.

Empezemos,

Crea un archivo llamado changelog.ps1 a nivel de root level.

Esta imagen tiene un atributo alt vacío; el nombre del archivo es image.png

Copia y pega el siguiente codigo ps1

 Set-Location (Split-Path $MyInvocation.MyCommand.Path)
 $branch = $args[0]
 $version = ($args[1]+"..")
 $path = $args[2]
 function WriteResult([string[]]$hotfixes, [string[]]$features, [string[]]$other)
 {
     $tab = "    "
   Add-Content change-log.md "# Hotfixes"
   foreach($c in $hotfixes){
     Add-Content change-log.md ($tab + "- " + $c)
   }
  
   Add-Content change-log.md "# Features"
   foreach($c in $features){
     Add-Content change-log.md ($tab + "- " + $c)
   }
  
   Add-Content change-log.md "# Other changes"
   foreach($c in $other){
     Add-Content change-log.md ($tab + "- " + $c)
   }
 }

 try{ 
     $hotfixes = @()
     $features = @()
     $other = @()

   $commits = (git checkout $branch | git log --boundary --pretty=oneline --pretty=format:%s $version)
    
   foreach($c in $commits){
     $splitArray = $c -Split "-" 
     if($splitArray[0].ToLower() -eq "hotfix"){
       $hotfixes += $splitArray -join "-"
     }elseif($splitArray[0].ToLower() -eq "fb"){
       $features += $splitArray -join "-"
     } else{
       $other += $splitArray -join "-"
     }
   }
  
   New-Item $path"change-log.md" -ItemType File -Force
   WriteResult $hotfixes $features $other
 }
 catch
 {
     Write-Error $_.Exception.ToString()
     Read-Host -Prompt "The above error occurred. Press Enter to exit"
 }

Agrega un nuevo script al package.json. Lo llamaremos gen-cl. Este script se ejecutará inmediatamente luego de nuestro build, ten en cuenta que debes indicar la version exacta de la version taggueada en los primeros pasos (ej v1.0.18)

Esta imagen tiene un atributo alt vacío; el nombre del archivo es image-1.png

Ahora, simplemente ejecuta el comando de build

npm run build-dev

Eso es todo, el archivo change-log.md se generará en tu carpeta root.

Esta imagen tiene un atributo alt vacío; el nombre del archivo es change-log.png

Gracias por pasarte por el foro! Espero que te sirva y te ahorres un poco de tiempo en tus deploys