ci: paraleliza backend/frontend e pula o lado que não mudou #54

Merged
jhony75 merged 1 commit from ci-parallel-jobs-path-filter into develop 2026-09-10 11:40:09 -03:00
Owner

Empilhado sobre a #53 (cache pip/npm/Trivy), ainda não mergeada.

Job único validate-and-build virou 4 jobs:

  • changes: detecta o que mudou (git diff contra o SHA base da PR, ou contra o commit anterior em push) e expõe backend/frontend como true/false. Em caso de dúvida (primeiro commit de uma branch, force-push, workflow_dispatch, ou mudança no próprio ci.yml) roda os dois — nunca pula por engano.
  • backend: só entra se changes.outputs.backend == 'true'. Mesmos steps de sempre.
  • frontend: só entra se changes.outputs.frontend == 'true'. Mesmos steps de sempre. Roda em paralelo com backend (job separado, não mais sequencial dentro do mesmo job).
  • build-and-publish: sempre roda (constrói e publica as 3 imagens juntas, mesma tag de SHA — evita decidir "qual tag antiga reaproveitar" pra imagem que não mudou). Só bloqueia se backend/frontend de fato falhou; "skipped" (o lado que não mudou) não impede este job.

deploy-production/deploy-development passam a depender de build-and-publish (renomeado de validate-and-build).

Maioria das PRs deste repo mexe só num lado — pular o lado que não mudou reduz o tempo de CI sem perder cobertura (o lado tocado sempre roda).

docs/DEPLOYMENT.md atualizado pra citar o novo nome/fluxo dos jobs.

Verificação

Precisa rodar de verdade pra confirmar: (1) uma PR que só mexe em frontend/ pula o job backend corretamente, (2) uma PR que mexe nos dois lados roda ambos em paralelo, (3) build-and-publish roda mesmo com um dos dois skipped. Vou acompanhar.

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

Empilhado sobre a #53 (cache pip/npm/Trivy), ainda não mergeada. Job único `validate-and-build` virou 4 jobs: - **`changes`**: detecta o que mudou (`git diff` contra o SHA base da PR, ou contra o commit anterior em push) e expõe `backend`/`frontend` como `true`/`false`. Em caso de dúvida (primeiro commit de uma branch, force-push, `workflow_dispatch`, ou mudança no próprio `ci.yml`) roda os dois — nunca pula por engano. - **`backend`**: só entra se `changes.outputs.backend == 'true'`. Mesmos steps de sempre. - **`frontend`**: só entra se `changes.outputs.frontend == 'true'`. Mesmos steps de sempre. Roda em **paralelo** com `backend` (job separado, não mais sequencial dentro do mesmo job). - **`build-and-publish`**: sempre roda (constrói e publica as 3 imagens juntas, mesma tag de SHA — evita decidir "qual tag antiga reaproveitar" pra imagem que não mudou). Só bloqueia se backend/frontend de fato **falhou**; "skipped" (o lado que não mudou) não impede este job. `deploy-production`/`deploy-development` passam a depender de `build-and-publish` (renomeado de `validate-and-build`). Maioria das PRs deste repo mexe só num lado — pular o lado que não mudou reduz o tempo de CI sem perder cobertura (o lado tocado sempre roda). `docs/DEPLOYMENT.md` atualizado pra citar o novo nome/fluxo dos jobs. ## Verificação Precisa rodar de verdade pra confirmar: (1) uma PR que só mexe em `frontend/` pula o job `backend` corretamente, (2) uma PR que mexe nos dois lados roda ambos em paralelo, (3) `build-and-publish` roda mesmo com um dos dois `skipped`. Vou acompanhar. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ci: habilita cache de pip/npm/Trivy DB entre execucoes
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 4m37s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
72419470d2
Servico de cache do Forgejo Actions foi habilitado no servidor em
2026-09-10 (investigacao separada, com acesso SSH a VPS) -- antes disso
essa mesma action falhava com "Cache action is only supported on GHES
version >= 3.5 ... check with GHES admin if Actions cache service is
enabled" (ver ci_speed_backlog).

Cada job roda num container efemero -- nada em ~/.cache sobrevive de uma
execucao pra outra sem cache explicito. Medido ao vivo sem cache (PR que
dividiu os steps do frontend): pip install ~25s, npm ci ~56s (quase
metade do tempo do frontend inteiro).

Adiciona cache pra:
- pip (backend), chave por hash de requirements-dev.txt
- npm (frontend), chave por hash de package-lock.json -- cacheia ~/.npm
  (o diretorio de download), nao node_modules: "npm ci" continua rodando
  de verdade, so para de baixar da rede o que ja tem em cache
- banco de vulnerabilidade do Trivy, chave por dia (reaproveita no mesmo
  dia, ainda pega atualizacao diaria -- uma chave "pra sempre" arriscaria
  perder CVE novo)

Nao mexido: cache de camada de imagem Docker ("docker build") -- o job
nao tem socket Docker real pra outros containers (confirmado no
comentario do step do Trivy, quando tentaram rodar Trivy via "docker
run"), entao nao da pra concluir com confianca se o build de imagem já
reaproveita cache do host ou roda com daemon isolado por job sem
investigar mais a fundo; fora do escopo desta mudanca, que foca nos dois
custos ja medidos (pip/npm) mais o Trivy DB (mesmo problema estrutural:
diretorio de cache dentro do container efemero).

restore-keys em todos os três garante cache parcial (versão anterior)
em vez de cache miss total quando a chave exata muda.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
ci: dispara novo run pra validar cache hit
All checks were successful
EEG QA CI / validate-and-build (pull_request) Successful in 3m59s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Deploy development (pull_request) Has been skipped
f63843a60f
ci: paraleliza backend/frontend e pula o lado que nao mudou
All checks were successful
EEG QA CI / Deploy development (pull_request) Has been skipped
EEG QA CI / Detectar o que mudou (pull_request) Successful in 15s
EEG QA CI / Build e publicação de imagens (pull_request) Successful in 57s
EEG QA CI / Deploy production (pull_request) Has been skipped
EEG QA CI / Backend (pull_request) Successful in 1m17s
EEG QA CI / Frontend (pull_request) Successful in 2m6s
953b0f0b30
Job unico "validate-and-build" virou 4 jobs:

- "changes": detecta o que mudou (git diff contra o SHA base da PR, ou
  contra o commit anterior em push) e expoe backend/frontend como
  true/false. Em caso de duvida (primeiro commit de uma branch,
  force-push, workflow_dispatch, ou mudanca no proprio ci.yml) roda os
  dois -- nunca pula por engano.
- "backend": so entra se `changes.outputs.backend == 'true'`. Mesmos
  steps de sempre (venv/pip/pytest/restore drill/deployment script
  tests).
- "frontend": so entra se `changes.outputs.frontend == 'true'`. Mesmos
  steps de sempre (npm ci/audit/typecheck/lint/test/build). Roda em
  PARALELO com "backend" (job separado, nao mais sequencial dentro do
  mesmo job) -- ganho de tempo de parede quando os dois precisam rodar.
- "build-and-publish": sempre roda (constroi e publica as 3 imagens
  juntas, mesma tag de SHA -- evita ter que decidir "qual tag antiga
  reaproveitar" pra imagem que nao mudou). So bloqueia se backend/
  frontend de fato FALHOU; "skipped" (o lado que nao mudou) nao impede
  este job.

"deploy-production"/"deploy-development" passam a depender de
"build-and-publish" (renomeado de "validate-and-build").

Maioria das PRs deste repo mexe só num lado -- pular o lado que não
mudou reduz o tempo de CI pra essas PRs sem perder cobertura (o lado
tocado sempre roda).

docs/DEPLOYMENT.md atualizado pra citar o novo nome/fluxo dos jobs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
jhony75 merged commit 3f230401c1 into develop 2026-09-10 11:40:09 -03:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
jhony75/eeg-qa!54
No description provided.