Liberação
Cada módulo é lançado e versionado de forma independente. O processo de lançamento é automatizado e acionado por uma ação GitHub que é acionada quando um PR é mesclado no branch main
. Esta ação usa a ferramenta Release Please desenvolvida pelo Google para criar automaticamente um novo PR de lançamento que atualiza o arquivo CHANGELOG.md
e elimina o version nos arquivos version.txt
e variables.tf
. Para que um lançamento seja concluído, o PR do lançamento precisa ser aprovado manualmente e então mesclado no branch principal
.
Nas subseções abaixo, passaremos pelo processo de lançamento com mais detalhes e, em seguida, explicaremos algumas etapas ao definir manualmente uma versão.
Liberar Por favor configuração
A ferramenta Release Please pode ser encontrada https://github.com/googleapis/release-please [neste repositório] e o GitHub Action que usamos está disponível em outro repositório. Ambos são mantidos pelo Google.
Cada módulo Modern Gitops Stack contém um fluxo de trabalho GitHub que simplesmente chama um fluxo de trabalho centralizado.
Fluxo de trabalho centralizado
A definição de fluxo de trabalho disponível em repositório principal.
incluem::exemplos$github_workflows/modules-release-please.yaml[]
Observe as seguintes linhas:
-
A configuração
workflow_call
significa que o fluxo de trabalho só é acionado por uma chamada externa (ou seja, quando um módulo o chama). -
A configuração
release-type
está definida comosimple
, o que significa que apenas atualiza o arquivoCHANGELOG.md
e altera a versão no arquivoversion.txt
. -
A configuração
extra-files
é usada para especificar arquivos adicionais que precisam ser atualizados ao alterar a versão. No nosso caso, também precisamos atualizar o arquivovariables.tf
. Isso ocorre porque precisamos definir estaticamente a variáveltarget_revision
, que é usada para fixar a versão do módulo nos recursosargocd_application
.
Fluxo de trabalho do chamador
O fluxo de trabalho do chamador em cada módulo simplesmente aponta para este fluxo de trabalho e é configurado para ser executado em cada push para o branch main
. Esta é a definição do fluxo de trabalho:
---
name: "release-please"
on:
push:
branches:
- "main"
jobs:
release:
uses: GersonRS/modern-gitops-stack/.github/workflows/modules-release-please.yaml@main
Nosso module template já contém esta definição de fluxo de trabalho, mas com uma ressalva. Para evitar a criação de releases no próprio template, ele foi desativado e é necessário reativá-lo ao criar um novo módulo. Os comentários no arquivo são autoexplicativos. |
Versionamento automático
As mensagens de commit são usadas para determinar o tipo de release que precisa ser criado.
Somente os tipos de commit feat
e fix
acionarão o IC de lançamento. O tipo de commit feat
irá desencadear um aumento de versão secundária, enquanto o tipo de commit fix
irá desencadear um aumento de versão de patch. Se você adicionar um !
após o tipo de commit, o lançamento será um aumento na versão principal. Por exemplo, feat!: this is a break change
irá desencadear um aumento na versão principal.
Qualquer outro tipo de commit não acionará um lançamento. Isso inclui chore
, docs
, style
, refactor
, perf
e test
. Se você ainda quiser forçar um lançamento, você pode adicionar um rodapé a qualquer mensagem de commit com o prefixo Release-As:
.
Versionamento durante a fase de pré-lançamento
Quando um módulo ainda está em fase de pré-lançamento, o versionamento é um pouco diferente. O versionamento é feito manualmente através do rodapé Release-As:
.
Propomos que enquanto o módulo estiver em fase de pré-lançamento, você deve apenas fazer um Squash and Merge
e adicionar o rodapé Release-As:
ao comentário de mesclagem. O PR de lançamento conterá a versão que você especificou no rodapé Release-As:
. Você pode então aprovar e mesclar o PR de lançamento.
Para versionamento de pré-lançamento, propomos usar v1.0.0-alpha.X
ou v1.0.0-beta.X
, dependendo da maturidade. X
é a versão de pré-lançamento e é o que deve ser incrementado manualmente.
Quando um módulo estiver pronto para o primeiro lançamento, você precisará adicionar o rodapé Release-As: v1.0.0 e isso acionará o primeiro lançamento. Depois disso, o processo de liberação será automático.
|