DO ‐ Integração Contínua (CI) - manolito-fatec/dashflow-2025-1 GitHub Wiki

Integração Contínua (CI) no Projeto


Visão Geral

A Integração Contínua (CI) no projeto tem como objetivo garantir que as alterações no código sejam automaticamente verificadas e construídas, reduzindo erros e melhorando a estabilidade do sistema. Utilizamos GitHub Actions para automatizar esse processo tanto no backend (Java Spring Boot + Spark) quanto no frontend (Vue.js 3).

Cada push ou pull request em qualquer branch dispara um pipeline de build para validar se o código pode ser compilado corretamente. Testes automatizados foram adicionados ao longo da primeira sprint.


Configuração do CI no GitHub Actions

Estrutura do CI

O pipeline de CI é dividido em dois fluxos principais:

  • Backend: Compilação do projeto Java utilizando Maven, configurando ambiente JDK 17 e Apache Spark.
  • Frontend: Construção do projeto Vue.js, configurando Node.js 22.

Ambos os workflows são disparados automaticamente em qualquer push ou pull request para qualquer branch.

  • Pull Requests estão bloqueados em qualquer caso de falha de build.
  • As branches de develop e main são protegidas para commits. Elas podem ser alteradas somente por pull requests e, ao menos, uma review.
  • Foi acordado entre os desenvolvedores a abertura de draft Pull Request durante o desenvolvimento de uma working branch e não somente no fim dela para ser mais visível o progresso de desenvolvimento e os jobs dos workflows.

Build do Backend

Configuração do Workflow

name: Java Build with Maven  

on:  
  push:  
    branches:  
      - '*'  
  pull_request:  
    branches:  
      - '*'  

jobs:  
  build:  
    runs-on: ubuntu-latest  
    services:  
      postgres:  
        image: postgres:latest  
        env:  
          POSTGRES_USER: ${{ secrets.DB_USERNAME }}  
          POSTGRES_PASSWORD: ${{ secrets.DB_PASSWORD }}  
          POSTGRES_DB: dashflow  
        ports:  
          - 5432:5432  
    steps:  
    - name: Checkout code  
      uses: actions/checkout@v4  

    - name: Set up JDK 17  
      uses: actions/setup-java@v4  
      with:  
        java-version: '17'  
        distribution: 'temurin'  
        cache: maven  

    - name: Set up Apache Spark  
      uses: vemonet/setup-spark@v1  
      with:  
        spark-version: '3.5.1'  
        hadoop-version: '3'  
        scala-version: '2.13'  
        log-level: 'debug'  
        install-folder: '/home/runner/work'  

    - name: Build with Maven  
      run: mvn -B clean package -DskipTests  
      env:  
        SPRING_DATASOURCE_URL: jdbc:postgresql://localhost:5432/dashflow  
        SPRING_DATASOURCE_USERNAME: ${{ secrets.DB_USERNAME }}  
        SPRING_DATASOURCE_PASSWORD: ${{ secrets.DB_PASSWORD }}  
        MAVEN_OPTS: "--add-exports=java.base/sun.nio.ch=ALL-UNNAMED"  

    - name: Verify Spark Installation  
      run: spark-submit --version  

Explicação dos Passos

  1. Checkout do código: Baixa os arquivos do repositório.
  2. Configuração do JDK 17: Instalação da versão correta do Java.
  3. Configuração do Apache Spark: Instalação do Spark para o processamento distribuído.
  4. Build com Maven: Compila o projeto com a execução dos testes unitários.
  5. Verificação do Spark: Confirma que o Spark está instalado corretamente.

Build do Frontend

Configuração do Workflow

name: Vue.js Build  

on:  
  push:  
    branches:  
      - '*'  
  pull_request:  
    branches:  
      - '*'  

jobs:  
  build:  
    runs-on: ubuntu-latest  

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

    - name: Set up Node.js 22  
      uses: actions/setup-node@v4  
      with:  
        node-version: '22'  
        cache: 'npm'  

    - name: Install dependencies  
      run: npm install  

    - name: Build project  
      run: npm run build  

Explicação dos Passos

  1. Checkout do código: Baixa os arquivos do repositório.
  2. Configuração do Node.js: Instala a versão 22 do Node.js e usa cache do npm.
  3. Instalação de dependências: Executa npm install para baixar os pacotes do projeto.
  4. Build do projeto: Executa npm run build para gerar os arquivos estáticos.

Elementos de possível melhora do CI

  • Implementação de Testes de Integração com Cypress.

Resultados

  • CI Automatizado: Cada push ou PR é verificado automaticamente.
  • Ambiente de Build Consistente: Uso de containers para evitar variações de configuração.
  • Preparação para Testes Automatizados: Estrutura pronta para implementação futura.