Quest-Finder / temvagamestre.server

MIT License
5 stars 0 forks source link

Fix/ci workflows #73

Closed felipesouza91 closed 2 months ago

felipesouza91 commented 3 months ago

Fix CI/CD para realizar o build do projeto e criar uma imagem Docker da api. Para o Script do Github Action funcionar corretamente necessário adicionar as secrets abaixo:

Secrets são necessárias para rodar os testes de integração do projeto:

WEBHOOK_SECRET CLERK_JWT_SECRET_KEY SECRET_KEY_SESSION MONGO_URI DATABASE_URL DATABASE_TEST_URL

Secrets de push do Docker Hub:

DOCKERHUB_USERNAME DOCKERHUB_TOKEN

htamagnus commented 3 months ago

Fix CI/CD para realizar o build do projeto e criar uma imagem Docker da api. Para o Script do Github Action funcionar corretamente necessário adicionar as secrets abaixo:

Secrets são necessárias para rodar os testes de integração do projeto:

WEBHOOK_SECRET CLERK_JWT_SECRET_KEY SECRET_KEY_SESSION MONGO_URI DATABASE_URL DATABASE_TEST_URL

Secrets de push do Docker Hub:

DOCKERHUB_USERNAME DOCKERHUB_TOKEN

* Antes de fazer o merge necessário adicionar as Secrests, pois caso contrario o CI/CD ira falhar.

Secrets já adicionadas, somente as do docker faltando, e como alinhado, serão criadas na conta de back end do projeto por questões de dados sensíveis

felipesouza91 commented 2 months ago

@htamagnus e @emerson-oliveira , o fluxo já está pronto. Preciso que seja mergeada na Dev, para poder rodar o primeiro pipeline e gerar a primeira imagem. Após gerada eu precisão alterara o nome da imagem no servidor. Se eu alterar o nome antes, como ele roda uma check para atualizar ele vai quebrar pelo fato da imagem ainda não existir no Docker hub.

htamagnus commented 2 months ago

@felipesouza91 Acho que poderíamos melhorar um pouco mais o workflow:

Seria uma boa prática separar o CI do lint, dos testes e do deploy em workflows distintos por algumas razões:

A principal vantagem é a execução independente: separando lint, testes e deploy, a gente pode rodar apenas a parte necessária quando ocorrer uma mudança. Testes, lint e deploy não precisam esperar uns pelos outros, podendo rodar ao mesmo tempo em diferentes jobs.

Sugestão:

lint.yml:

name: Lint Code

on:
  pull_request:
    branches:
      - dev
      - main

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout git files
        uses: actions/checkout@v3

      - name: Use Node.js Version 20.X
        uses: actions/setup-node@v4
        with:
          node-version: '20.x'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run lint
        run: npm run lint

test.yml:

name: Run Tests

on:
  push:
    branches:
      - dev
      - main
  pull_request:
    branches:
      - dev
      - main

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout git files
        uses: actions/checkout@v3

      - name: Run docker-compose
        uses: hoverkraft-tech/compose-action@v2.0.1
        with:
          up-flags: "-d"
          compose-file: "./docker/docker-compose-test.yml"

      - name: Use Node.js Version 20.X
        uses: actions/setup-node@v4
        with:
          node-version: '20.x'
          cache: 'npm'

      - name: Install dependencies
        run: npm ci

      - name: Run tests
        run: npm run test:ci
        env:
          WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }}
          CLERK_JWT_SECRET_KEY: ${{ secrets.CLERK_JWT_SECRET_KEY}}
          SECRET_KEY_SESSION: ${{secrets.SECRET_KEY_SESSION}}
          MONGO_URI: ${{secrets.MONGO_URI}}
          DATABASE_URL: ${{secrets.DATABASE_URL}}
          DATABASE_TEST_URL: ${{secrets.DATABASE_TEST_URL}}
          PORT: 3000

deploy.yml:

name: Build and Deploy

on:
  push:
    branches:
      - main

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout git files
        uses: actions/checkout@v3

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - uses: benjlevesque/short-sha@v3.0
        id: short-sha
        with:
          length: 7

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Build and push 
        uses: docker/build-push-action@v6  
        with:
          context: .
          platforms: linux/amd64,linux/arm64  
          push: true
          tags: ${{secrets.DOCKERHUB_USERNAME}}/temvagamestreapi:${{steps.short-sha.outputs.sha}},${{secrets.DOCKERHUB_USERNAME}}/temvagamestreapi:latest
felipesouza91 commented 2 months ago

@htamagnus @emerson-oliveira, Boa noite, feito os ajustes.

htamagnus commented 2 months ago

Desculpa a demora, acabou passando e eu esqueci. Quando passar mais de um dia e eu não tiver feito o review, pode me dar um toque no discord @felipesouza91