Estes ultimos dias tenho andado relativamente ocupado a aprender como AzureDevops funciona e a migrar para lá os projectos de um servidor GitLab, já que estava com a mão na massa, durante a migração decidi melhorar e adicionar mais uns passos no processo de automatização de testes / distribuição nos módulos terraform e um deles passa exatamente por versionar os módulos sempre que o código é alterado. Tarefa simples não é? Afinal de contas já tenho isto implementado em tantos outros projetos, aqui, aqui e … aqui e … bom, o que parecia à partida uma tarefa simples e de apenas alguns minutos tornou-se num dia de más escolhas, frustrações e teimosia até tarde e más horas a vasculhar por documentação que, não é muito clara, a experimentar outras ferramentas como GitVersion cuja documentação também não é muito digestível. Embora tenha estado perto de alcançar o objetivo nunca consegui realmente lá chegar e nunca estive verdadeiramente satisfeito com o resultado! posto isto decidi voltar ao semantic-release e tentar mais uma vez (Nunca devia ter tentado de outra forma!!). Após ler os erros iniciais com um pouco mais de atenção e mais um pouco de pesquisa cheguei aqui e tudo começou a compor-se!

Resumindo, AzureDevops não é mau, mas não é a plataforma mais intuitiva para se trabalhar para além disso, há dias que só complicamos o que é simples, e se tivesse prestado atenção aos erros mais cedo, tinha-me livrado de tantas horas aos círculos!

Em todo o caso, fica aqui o registo de como configurei tudo no caso de alguém andar à procura do mesmo.

Project Settings

Abrir o projeto => configurações do projeto => menu repositórios => Separador segurança => Selectionar “… Build Service” => Ajustar as permissoes “Contribute” (Contribuir), “Create Branch” (Criar “ramo”), “Create Tag” (Criar etiquetas), “manage notes” (Gerir notas) e “Read” (Ler) para “allow” (Permtir).

ProjecSettings

Configuração da “pipeline”

pool:
  vmImage: ubuntu-latest

### Rest of the pipeline ###
### Release stage is skipped on Pull Requests, manual triggers and Scheduled events
- stage: release
    condition: and(succeeded(), ne(variables['Build.Reason'], 'Schedule'), ne(variables['Build.Reason'], 'PullRequest'), ne(variables['Build.Reason'], 'Manual'))
    jobs:
    - job: release
      steps:
      - checkout: self
        persistCredentials: true
        clean: true
      - script: |
                    npx semantic-release
       
        displayName: semantic-release

Configurações da semantic-release

{
  "name": "aws-vpc",
  "plugins": [],
  "release": {
    "branches": [ "master", "release", "test", "dev" ]
  },

  "branches": [
    {name: 'master'},
    {name: 'release', channel: 'release', prerelease: true},
    {name: 'test', channel: 'test', prerelease: true},
    {name: 'dev', channel: 'dev', prerelease: true}
  ]
}