capa do artigo

Automatizando lançamentos com GitHub Actions: Integração do Semantic Release e geração de Changelog

CI 31 de Dez de 2024

Neste artigo, veremos como configurar o GitHub Actions para gerar o arquivo CHANGELOG usando o semantic-release.

Mas o que é o arquivo CHANGELOG?

Um changelog é um arquivo que lista, em ordem cronológica, todas as alterações realizadas em um projeto, geralmente seguindo a numeração das versões. Esse recurso é valioso porque fornece um resumo claro do que foi modificado em cada versão, ajudando tanto desenvolvedores quanto clientes a acompanharem as melhorias, correções de bugs e novas funcionalidades. A seguir, apresentamos um exemplo de como um changelog pode ser organizado:

exemplo de changelog

Informações essenciais

Antes de iniciarmos a configuração, é importante termos a consiência que as mensagens do commit são importantes para entendermos o que foi aplicado. Na imagem acima vemos que as mensagens não estão lá aquelas coisas e fica difícil entender o que foi feito. Uma dica é: ao ler a mensagem de um commit, ela precisa dar sequência à frase:

Se eu aplicar este commit ele vai ...

Por exemplo, a mensagem de commit “adicionar suporte para dark/light mode”. Agora, se lermos “Se eu aplicar este commit, ele vai adicionar suporte para dark/light mode”, confirmamos que a mensagem está boa, pois faz sentido dentro dessa estrutura de frase.

Embora façamos a configuração pela pipeline, caso queira fazer isso rapidamente, o seguinte comando irá ajudar:

git log --pretty="- %s" > CHANGELOG.md

Esse comando do GIT faz com que os commit sejam mostrados de uma forma mais organizada. Em seguida, adicionamos para o arquivo CHANGELOG.md

O que é o semantic-release?

Em rápidas palavras, semantic-release é uma ferramenta que automatiza o gerenciamento de versões e a geração de changelogs se baseando nas mensagens de commit. Ela usa as convenções de mensagens de commit, como o Conventional Commits, para definir o tipo de versão (major, minor ou patch) a ser incrementada e gerar automaticamente o changelog.

Como configurar a sua Github Actions?

Vá em seu perfil, na opção Settings > Developer Settings. Em Personal access tokens e crie um token do tipo Tokens (classic).

As permissões que iremos precisar estão selecionadas na imagem abaixo:

OBS: Caso tenha alguma permissão desnecessária, fique a vontade para me informar.

Após criado o token, deixe-o salvo e vá para o projeto que deseja configurar o Github Actions, em Settings:

Agora vá em Secrets and variables > Actions e adicione uma nova secret com o nome de GH_TOKEN e o valor dessa secret será o token que criamos anteriormente.

Agora crie a sua Action baseado no seu projeto e adicione o seguinte trecho:

name: pipeline
on:
  push:
    branches:
      - main
jobs:
  main:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          persist-credentials: false
      # --- Adcionar trecho ----    
      - name: Semantic Release
        uses: cycjimmy/semantic-release-action@v4
        env:
          GH_TOKEN: ${{ secrets.GH_TOKEN }}
      # --- Adcionar trecho ----    

e na raiz do seu projeto adicione o arquivo .releaserc com o seguinte conteúdo:

{
    "branches": [
        "main"
    ],
    "plugins": [
        "@semantic-release/commit-analyzer",
        "@semantic-release/release-notes-generator",
        [
            "@semantic-release/changelog",
            {
                "changelogFile": "CHANGELOG.md"
            }
        ],
        [
            "@semantic-release/git",
            {
                "assets": [
                    "CHANGELOG.md"
                ]
            }
        ],
        "@semantic-release/github"
    ]
}

Esse arquivo será o responsável por gerar o CHANGELOG diretamente no projeto. Após rodar a primeira vez, puxe as alterações e vá na raiz do seu projeto e você verá que o arquivo CHANGELOG.md foi criado com os commits que existe no projeto. Vale ressaltar que, todo commit deve seguir a estrutura definida pelo conventional commits para que haja o gatilho de gerar uma nova versão.

Referências

Gerenciar ambientes para implantação - GitHub Docs
Você pode criar ambientes e proteger esses ambientes com regras de proteção de implantação. Um trabalho que faz referência a um ambiente deve seguir quaisquer regras de proteção para o ambiente antes de executar ou acessar os segredos do ambiente.
Conventional Commits
A specification for adding human and machine readable meaning to commit messages

Marcadores