Estou automatizando o aumento de versão do meu projeto com este script bash:
#!/usr/bin/env bash
CHANGELOG="Changelog.md"
DEBIAN_CHANGELOG="debian/changelog"
UPSTREAM_VERSION=$(cat VERSION)
# Updating entries in rpm files
DEB_RELEASE_NOTES=$(awk '{print " * " $0}' < RELEASE_NOTES)
echo "Adding new Debian changelog entry for version $UPSTREAM_VERSION."
dch -D unstable -m "$DEB_RELEASE_NOTES" --newversion "$UPSTREAM_VERSION-0debian1-unstable1"
# Prompt user to edit Debian changelog
$EDITOR_CHOICE "$DEBIAN_CHANGELOG"
echo "Version updated successfully: $UPSTREAM_VERSION"
O que ele faz é sincronizar e colocar a versão em ambos os pacotes rpm e debian. Mas este comando:
dch -D unstable -m "$DEB_RELEASE_NOTES" --newversion "$UPSTREAM_VERSION-0debian1-unstable1"
Isso me dá alguns problemas porque em alguns lugares no debian/changelog o seguinte:
mkdotenv (0.2.0-0debian1-unstable1) unstable; urgency=medium
* * 1. Split codebase into multiple files. * 2. Use a seperate
version file and define built version upon compile. * 4. [BUGFIX]
If input file is same as output file copy input file into a
temporary one. * 5. Improved Documentation
-- Dimitrios Desyllas <[email protected]> Mon, 10 Mar 2025 20:08:00 +0200
Enquanto o RELEASE_NOTES
arquivo contém:
1. Split codebase into multiple files.
2. Use a seperate version file and define built version upon compile.
4. [BUGFIX] If input file is same as output file copy input file into a temporary one.
5. Improved Documentation
Você sabe por que todas as linhas estão presas como um único marcador???
dch
espera uma única entrada de changelog, não decorada. Ele irá formatá-la para você, adicionando um asterisco e quebrando conforme apropriado.Para seu caso de uso, você precisa executá-lo uma vez por entrada, sem especificar a distribuição de destino. Então, para “fechar” as entradas para a versão de destino, execute
Isso precisa de um argumento, mas o ignora, daí o argumento “ignorado”.
-r
atualiza a primeira linha no changelog para especificar a distribuição fornecida com-D
;-M
usa o nome e o endereço de e-mail especificados no campo “Mantenedor” emdebian/control
vez de depender de variáveis de ambiente.O processo geral seria assim:
Não há necessidade de “inicializar” uma nova versão, isso acontece automaticamente quando
dch
é fornecida uma versão que não corresponde à versão no topo do changelog.No final foi como @Stephen Kitt disse:
Para isso, você precisa iniciar a versão chamando:
Então, para cada linha no arquivo,
RELEASE_NOTES
precisamos chamar:Isso acrescenta uma linha ao
debian/changelog
arquivo e então finalizamos a linha:Então o lançamento precisa ser finalizado como:
No seu exemplo, isso resultará nesta entrada de changelog:
Atualização 25/3/2025
Algumas linhas eram omitidas se
DEBEMAIL
a variável de ambiente não fosse exportada, portanto, criei um pequeno prompt para o usuário inserir seu e-mail e armazená-lo no arquivo DEBEMAIL.