Garanta que seu código esteja usando versionamento semântico de forma automática!

sanar
sanar
Published in
5 min readNov 5, 2020

Por Almerindo Rehem

Uma das coisas mais relevantes quando estamos trabalhando em equipe em um mesmo projeto é o versionamento. A utilização do versionamento semântico é fundamental para sabermos o que mudou, se houve uma mudança brusca ou não, dentre outras coisas mais.

Outro ponto super relevante é que muitas pessoas utilizam alguns serviços de captura de erros na cloud, mas não configuram corretamente estes serviços para que se consiga rastrear/reproduzir tal erro. Uma coisa muito interessante, por exemplo, seria conseguir filtrar todos os erros de uma determinada versão de software.

Embora estas questões sejam quase que unanimidade na área DEV, o mínimo que se precisa para conseguir rastrear os erros de uma determinada versão de software é:

  • Garantir que seu software esteja sendo versionado corretamente (Versionamento Semântico)
  • Automatizar a forma de como incrementar o versionamento (MAJOR.MINOR.PATCH)
  • Garantir que os erros estejam sendo enviados para um serviço de monitoramento de erros (https://sentry.io/)
  • Garantir que as informações dos erros sejam minimamente rastreável e que facilite a sua reprodução.

Muitos até tentam pensar em como fazer isso de forma que o ajude no seu dia a dia, mas a cabeça está muito ocupada com as tarefas diárias…

A questão aqui é que muita gente se pergunta como fazer isso e/ou como garantir que o versionamento seja incrementado de maneira correta ou minimamente automatizada. A boa notícia é que existe como fazer isso de forma simples e automática.

A seguir, mostraremos o código de uma simples biblioteca que captura informações relevantes para rastrear e reproduzir os erros, envia-os para o http://sentry.io e, o mais legal, faz o versionamento automático! Isso mesmo!

Incrementa a release, seguindo o padrão MAJOR.MINOR.PATCH, altera o seu package.json com o versionamento correto, envia para o github e ainda publica no npm! Isso tudo com um simples comando!

Mão na massa!

Vamos deixar de lero-lero e mostrar um exemplo prático. Primeiro temos que padronizar os commits, este ponto é crucial, e muito simples! Basta você ficar atento às seguintes regras para escrever no commit:

  1. fix: Prefixo no subject do commit: Aciona uma trigger de fix release version, Ex. 1.2.3 → 1.2.4
  2. feat: … Prefixo no subject do commit: Aciona uma trigger de feature version, Ex. 1.2.3 → 1.3.0
  3. BREAKING CHANGE: … No body do commit: Aciona uma trigger de breaking version release, Ex. 1.2.3 → 2.0.0

Sabendo somente essas três regras, já é possível usar o versionamento semântico de maneira automática.

Vamos criar um projeto exemplo! Primeiro baixe um exemplo pré-configurado express-typescript-boilerplate, para não termos que configurar tudo do zero.

git clone https://github.com/almerindo/express-typescript-boilerplate.git sanar-sentry-error

cd sanar-sentry-error

yarn

yarn dev:server

Agora se conecte no http://127.0.0.1:3333 para ver se o express está rodando.

Instale o semantic version e os plugins a seguir:

yarn add -D semantic-release @semantic-release/{git,commit-analyzer,release-notes-generator,npm,changelog}

Adicione a configuração de release no package.json

"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
["@semantic-release/npm",{"npmPublish":false}],
"@semantic-release/changelog",
"@semantic-release/git"
],
"branch": "master"
},

Siga a documentação oficial do semantic-release para saber como configurar conforme suas necessidades. https://github.com/semantic-release/semantic-release/blob/caribou/docs/usage/configuration.md#configuration

O arquivo package.json deverá ficar como a seguir:

{
"name": "sanar-error-handler",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"release": {
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
["@semantic-release/npm",{"npmPublish":false}],
"@semantic-release/changelog",
"@semantic-release/git"
],
"branch": "master"
},
"devDependencies": {
"@semantic-release/changelog": "^5.0.1",
"@semantic-release/commit-analyzer": "^8.0.1",
"@semantic-release/git": "^9.0.0",
"@semantic-release/npm": "^7.0.5",
"@semantic-release/release-notes-generator": "^9.0.1",
"@types/express": "^4.17.6",
"@typescript-eslint/eslint-plugin": "^2.28.0",
"@typescript-eslint/parser": "^2.28.0",
"eslint": "^6.8.0",
"eslint-config-airbnb-base": "^14.1.0",
"eslint-config-prettier": "^6.10.1",
"eslint-import-resolver-typescript": "^2.0.0",
"eslint-plugin-import": "^2.20.2",
"eslint-plugin-prettier": "^3.1.3",
"prettier": "^2.0.4",
"semantic-release": "^17.0.6",
"ts-node-dev": "^1.0.0-pre.44",
"typescript": "^3.8.3"
},
"dependencies": {
"express": "^4.17.1"
},
"scripts": {
"build": "tsc",
"dev:server": "ts-node-dev --inspect --transpileOnly --ignore-watch node_modules src/server.ts"
}
}

Pronto! Neste momento já estamos conseguindo gerar automaticamente o versionamento do código seguindo o semantic-release rodando o código: npx semantic-release através do seu CI ou usando o shell com a flag — no-ci.

Vamos Testar!? Faça o commit, conforme as regras no início do artigo.

Digite git add . para adicionar as alterações feitas até agora e, em seguida git commit para abrir o editor.

Eu particularmente acredito que um bom commit deve ser dividido em 3 partes: Subject, Body e Foot.

Coloque sua mensagem de commit assim:

Se você tiver em um repositório seu, olhe como está os commits!

Isso mesmo! A release foi adicionada ao github e incrementada automaticamente, e ainda seguiu o padrão semantic version!

Esse artigo foi escrito por Almerindo Rehem, Senior Software Engineer na Sanar, originalmente no seu perfil no LinkedIn.

Quer automatizar tarefas repetitivas, melhorar processos de desenvolvimento e, ainda, ajudar a revolucionar a medicina através da tecnologia? Vem pra Sanar! Temos vagas para front-end, back-end, mobile e fullstack. Se inscreva no link abaixo:

--

--

sanar
sanar
Editor for

Somos uma startup que atua em toda a jornada médica. Queremos ajudar médicos a fazer a medicina melhor. E você está convidado a entrar nesta jornada com a gente