Skip to content

Sprint 1 · #1 — Configurar CI/CD com GitHub Actions - #10

Merged
c4rlosfb merged 4 commits into
masterfrom
fix/issue-1
Jun 23, 2026
Merged

Sprint 1 · #1 — Configurar CI/CD com GitHub Actions#10
c4rlosfb merged 4 commits into
masterfrom
fix/issue-1

Conversation

@KauaN-png

@KauaN-png KauaN-png commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Resolve a issue #1. Alterações realizadas:

.github/workflows/ci.yml — Pipeline CI/CD com 3 jobs:

  • lint: ESLint (Node v22 LTS) com npm ci e cache de dependências
  • docker-build: Build da imagem Docker (docker compose build) + validação (docker compose config)
  • smoke-test: Sobe todos os serviços, faz polling de readiness (loop de 15 tentativas), testa GET /, /metrics, POST /register, POST /login, GET /users, e faz cleanup com docker compose down -v. Smoke tests executam com -f (falha rápido em erro)

app/eslint.config.js — Flat config ESLint v9.x com:

  • Config recomendada (@eslint/js)
  • Regras críticas como error: no-unused-vars, no-var, prefer-const
  • no-console: off (permitido para logs)
  • Ignora public/* e node_modules/*

app/package.json@eslint/js e eslint como devDependencies + script lint

README.md — Badge de status do CI/CD Pipeline

@KauaN-png KauaN-png assigned c4rlosfb and KauaN-png and unassigned c4rlosfb Jun 23, 2026
@KauaN-png

Copy link
Copy Markdown
Collaborator Author

📋 Code Review — PR #10 — CI/CD (Issue #1)

✅ Acertos

  1. Pipeline CI bem estruturado — Dois jobs independentes (lint + build) rodam em paralelo, otimizando o tempo de execução.
  2. Smoke tests abrangentes — 4 cenários cobrindo GET /users, GET /metrics, POST register (sucesso 201) e POST register (validação 400).
  3. ESLint config completa — Flat config com globals apropriados para Node.js e browser, regras bem definidas (semi, quotes, indent, etc.).
  4. Cleanup no CI — Step com if: always() garante que o container não vaze em caso de falha.
  5. Correções de qualidade — EOL at EOF, remoção de trailing whitespace, e letconst no script.js.
  6. .gitignore abrangente — Cobre node_modules, IDE, OS, .env e Docker.
  7. Badges README — CI Status e Last Commit com shields.io.

⚠️ Sugestões

  1. node-version: 2422 (LTS) — Node 24 pode não estar disponível nos runners do GitHub Actions ou pode ser instável. Node 22 LTS é recomendado para produção e tem ampla cobertura nos runners.

  2. sleep 3 → polling loop — O sleep fixo de 3s no smoke test é frágil. Se o container demorar mais para iniciar, o teste falha falsamente. Melhor usar polling:

  3. Duplicação de código nos testes 3 e 4 — A lógica de POST request está copiada entre test 3 e test 4 (56 linhas duplicadas). Extrair para uma função postRequest(path, data) reduziria ~25 linhas:

  4. Username fixo 'smoke-test' — Se o teste rodar múltiplas vezes no mesmo ambiente, pode gerar conflito 409 (se houver verificação de duplicidade). Usar timestamp ou UUID evita isso:

💡 Observações

  • O package-lock.json com ~2000 linhas é esperado para o primeiro commit de dependências, mas em PRs futuros convém ficar atento a mudanças acidentais nele.
  • No geral, código limpo, bem estruturado e funcional. 🚀

Veredito: ✅ Comentário (self-review) — Sugestões não bloqueantes.

@c4rlosfb c4rlosfb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📋 Code Review — PR #10 (fix/issue-1 → master)

✅ Acertos

  1. CI/CD Workflow (.github/workflows/ci.yml) — Bem estruturado, com jobs separados de lint e build. Uso correto de npm ci para instalação determinística. Cleanup com if: always() garante remoção do container mesmo em falha.

  2. ESLint Config (app/eslint.config.js) — Usa o formato flat config (ESLint v9+), com separação apropriada de globals para Node.js e browser. Regras bem escolhidas: semi, quotes, no-unused-vars, indent, prefer-const, no-var.

  3. Smoke Tests (app/test/smoke.js) — Cobre endpoints críticos: GET /users, GET /metrics, POST /register (200/201 ✅ e 400 ❌). Usa http nativo sem dependências extras. Exit code reflete resultado. Código limpo e bem organizado.

  4. package.json — Scripts lint e test bem definidos. devDependencies corretamente declaradas (eslint, @eslint/js).

  5. .gitignore — Abrangente e bem organizado: node_modules, IDE, env, Docker, logs.

  6. Whitespace cleanup — Boa prática limpar trailing spaces e garantir newline final (app/app.js, app/cpu-worker.js).

  7. README.md — Badges de CI e Last Commit agregam visibilidade ao projeto.


🚨 Erros

  1. ❌ CONFLITO COM MASTER (mergeStateStatus: DIRTY) — O PR não pode ser mergeado no estado atual:

    • .gitignore — Conflito add/add (ambas branches adicionaram arquivo idêntico; trivial de resolver, mas existe).
    • app/app.js — Conflito de conteúdo: fix/issue-1 alterou whitespace (remoção de trailing spaces); master adicionou imports de catalog, checkout e metrics no mesmo bloco. Precisa de resolução manual com rebase/merge do master.
    • Necessário: Fazer git rebase master ou git merge master na branch fix/issue-1 e resolver os conflitos antes de novo push.
  2. ❌ Node.js versão 24 no CI — Node 24 não é LTS (atual LTS é 22). Pode causar instabilidade ou incompatibilidade com pacotes npm. Use node-version: 22 (LTS).


⚠️ Warnings

  1. ⚠️ ESLint apenas warn — Todas as regras estão configuradas como warn, o que não bloqueia o build no CI. Considere promover regras críticas para error: no-unused-vars, no-var, prefer-const.

  2. ⚠️ Smoke test no CI usa sleep 3 — Frágil. Se o container demorar mais para iniciar (runners lentos), o teste falha. Use curl --retry 5 --retry-delay 2 --retry-connrefused ou um loop until.

  3. ⚠️ npm test não roda no CI — O script test definido no package.json executa node test/smoke.js diretamente contra a app rodando. O CI faz um smoke test via curl no Docker, que é diferente. Considere adicionar um job que execute npm test contra o container também.

  4. ⚠️ Buffer no smoke test — O smoke test usa Buffer.byteLength() que depende do global Buffer. Funciona no Node.js, mas verifique se não vai depreciar em versões futuras.


💡 Sugestões

  1. 💡 Adicionar lint:fix — Script "lint:fix": "eslint . --fix" para auto-correção.
  2. 💡 Adicionar npm test ao CI — Um terceiro job no workflow para rodar npm test contra o container Docker.
  3. 💡 Retry loop no lugar de sleep 3 — Exemplo:
    - name: Smoke test
      run: |
        docker run -d --name app-smoke -p 3001:3001 observabilidade-app:ci
        for i in $(seq 1 10); do
          curl -sf http://localhost:3001/users && break
          sleep 2
        done
  4. 💡 node-version: 22 (LTS) — Mais estável e recomendado para produção.
  5. 💡 Considerar matrix strategy — Testar em múltiplas versões do Node (20, 22) para garantir compatibilidade.
  6. 💡 Adicionar paths-ignore no CI — Ex: ignorar mudanças só no README para não disparar workflow desnecessariamente.

🏷️ Veredito

🚨 REQUEST CHANGES — O PR agrega ótimo valor (CI/CD, linting, smoke tests), mas não está mergeável no estado atual devido aos conflitos com master. Após rebase/merge com resolução de conflitos e correção da versão do Node no CI, estará pronto para aprovação.

Resumo das ações necessárias:

  1. 🔴 Fazer rebase/merge do master na fix/issue-1 e resolver conflitos em .gitignore e app/app.js
  2. 🟡 Alterar node-version: 2422 (LTS) no ci.yml
  3. 🟡 (Opcional) Substituir sleep 3 por retry loop no CI
  4. 🟢 (Sugestão) Promover regras ESLint críticas para error

@KauaN-png

Copy link
Copy Markdown
Collaborator Author

Correções aplicadas com base na review (@c4rlosfb):

Conflitos resolvidos — Branch recriada a partir do master atual, sem conflitos
Node v24 → v22 LTS — Alterado no workflow
Polling loop — Substituído sleep 3 por loop de readiness (15 tentativas)
Regras ESLintno-unused-vars e prefer-const promovidas para error

Aguardando re-review. 🚀

@c4rlosfb

Copy link
Copy Markdown
Owner

Correções aplicadas:

  1. Merge com master: Rebase realizado sem conflitos (docker-compose.yml atualizado)
  2. Node 22 LTS: Já estava em NODE_VERSION: '22' (commit 37c5da8)
  3. Retry loop: Já substituía sleep 3 por loop com curl -sf (commit 37c5da8)
  4. ESLint rules: no-unused-vars, prefer-const, no-var já como error

Pronto para merge. @KauaN-png

@c4rlosfb c4rlosfb left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review — PR #10

✅ Todas as correções solicitadas foram aplicadas:

  1. Merge com master: sem conflitos
  2. Node 22 LTS: já estava no commit 37c5da8
  3. Retry loop: substituiu sleep 3 por loop com curl -sf (15 tentativas)
  4. ESLint: no-unused-vars, prefer-const, no-var promovidos a error

Pronto para merge.

@c4rlosfb
c4rlosfb merged commit b65d3cb into master Jun 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants