<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcus Ícaro</title>
    <description>The latest articles on DEV Community by Marcus Ícaro (@marcusicaro).</description>
    <link>https://dev.to/marcusicaro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1227783%2Feee9303f-1e87-43ef-8e9b-412935a2a0f4.jpeg</url>
      <title>DEV Community: Marcus Ícaro</title>
      <link>https://dev.to/marcusicaro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcusicaro"/>
    <language>en</language>
    <item>
      <title>Como padronizar mensagens nos commits de sua equipe utilizando husky e commitlint</title>
      <dc:creator>Marcus Ícaro</dc:creator>
      <pubDate>Wed, 20 Dec 2023 10:57:14 +0000</pubDate>
      <link>https://dev.to/marcusicaro/como-padronizar-mensagens-nos-commits-de-sua-equipe-utilizando-husky-e-commitlint-3n1n</link>
      <guid>https://dev.to/marcusicaro/como-padronizar-mensagens-nos-commits-de-sua-equipe-utilizando-husky-e-commitlint-3n1n</guid>
      <description>&lt;h2&gt;
  
  
  Glossário
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;O que é commitlint&lt;/li&gt;
&lt;li&gt;Implementando commitlint no nosso projeto&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introdução &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Este tutorial é a segunda parte de uma série de tutoriais utilizando a ferramenta &lt;a href="https://typicode.github.io/husky/"&gt;husky&lt;/a&gt;. Caso queira ver a primeira parte, onde ensino a fazer o setup do projeto detalhadamente, o link se encontra &lt;a href="https://dev.to/marcusicaro/como-adicionar-hooks-aos-commits-de-seu-projeto-utilizando-husky-32nh"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Veremos aqui uma maneira rápida e prática de padronizar suas mensagens de commit utilizando husky e &lt;a href="https://commitlint.js.org/#/"&gt;commitlint&lt;/a&gt;, para que você e sua equipe possam facilmente navegar pelo histórico de seus projetos.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que é commitlint &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para fazer validações nas mensagens de commit antes do upload, utilizaremos novamente git hooks. Para uma explicação mais detalhada sobre o que são git hooks, leia a primeira parte desse tutorial &lt;a href="https://dev.to/marcusicaro/como-adicionar-hooks-aos-commits-de-seu-projeto-utilizando-husky-32nh"&gt;aqui&lt;/a&gt;. Adicionaremos um novo hook em nosso projeto, para fazer agora uma validação na mensagem de commit.&lt;/p&gt;

&lt;h3&gt;
  
  
  Implementando commitlint no nosso projeto &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Começaremos a partir de onde estava nosso projeto (com o npm já inicializado e com o Husky devidamente instalado). Iremos então instalar a package commitlint usando o comando &lt;code&gt;npm install -g @commitlint/cli @commitlint/config-conventional&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Explicando o que o comando faz:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm install -g&lt;/code&gt; define a instalação dessas packages de forma global na máquina.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@commitlint/cli&lt;/code&gt; instala o commitlint na máquina.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@commitlint/config-conventional&lt;/code&gt; instala uma configuração do commitlint de acordo com &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/"&gt;conventional commits&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;Depois, com seu terminal na raíz do projeto, insira o comando &lt;code&gt;echo "module.exports = {extends: ['@commitlint/config-conventional']}" &amp;gt; commitlint.config.js&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Isso criará um arquivo chamado &lt;code&gt;commitlint.config.js&lt;/code&gt; exportando um objeto que define que nosso commitlint deverá estar de acordo com as configurações do &lt;code&gt;@commitlint/config-conventional&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Adicionaremos nosso primeiro hook. Com o terminal na raíz de seu projeto, insira o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx husky add .husky/commit-msg 'npx --no -- commitlint --edit ${1}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Na &lt;a href="https://dev.to/marcusicaro/como-adicionar-hooks-aos-commits-de-seu-projeto-utilizando-husky-32nh"&gt;primeira parte do tutorial&lt;/a&gt;, expliquei o que o comando &lt;code&gt;husky add&lt;/code&gt; faz. A única diferença é que ao invés de requisitarmos que nosso hook rode um teste, estamos requisitando que o comando seja rodado sem realizar uma instalação caso commitlint não seja encontrado (&lt;code&gt;--no --&lt;/code&gt;).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como já temos o husky instalado, não será necessário instalá-lo novamente, mas, caso haja algum erro, você pode instalar o husky em seu projeto com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install husky --save-dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E, por fim, ativar os hooks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx husky install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos agora testar para ver se tudo está funcionando corretamente. Insira o comando &lt;code&gt;git add . &amp;amp;&amp;amp; git commit -m 'mensagem de commit ruim'&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;O output resultante deverá ser similar a esse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⧗ input: mensagem de commit ruim
✖ subject may not be empty [subject-empty]
✖ type may not be empty [type-empty]

✖ found 2 problems, 0 warnings
ⓘ Get help: https://github.com/conventional-changelog/commitlint/#what-is-commitlint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas o que isso significa? Para entendermos, precisamos entender um pouco sobre &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/"&gt;conventional commit format&lt;/a&gt;. De acordo com conventional commit format, nossas mensagens de commit precisam ter um tipo e uma descrição, no formato [escopo opcional]: . No nosso caso, estamos utilizando commitlint/config-conventional, que inclui como possíveis tipos, os seguintes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  'build',
  'chore',
  'ci',
  'docs',
  'feat',
  'fix',
  'perf',
  'refactor',
  'revert',
  'style',
  'test'

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode verificar isso e outras no arquivo .commitlintrc.json na raíz do projeto. O conteúdo dele deverá ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "extends": ["@commitlint/config-conventional"],
  "rules": {
    "type-enum": [
      2,
      "always",
      [
        "ci",
        "chore",
        "docs",
        "ticket",
        "feat",
        "fix",
        "perf",
        "refactor",
        "revert",
        "style"
      ]
    ]
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;"extends": ["@commitlint/config-conventional"]&lt;/code&gt; traz as configurações de &lt;code&gt;"@commitlint/config-conventional"&lt;/code&gt; e as aplica em nosso projeto.&lt;br&gt;
&lt;code&gt;"rules"&lt;/code&gt; traz um objeto que pode conter algumas propriedades. No nosso caso, estamos interessados somente em "type-enum", que define algumas regras a serem utilizadas no tipo da mensagem de commit. O primeiro valor do array diz se deverá ser desabilitado (0), mostrar apenas um warning (1) ou exibir um erro no terminal (2). O segundo item do array define quando a regra deverá ser aplicada. O terceiro, são os tipos válidos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Nosso commit não tem um tipo válido e nem um subject (assunto).&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Agora que vimos a mensagem de erro e sabemos o que ela quer dizer, iremos consertar esse commit para ficar de acordo com as boas práticas. Iremos inserir o comando git commit -m 'feat: add commitlint to project' no terminal. O tipo é feat pois estamos adicionando uma feature nova commitlint. A descrição é o que foi feito. Depois é só salvar.&lt;/p&gt;

&lt;p&gt;Pronto, seu commit já está de acordo com as &lt;a href="https://www.conventionalcommits.org/en/v1.0.0/"&gt;boas práticas para mensagens de commit&lt;/a&gt; e é só fazer o push.&lt;/p&gt;

&lt;h4&gt;
  
  
  Links úteis:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://typicode.github.io/husky/"&gt;Documentação do Husky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://commitlint.js.org/"&gt;Documentação do commitlint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Foto por &lt;a href="https://pixabay.com/users/noname_13-2364555/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=3380550"&gt;NoName_13&lt;/a&gt; em &lt;a href="https://pixabay.com//?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=3380550"&gt;Pixabay&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>husky</category>
      <category>programming</category>
      <category>git</category>
    </item>
    <item>
      <title>Como adicionar hooks aos commits de seu projeto utilizando Husky</title>
      <dc:creator>Marcus Ícaro</dc:creator>
      <pubDate>Thu, 07 Dec 2023 17:11:39 +0000</pubDate>
      <link>https://dev.to/marcusicaro/como-adicionar-hooks-aos-commits-de-seu-projeto-utilizando-husky-32nh</link>
      <guid>https://dev.to/marcusicaro/como-adicionar-hooks-aos-commits-de-seu-projeto-utilizando-husky-32nh</guid>
      <description>&lt;p&gt;&lt;em&gt;Foto por &lt;a href="https://unsplash.com/@yapics?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Leon Seibert&lt;/a&gt; em &lt;a href="https://unsplash.com/photos/a-dog-tied-to-a-pole-on-a-city-street-HlSyNdj2goU?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Glossário
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introdução&lt;/li&gt;
&lt;li&gt;Setup do projeto&lt;/li&gt;
&lt;li&gt;Primeiros comandos nos &lt;em&gt;hooks&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Criando um teste&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Introdução &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Em qualquer projeto de desenvolvimento de software, é importante que os &lt;em&gt;commits&lt;/em&gt; sejam consistentes e atendam a padrões predefinidos. Isso ajuda a melhorar a legibilidade e a manutenção do código, além de facilitar a colaboração entre os desenvolvedores.&lt;/p&gt;

&lt;p&gt;O Husky é uma ferramenta que permite adicionar &lt;em&gt;git hooks&lt;/em&gt;  personalizados aos seus projetos. &lt;em&gt;Git hooks&lt;/em&gt; são scripts que são executados antes ou depois de certas ações do sistema &lt;em&gt;git&lt;/em&gt;, como fazer um &lt;em&gt;commit&lt;/em&gt; ou enviar um &lt;em&gt;push&lt;/em&gt;. As utilidades de Husky incluem &lt;em&gt;lint&lt;/em&gt; de mensagens de &lt;em&gt;commit&lt;/em&gt;, execução de testes, &lt;em&gt;lint&lt;/em&gt; de código e muito mais.&lt;/p&gt;

&lt;p&gt;Neste tutorial, ensinarei como fazer com que só seja possível realizar &lt;em&gt;commits&lt;/em&gt; após passar nos testes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup do projeto &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Para começar, vamos precisar de um de um repositório com o pacote &lt;em&gt;npm&lt;/em&gt; inicializado. Para isso, crie um repositório novo (&lt;code&gt;mkdir **NOME DO REPOSITÓRIO**&lt;/code&gt; no Ubuntu), navegue para o  repositório criado no seu terminal (&lt;code&gt;cd **NOME DO REPOSITÓRIO**&lt;/code&gt;) e então insira o comando &lt;code&gt;npm init -y&lt;/code&gt; no terminal para inicializar o pacote &lt;em&gt;npm&lt;/em&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Caso não saiba o que é ou não tenha o Node instalado em sua máquina, acesse (aqui)[&lt;a href="https://kinsta.com/pt/blog/como-instalar-o-node-js/"&gt;https://kinsta.com/pt/blog/como-instalar-o-node-js/&lt;/a&gt;] para ler um tutorial.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Agora, vamos agora instalar o Husky como uma &lt;code&gt;devDependencies&lt;/code&gt;. Para isso, utilizaremos o comando &lt;code&gt;npm install husky --save-dev&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apenas um breve adendo: &lt;code&gt;devDependencies&lt;/code&gt; são dependências necessárias durante o desenvolvimento da aplicação, mas não necessárias para seu código funcionar em produção. Um uso de caso bem comum para isso é quando você tem um servidor com baixo limite de armazenamento. Sua pasta &lt;em&gt;node_modules&lt;/em&gt;, se for muito grande, pode não ser aceita com todas as dependências dela. Neste caso, para reduzirmos o espaço armazenamento necessário para nossa aplicação rodar no nosso servidor, instalamos alguns pacotes como &lt;code&gt;devDependencies&lt;/code&gt; e, quando formos instalar as dependências para nossa aplicação rodar no servidor, utilizamos o comando: &lt;code&gt;npm install --production&lt;/code&gt;, garantindo assim que as &lt;code&gt;devDependencies&lt;/code&gt; não sejam instaladas também.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Em seguida, habilitaremos os &lt;em&gt;git hooks&lt;/em&gt; com o comando &lt;code&gt;npx husky install&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para garantir que toda vez que seu projeto for instalado você tenha &lt;em&gt;git hooks&lt;/em&gt; habilitados, utilize o comando &lt;code&gt;npm pkg set scripts.prepare="husky install"&lt;/code&gt;. Este comando irá adicionar na propriedade "scripts" de seu package.json a seguinte linha: &lt;code&gt;"prepare": "husky install"&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Primeiros comandos nos &lt;em&gt;hooks&lt;/em&gt; &lt;a&gt;
&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Agora, iremos adicionar comandos aos &lt;em&gt;hooks&lt;/em&gt; de nossa aplicação. Digite os comandos abaixo em seu terminal. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx husky add .husky/pre-commit "npm test"
git add .husky/pre-commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Feito isso, será criado um arquivo na pasta &lt;code&gt;.husky&lt;/code&gt;  com o seguinte conteúdo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"

npm test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Não se esqueça de adicionar o script correto para o comando &lt;code&gt;npm test&lt;/code&gt;. No caso deste tutorial, iremos utilizar o Jest, portanto, insira o seguinte comando no seu terminal, caso queira utilizar o Jest também &lt;code&gt;npm pkg set scripts.test="jest"&lt;/code&gt;. Este comando adiciona nos scripts do package.json o comando "test".&lt;/p&gt;

&lt;p&gt;Esse arquivo contém comandos para executar o &lt;em&gt;shell script&lt;/em&gt; &lt;code&gt;husky.sh&lt;/code&gt; para validar se o Husky está funcionando corretamente, e por fim, define que deverá ser executado o &lt;code&gt;npm test&lt;/code&gt; para que o &lt;em&gt;commit&lt;/em&gt; seja aceito. Caso falhe, o &lt;em&gt;commit&lt;/em&gt; não irá funcionar e uma mensagem de erro será exibida.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;É possível "burlar" a verificação executada pelo &lt;em&gt;hook&lt;/em&gt; com o seguinte comando: &lt;code&gt;git commit -m "*NOME DO SEU COMMIT AQUI*" --no-verify&lt;/code&gt;. O &lt;code&gt;--no-verify&lt;/code&gt; ou &lt;code&gt;-n&lt;/code&gt; desabilitam a verificação do commit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Criando um teste &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Agora, vamos para a parte favorita de todo desenvolvedor: escrever testes.&lt;/p&gt;

&lt;p&gt;Utilizarei Jest como ferramenta de teste neste exemplo, mas fique à vontade para escolher a que for mais adequada para suas necessidades.&lt;/p&gt;

&lt;p&gt;Inicialmente, rodaremos o comando &lt;code&gt;npm install --save-dev jest&lt;/code&gt; para instalar o Jest no seu projeto. &lt;/p&gt;

&lt;p&gt;Depois, criaremos um arquivo na raíz do projeto com o nome &lt;code&gt;sum.js&lt;/code&gt;. Copie e cole o código abaixo nele:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function sum(a, b) {
    return a + b;
  }
module.exports = sum;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Agora criaremos o arquivo de testes dele &lt;code&gt;sum.test.js&lt;/code&gt;&lt;br&gt;
.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const sum = require('./sum');

test('adds 1 + 2 to equal 3', () =&amp;gt; {
  expect(sum(1, 2)).toBe(3);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Pronto. Agora é só tentar fazer um &lt;em&gt;commit&lt;/em&gt;. Primeiro, vamos adicionar os arquivos na &lt;em&gt;index&lt;/em&gt; do Git com o comando &lt;code&gt;git add .&lt;/code&gt;. Depois vamos tentar escrever uma mensagem de &lt;em&gt;commit&lt;/em&gt; utilizando &lt;code&gt;git commit -m '*SUA MENSAGEM AQUI*'&lt;/code&gt;. Se tudo ocorrer bem, você deverá ver o teste do Jest rodando e por fim uma mensagem dizendo que os arquivos foram adicionados à &lt;em&gt;index&lt;/em&gt; com sucesso.&lt;/p&gt;

&lt;p&gt;Por fim, rode &lt;code&gt;git push&lt;/code&gt; para enviar estes &lt;em&gt;commits&lt;/em&gt; para sua plataforma de versionamento de preferência.&lt;/p&gt;

&lt;p&gt;Caso queira saber mais sobre o Husky, acesse o repositório  oficial no github &lt;a href="https://github.com/typicode/husky"&gt;aqui&lt;/a&gt; e a documentação oficial deles [aqui][&lt;a href="https://typicode.github.io/husky/"&gt;https://typicode.github.io/husky/&lt;/a&gt;).&lt;/p&gt;

</description>
      <category>husky</category>
      <category>programming</category>
      <category>git</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
