Garantindo padrões de commits em pull requests no GitHub
Tags: github, actions
Published: 2020-09-20 16:00:23

Vamos explorar a funcionalidade Actions do **GitHub** para automatizar a verificação de padrões de **commints**.

Para mais detalhes do **GitHub Actions** segue a documentação: [Actions](https://docs.github.com/pt/actions)

As definições de padrão de **commit** é muito importante para organização e futuras consultas nas funcionalidades e bug no decorrer da vida de desenvolvimento do software, caso tenha curiosidade de saber alguns padrões segue um bom luga para consultá-las: [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0-beta.2/)

##**1 –  Criar Action**

Para começar acesse seu repositório onde vamos criar a **action**,na aba **Actions** clique em **set up a workflow yourself** como na imagem abaixo:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/b9emy232neqo1oieouq3.png)

Seremos redirecionados para um **workflow template**, porém não vamos usa esse e sim um especifico para rodar **action** de verificação de título de **pull request**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/t1xkvxd8bigmn1s7i7rv.png)

No **Edit new file**, copie e cole a trecho abaixo:

```javascript
name: "PR Title Checker"
on:
  pull_request:
    types:
      - opened
      - edited
      - synchronize

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: thehanimo/pr-title-checker@v1.0.0
        with:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
```
* Nome para identificar nosso **workflow** foi **“PR Title Checker”**;
* Nosso **workflow** vai executar sempre que for aberto, editado ou sincronizado o **pull equest**;
* Vai rodar em cima de uma máquina Ubuntu;
* Usuário que criou action foi **thehanimo** para mais detalhes da action [GitHub thehanimo](https://github.com/thehanimo/pr-title-checker;
* No **GITHUB_TOKEN**: Passamos o nativo;

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/lvy4qfx1j1738es6avlm.png)

Clique **Start commit** para enviar essas alterações ao master e já temos nosso **workflow** criado.

##**2 – Criar Padrões de Commit**

Depois de criar nosso **workflow** vamos definir nossos padrões de **commit** e caso não atenda mostrar a **label**.
Acesse **.github** e clique em **Add file** para criar um novo arquivo **pr-title-styles.json**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/qwhplz932gtmte3l176n.png)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/vscbycogm1539r4xv5es.png)

No arquivo **pr-title-styles.json** adicione o trecho:

```javascript
{
  "LABEL": {
    "name": "titulo está fora do padrão",
    "color": "FF0000"
  },
  "CHECKS": {
    "prefixes": ["fix: ", "feat: "],
    "regexp": "docs\\(v[0-9]\\): "
  }
}
```
a) Label

* **name**: Nome para informar quando o **commit** não estiver no padrão sera exibida;
* **color**: Cor da **label**;

b) Checks

* **prefixes**: Quais padrões vamos adotar no caso tem que começar com **fix** ou **feat**;
* **regexp**: **Regex** usado para identificar tal padrão;

Vamos criar um **pull request** que não siga o padrão definido, ao criar **pull request** a **action** vai executar e avaliar a descrição do título informado caso não atenda exibe uma **label**. 
Na imagem nosso título não atendeu ao padrão e mostrou em vermelho **“titulo está fora do padrão”**.

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/z14w6mpo1eiykg6x4tbi.png)

Lembrando que essa **action** que criamos não impede que o **pull rerquest** seja realizado caso não atenda ao nosso padrão só mostrar uma **label**.

Ao fazer alteração no título do **pull request** com o **fix:** a action vai executar e avaliar como agora atende ao padrão a **label** será removida:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/jvylr73e710mjfhh9r7n.png)

**Actions** no **GitHub** é muito interessante e podemos fazer muitas coisas para automatizar rotinas e como vimos até verificar descrições de título de **pull request**.

[GitHub do Projeto](https://github.com/wandealves/conventionalcommits)