Saltar a contenido

Semantic Release

Overview

El objetivo principal de este apartado es enseñar cómo usar correctamente semantic-release.

¿Qué es Semantic-Release?

Semantic-Release es una herramienta de gestión de versiones y lanzamientos automatizados que sigue los principios de Semantic Versioning (SemVer). Su objetivo es simplificar el proceso de lanzamiento de software al automatizar el incremento de números de versión y la generación de notas de lanzamiento basadas en los commits realizados en un repositorio.

Principios de Semantic Versioning (SemVer)

Semantic Versioning es un sistema para asignar números de versión a software que sigue una estructura específica:

MAJOR.MINOR.PATCH: La versión se compone de tres partes principales.

MAJOR: Incrementar el número mayor indica cambios incompatibles con la librería o proyecto.

MINOR: Incrementar el número menor indica la adición de funcionalidad compatible con versiones anteriores.

PATCH: Incrementar el número de parche indica correcciones de errores compatibles con versiones anteriores.

Conventional Commits

Para el uso correcto de los Conventional Commits y ejemplos de los mismos, así como su estructura, pueden dirigirse a Conventional Commits que se encuentra en la sección GitOps de la documentación.

Como implementar semantic-release en net 6

Para implementar semantic-release en nuestro proyecto debemos crear el archivo release.yml dentro de la ruta /.github/workflows y agregar el siguiente código:

    name: Build
    on:
      push:
        branches:
          - main 
          - beta
    jobs:
      release:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
          with:
            # to allow bypass branch restrictions
            token: ${{ secrets.ARQUITECTURA_DEPLOY }}
        - uses: architecture-it/actions@release-dotnet
        with:
          github_username: ${{ secrets.ARQUITECTURA_USER }}
          github_token: ${{ secrets.ARQUITECTURA_DEPLOY }}
          branches: '["main", { name: "beta", prerelease: "beta" }]'
Y además agregar las siguientes propiedades en nuestro .csproj:

<PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PackageId>ProjectName</PackageId>
    <Version>1.0.0</Version>
    <IsPackable>true</IsPackable>
    <PackageProjectUrl>UrlRepo</PackageProjectUrl>
    <RepositoryUrl>UrlRepo</RepositoryUrl>
<PropertyGroup>

Esta acción se dispara cuando se realiza un push a la rama main o beta (nuestra rama de prerelease) y a su vez llama a una acción que tenemos publicada en el repositorio architecture-it/actions. Esta acción primero verifica si tenemos o no Conventional Commits y determina el tipo de cambio que se debe realizar en la versión, en base a los commits. En caso afirmativo, crea un release de nuestro proyecto y luego crea y publica el NuGet con la misma versión del release.

Warning

Con semantic-release no es necesario tocar la versión del proyecto manualmente, ya que se encarga del manejo correcto de versiones en base a nuestros commits

Como crear un prerelease

Para crear un prerelease debemos crear un pull request de la rama que contenga los cambios a nuestra rama beta utilizando Conventional Commits. En base a esto, se creará y publicará una versión x.x.x-beta.1 de nuestro proyecto.

Warning

Una vez que trabajamos con un prerelease, no importa el tipo de Conventional Commit que se realice, solo se incrementará el número detrás de beta (1.0.0-beta.x). Por ejemplo, si estamos en la versión 1.0.0-beta.1, entonces pasará a ser 1.0.0-beta.2.

Warning

Siempre debemos trabajar creando nuevas ramas a partir de beta, Sin embargo, cuando queremos crear un nuevo prerelease, debemos merguear la ultima versión de main en la rama que estemos trabajando antes de crear un pull request hacia beta, de lo contrario se generan problemas de versiones.

Como crear un release

Para crear un release basta con utilizar los conventionals commits y crear un pull request hacia main desde la rama que contiene los nuevos cambios.

Crear un release a partir de un prerelease

Para pasar de una versión beta a una estable, solo debemos hacer un pull request desde la rama beta hacia main y semantic-release se encargará del resto.

Para obtener más información sobre semantic-release, puedes dirigirte a Semantic-Release.