Eu estava explicando um sistema de construção proposto (Gradle / Artifactory / Jenkins / Chef) a um de nossos arquitetos seniores, e ele fez um comentário para mim que eu meio que discordo, mas não tenho experiência suficiente para pesar.
Este projeto constrói uma biblioteca Java (JAR) como um artefato a ser reutilizado por outras equipes. Para controle de versão, eu gostaria de usar a abordagem semântica de:
<major>.<minor>.<patch>
Onde patch
indica correções de bugs / emergência, minor
indica versões compatíveis com versões anteriores e major
indica refatorações em massa da API e / ou alterações incompatíveis com versões anteriores.
No que diz respeito à entrega, aqui está o que eu quero: um desenvolvedor compromete algum código; isso aciona uma construção em um ambiente de controle de qualidade / teste. Alguns testes são executados (alguns automatizados, outros manuais). Se todos os testes forem aprovados, uma compilação de produção publica o JAR em nosso repositório interno. A essa altura, o JAR deveria ser versionado corretamente, e meu pensamento era usar o build.number
que é gerado automaticamente e fornecido por nossa ferramenta de CI para atuar como o número do patch.
Assim, o versionamento seria realmente:
<major>.<minor>.<build.number>
Novamente, onde build.number
é fornecido pela ferramenta de IC.
O arquiteto descartou isso, dizendo que o uso do número de compilação do IC era um "abuso" do controle de versão semântico.
Minha pergunta é: isso está correto? Em caso afirmativo, por quê? E se não, por que não?