Indie Hacker, faça você mesmo #1 - Use o Github Actions pra fazer os code reviews automaticamente
Tags: indiehacker, buildinpublic, opensource
Published: 2024-05-16 00:00:12

Um indie hacker é alguém que constrói e opera negócios de forma independente, muitas vezes focando em startups de tecnologia ou empreendimentos digitais.

Eles geralmente preferem manter o controle total sobre seus projetos, evitando investimentos externos e buscando criar fontes de renda sustentáveis por conta própria.

O termo "indie" vem de "independente", enquanto "hacker" refere-se à mentalidade de solucionador de problemas e à habilidade em criar soluções técnicas. Os indie hackers frequentemente compartilham suas experiências, aprendizados e estratégias dentro da comunidade, buscando colaboração e feedback para melhorar seus empreendimentos, por isso começarei uma série de posts sobre sugestões e dicas de experiências passadas que tive que podem ser úteis para outras pessoas ou outros negócios.

E o primeiro assunto a ser abordado são automatizações que podemos fazer com o Github Actions pra facilitar nossa vida e otimizar nosso tempo que pode ser feito diretamente no repositório do seu projeto de forma personalizada.

Podemos definir diversos tipos de trabalho pra diferentes ações, a abordada no post é pra fazer o code review do código, pois é de extrema importância manter a qualidade do código e manter padrões e as melhores práticas, mesmo que trabalhando sozinho, o que a maioria dos indie hackers fazem, ou em equipes grandes.

Com o Github Actions você pode definir um fluxo de trabalho a partir de um evento, como abertura de um `PR` por exemplo. Os fluxos de trabalho são definidos no diretório `.github/workflows` do repositório, através de arquivos com a extensão `.yml`.

Cada fluxo de trabalho definido no arquivo `.yml` tem uma ação que é executada por um único executor, sendo um script shell em uma máquina virtual provisionada em diversos sistemas operacionais diferentes.

O exemplo que darei abaixo é estruturando um `.yml` de acordo com a documentação, usando a linguagem `PHP` através do `phplint`, porém pode ser facilmente utilizado com outras linguagens, pois o [Github Actions Marketplace](https://github.com/marketplace) possuí uma loja de repositórios de ações e deploys já prontos.

Vamos seprar em duas partes, na parte da identificação do fluxo de trabalho e nos trabalhos em sí.

```yaml
// Opcional - O nome do fluxo de trabalho conforme aparecerá na guia "Ações" do repositório GitHub.
name: PHP Linting

// Especifica o evento para este fluxo de trabalho. Este exemplo usa o evento push, portanto, uma execução de fluxo de trabalho é acionada sempre que alguém envia uma alteração para o repositório ou mescla uma solicitação na branch especificada ou não.
on:
  pull_request:
    branches: ["master"]

// É usado para definir quais recursos externos à ação estão sendo acessados e como esses acessos são autorizados. Por exemplo, se uma ação precisa acessar o repositório onde está sendo executada, pode precisar de permissões para ler nos arquivos do repositório. Da mesma forma, se a ação precisa interagir com serviços externos, como fazer chamadas de API para serviços de nuvem, pode precisar de permissões específicas para isso.
permissions:
  contents: read
```

Agora na definição dos trabalhos, temos a seguinte estrutura.

```yaml
// Agrupa todos os trabalhos executados no fluxo de trabalho.
jobs:
  build:
    // Configura o trabalho para ser executado na versão mais recente de um executor Ubuntu Linux. Isso significa que o trabalho será executado em uma nova máquina virtual hospedada pelo GitHub.
    name: PHP Lint
    runs-on: ubuntu-latest
    
    steps:
      // A palavra-chave uses especifica que esta etapa executará a v3 da ação actions/checkout. Esta é uma ação que faz clone do seu repositório no executor, permitindo que você execute scripts ou outras ações em seu código (como ferramentas de construção e teste). Você deve usar a ação de checkout sempre que seu fluxo de trabalho usar o código do repositório.
      - name: Copying test repository
        uses: actions/checkout@v3
      
      // A palavra-chave uses especifica que esta etapa executará a v8 da ação do php-lint, que irá ajudar os desenvolvedores a detectar os erros sempre que o pull request receber atualizações.
      - name: Run php lint
        uses: StephaneBour/actions-php-lint@8.0
      
      // A palavra-chave uses especifica que esta etapa executará a v1 da ação do review dog, que irá ajudar os desenvolvedores a detectar e corrigir erros de codificação adicionando comentários no pull requests.
      - name: Run php check code with reviewdog
        uses: GeneaLabs/action-reviewdog-phpstan@1.1.2
        with:
          level: "error"
          fail_on_error: "true"
          phpstan_level: 4
          reporter: "github-pr-review"
          target_directory: "./"
```

O resultado do nosso fluxo de trabalho seria algo parecido com isso:

{% embed https://gist.github.com/xxdannilinxx/55693974e562f998b1fea290e02efaee %}

A revisão de código pode ajudar a identificar potenciais vulnerabilidades de segurança no código antes que ele seja implantado em produção. Isso é especialmente importante em ambientes onde a segurança é uma preocupação primordial.

Após o início de uma execução de fluxo de trabalho, você pode ver um gráfico de visualização do progresso da execução e visualizar a atividade de cada etapa em GitHub. 

O GitHub Actions pode ajudá-lo a automatizar quase todos os aspectos dos processos de desenvolvimento da sua aplicação. Pronto para começar?

**Fontes**
[Github Actions - Docs](https://docs.github.com/pt/actions)