Skip to content
This repository has been archived by the owner on Jul 8, 2024. It is now read-only.

Feature/no ref/ci #172

Merged
merged 4 commits into from
Mar 18, 2024
Merged

Feature/no ref/ci #172

merged 4 commits into from
Mar 18, 2024

Conversation

dannevesdantas
Copy link
Member

@dannevesdantas dannevesdantas commented Mar 18, 2024

Pessoal, refatorei o workflow do CI. Achei que realmente seria melhor separar em dois arquivos.

Ficou 6X mais rápido, antes levava 6min pra executar, agora executa em 1min.

Antes
image

Depois
image

Além disso, parou de executar duas vezes.

O integration test está "escondido" no histórico do Git, podemos voltar ele depois da avaliação pra gente finalizar.

Por algum motivo o CI antigo ainda está aparecendo aqui na PR
image
Provavelmente vai sumir qdo for pra main.

@RafaelFerSilva
Copy link
Contributor

@dannevesdantas acho que não levava 6 minutos para executar. O que está descrito é que executou a 6 minutos atrás pelo o que entendi na imagem. Para um CI sem teste e2e demorar 6 minutos teria que ser uma quantidade gigante de testes

@RafaelFerSilva
Copy link
Contributor

A questão de executar duas vezes é pelo config que fizemos. Nos pedimos para executar no push e no pull. Ele faz o que mandamos.

push:
  branches:
    - develop
    - 'feature/**'
    - 'fix/**'
  paths-ignore:
    - '**/*.md'
    - .scafflater/**
    - docs/**
pull_request:
  branches:
    - main
    - develop
  paths-ignore:
    - '**/*.md'
    - .scafflater/**
    - docs/**

@dannevesdantas
Copy link
Member Author

@dannevesdantas acho que não levava 6 minutos para executar. O que está descrito é que executou a 6 minutos atrás pelo o que entendi na imagem. Para um CI sem teste e2e demorar 6 minutos teria que ser uma quantidade gigante de testes

Pode crer! É vdd @RafaelFerSilva, nem tinha me atentado.

@RafaelFerSilva
Copy link
Contributor

Ainda acho uma pipeline muito simples para ter que separar os arquivos. Poderia somente criar jobs e rodar em paralelo as validações se a questão fosse tempo.

No exemplo abaixo eu fiz em um projeto de estudo. Está dividido em job e o unit e coverage rodam em paralelo. O E2E está falhando mas executa somente se passar o unit, se falhar o unit aborta a pipeline.

image

name: CI Tests

on:
  pull_request:
    branches:
      - main

jobs:
  unit:
    name: Unit Tests
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Cache Node
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v4
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit Tests
        run: npm run test

  coverage:
    name: Coverage
    runs-on: ubuntu-latest

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

      - name: Cache Node
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v1
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit Tests - Coverage
        run: npm run test:cov

      - uses: romeovs/[email protected]
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          lcov-file: ./coverage/lcov.info

      - name: Monitor coverage
        uses: slavcodev/coverage-monitor-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          coverage_path: 'coverage/clover.xml'
          threshold_alert: 85
          threshold_warning: 80
  
  E2E:
    name: Tests E2E
    runs-on: ubuntu-latest
    needs: unit
    
    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_PASSWORD: pgpwd
          POSTGRES_USER: pguser
          POSTGRES_DB: rms
          POSTGRES_HOST: localhost
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Cache Node
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v4
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit E2E Tests
        run: npm run test:e2e

@dannevesdantas
Copy link
Member Author

dannevesdantas commented Mar 18, 2024

Ainda acho uma pipeline muito simples para ter que separar os arquivos. Poderia somente criar jobs e rodar em paralelo as validações se a questão fosse tempo.

No exemplo abaixo eu fiz em um projeto de estudo. Está dividido em job e o unit e coverage rodam em paralelo. O E2E está falhando mas executa somente se passar o unit, se falhar o unit aborta a pipeline.

image

name: CI Tests

on:
  pull_request:
    branches:
      - main

jobs:
  unit:
    name: Unit Tests
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Cache Node
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v4
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit Tests
        run: npm run test

  coverage:
    name: Coverage
    runs-on: ubuntu-latest

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

      - name: Cache Node
        uses: actions/cache@v2
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v1
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit Tests - Coverage
        run: npm run test:cov

      - uses: romeovs/[email protected]
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          lcov-file: ./coverage/lcov.info

      - name: Monitor coverage
        uses: slavcodev/coverage-monitor-action@v1
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          coverage_path: 'coverage/clover.xml'
          threshold_alert: 85
          threshold_warning: 80
  
  E2E:
    name: Tests E2E
    runs-on: ubuntu-latest
    needs: unit
    
    services:
      postgres:
        image: postgres:latest
        env:
          POSTGRES_PASSWORD: pgpwd
          POSTGRES_USER: pguser
          POSTGRES_DB: rms
          POSTGRES_HOST: localhost
        ports:
          - 5432:5432
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Cache Node
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-
            ${{ runner.os }}-build-
            ${{ runner.os }}-
      - name: Set up Node
        uses: actions/setup-node@v4
        with:
          node-version: 18.x

      - name: Install Dependencies
        run: npm install --ignore-scripts

      - name: Run Unit E2E Tests
        run: npm run test:e2e

Fiz com base no seu exemplo e comitei @RafaelFerSilva

image

Copy link

Quality Gate Passed Quality Gate passed

Issues
0 New issues
0 Accepted issues

Measures
0 Security Hotspots
No data about Coverage
No data about Duplication

See analysis details on SonarCloud

@dannevesdantas dannevesdantas merged commit 0c46cca into main Mar 18, 2024
3 checks passed
@dannevesdantas dannevesdantas deleted the feature/no-ref/ci branch March 18, 2024 21:19
@dannevesdantas dannevesdantas restored the feature/no-ref/ci branch March 18, 2024 21:20
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants