Na Sardine, iteramos rapidamente na criação de novos recursos. À medida que nossa equipe cresce, é fundamental manter informados os diversos stakeholders, incluindo gerentes de contas, gerentes de integração e suporte técnico. Além disso, por motivos de conformidade e segurança, é essencial para nós ter um changelog escrito e um histórico de aprovações de cada implantação.
Neste post do blog, explicamos como implementamos um script para automatizar a geração de notas de versão.
Usamos o GitHub como repositório de código, o Asana para acompanhamento de tarefas e o Slack para comunicação. Nosso script de release busca automaticamente informações no GitHub e no Asana e depois publica essas informações no Slack.

Obter informações da versão
A primeira etapa do script é obter as versões de release do servidor remoto. Como sempre fazemos o deploy em sandbox antes da implantação em produção via CD, podemos facilmente obter a versão que queremos liberar (o que está em sandbox) e a versão que implantamos por último (o que está em produção).
def obter_release():
url = "https://api.sandbox.sardine.ai/healthz"
res = requests.get(url)
return res.headers['X-Version-Id']
Obter informações sobre alterações
Usando a versão de release (git commit SHA) da etapa anterior, agora podemos obter todos os PRs relevantes e a lista das tarefas relacionadas no Asana. Pedimos a todos os desenvolvedores que incluam um link para a tarefa do Asana nas descrições dos PRs, para que possamos obter a lista de tarefas do Asana a partir do GitHub. Nesta etapa, o script primeiro obtém a lista de commits por meio do comando “git log” e, em seguida, chamamos a API do GitHub. A versão anterior desse script usava GH CLI, mas migramos para as APIs REST porque a CLI não oferece suporte a tokens de acesso com permissões granulares.
def get_all_prs(repo, anterior, release): result = subprocess.getstatusoutput(f"git log --pretty=format:'%h - %an, %ar : %s' {anterior}..{release}") numeros_pr = re.findall("#([0-9]+)", result[1]) numeros_pr = list(map(int, numeros_pr)) github_pat = os.getenv('GITHUB_PAT', None) url = 'https://api.github.com/repos/sardine-ai/' + repo + '/pulls?state=closed&direction=desc&per_page=100' prs = [] # obter 500 PRs for page in range(1, 6): prs += requests.get( url + "&page=" + str(page), headers={"Authorization":"Bearer " + github_pat} ).json() return list(filter(lambda pr: pr['number'] in numeros_pr, prs))
Gerar ticket de deploy
Agora temos todas as informações relevantes, então podemos criar um ticket de aprovação de deploy que registre todas as alterações relacionadas. Uma coisa que achamos útil é pedir para todos seguirem conventional commit (colocando prefixos como “fix”, “feat”). Dessa forma, o script pode categorizar automaticamente as mudanças em novas funcionalidades, correções de bugs e assim por diante.

Notificações do Slack
Quando o ticket de aprovação de deploy é gerado, ele é automaticamente enviado para o Slack para solicitações de aprovação. Nosso script de deploy também notifica quando a implantação é concluída, para que as partes interessadas possam acompanhar facilmente o que está planejado para ser implantado e o que está sendo implantado.

Converter notas de versão geradas automaticamente em notas de versão públicas
Por fim, embora as notas de versão automatizadas ofereçam benefícios imediatos para stakeholders internos semitécnicos, como gerentes de produto, elas não são fáceis de consumir externamente. Nossos excelentes gerentes de produto transformam essas notas em ótimas notas de versão voltadas para o público externo.
Nós também publicamos nosso script aqui para que você não precise reinventar a roda. Automatize tudo e concentre-se em criar coisas interessantes!



