semantic-release AzureDevops
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).
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}
]
}