Oi!
Eu uso práticas do SCRUM, Trello, Git Flow, Conventional Commits e Semantic Versioning.
Vou explicar de forma resumida: quando uma sprint vai começar, fazemos uma reunião para revisar o backlog de novas funcionalidades e otimizações para o sistema. Criamos uma nova branch para cada novo recurso assim que ele está pronto, então fazemos um merge dessa branch na branch develop e, após os testes, fazemos o merge no master. Se durante esse processo aparecer algum bug, criamos uma branch para corrigi-lo o mais rápido possível e fazemos o merge na branch develop e, em seguida, no master. A branch do novo recurso também é atualizada com a correção do bug. Quando está tudo OK, geramos uma nova versão (Semantic Versioning). Quanto à geração da nota, faço manualmente. Eu reviso tudo o que aconteceu desde a última versão, identifico os bugs corrigidos, as novas funcionalidades, melhorias, etc. Meu documento de nova versão é um Word que vou atualizando com a data de lançamento, código da versão (tag) e um resumo de tudo o que ocorreu nessa sprint. É possível automatizar essa geração, mas, considerando que é pouca coisa e trabalho de 5 a 10 dias, gosto de fazer manualmente para revisar tudo o que aconteceu durante a sprint.
Espero ter ajudado! Se tiver mais alguma dúvida, pode entrar em contato comigo
https://www.linkedin.com/in/franklin-goncalves28/
O resultado final é mais ou menos assim
https://github.com/HashLoad/horse/releases
https://github.com/otaviolemos/thewisepad-core/commits/master