Criando seu processo de CI/CD com GitHub Actions
Tags: github, githubactions, githubbrasil, braziliandevs
Published: 2023-05-02 13:08:04

E aí, já conhece o [Github Actions](https://github.com/features/actions)?

O GitHub Actions é uma ferramenta massa para automatizar seus workflows de CI/CD direto no GitHub. Com ele, dá para rodar os testes e fazer builds e deploys de forma bem simples. Vamos ver como fazer!

<img width="100%" style="width:100%" src="https://media.giphy.com/media/NytMLKyiaIh6VH9SPm/giphy.gif">

Nessa publicação eu vou mostrar como criar um workflow para um projeto com **Ruby on Rails, Docker  e Docker Compose**, mas o exemplo serve perfeitamente para outros tipos de projeto com algumas pequenas alterações!

Você precisará ter um projeto rails com docker, docker compose e os testes e para isso você pode encontrar um [guia aqui](https://dev.to/felipemrvieira/receita-de-api-rails-com-docker-23a1)!

Com o seu projeto pronto:

1. Crie uma pasta chamada **.github/workflows** na raiz. Dentro dessa pasta crie um arquivo yaml. O nome é com você. Eu vou chamar de **ci.yaml**

2. Crie o seu fluxo. Aqui, basicamente você define o passo a passo que vai ser executado a cada [ação(push, pull request, issues, fork...)](https://docs.github.com/pt/actions/using-workflows/events-that-trigger-workflows). Para esse exemplo, eu quero que o criar triggers para quando o houver push ou quando for criado pull request apontando para a branch main. Em seguida explico um pouco mais, mas o arquivo fica assim:

```
name: Rails CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Build and Test
        run: |
          docker compose build
          docker compose run --rm web bundle install
          docker compose run --rm web bundle exec rails db:create
          docker compose run --rm web bundle exec rails db:migrate
          docker compose run --rm web bundle exec rspec
      
```
Vamos aos detalhes:

- name: É o nome do workflow

- on: É onde se define os eventos que disparam o workflow

- jobs: São as atividades que serão executadas em paralelo

- build: É o **ID do job**. Poderia ser qualquer identificador único dentro da cadeia de jobs.

- runs-on: Define o tipo de máquina a ser executado o job id que criamos.

- steps: Define a sequência de tarefas que vai ser executada no naquele job/job_id. 

- checkout: O Primeiro step consiste em fazer [checkout](https://github.com/actions/checkout) do repositório

- run: executa comandos no shell do SO. Nesse caso, estou executando uma série de comandos do docker.

Se tudo der certo, ao fazer push ou pull request na master, sua action vai ser disparada.

Agora é so fazer commit e push para ver o que acontece.

Como verificar?

![Print Github](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jtl3d2rpjng14jy2o94f.png)

E o exemplo de uma action que passou:

![pass action](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i8q5u8rfrda9kqgwyutf.png)


Agora é com você! Dá uma explorada na aba actions e nesse check status que marquei!

<img width="100%" style="width:100%" src="https://media.giphy.com/media/ZfK4cXKJTTay1Ava29/giphy.gif">