Skip to content

ci: CD da Buzzlabs — build da imagem e bump no Infra a cada commit na develop - #19

Merged
zZMathSP merged 3 commits into
developfrom
feat/buzzlabs-cd
Sep 11, 2026
Merged

ci: CD da Buzzlabs — build da imagem e bump no Infra a cada commit na develop#19
zZMathSP merged 3 commits into
developfrom
feat/buzzlabs-cd

Conversation

@zZMathSP

Copy link
Copy Markdown
Collaborator

Mesmo fluxo que o fork Buzzlabs/element-web já usa desde 2026-09-11. Par deste PR: Buzzlabs/Infra#71.

push na develop
  → runner ubuntu-24.04 do GitHub
  → build de infra/synapse-docker/Dockerfile
  → docker.buzzlabs.com.br/synapse:<AAAAMMDD-HHMMSS-sha7>
  → commit `deploy(synapse): <tag>` na main do Buzzlabs/Infra
  → ArgoCD sincroniza o app matrix-buzzlabs (matrix.buzzlabs.com.br)

Só o matrix-buzzlabs é bumpado. O synapse do ns default (nexojornal) segue em :latest com bump manual — é produção de cliente.

O que muda no modelo de deploy

Hoje os três containers de synapse referenciam docker.buzzlabs.com.br/synapse sem tag (= :latest) com imagePullPolicy: Always, ou seja: o deploy acontece por restart de pod, não por git. É o risco 7 do hetzner/STATE.md.

O primeiro run deste CD converte a linha do matrix-buzzlabs para tag datada — por isso o PR do Infra não pina tag nenhuma, e não há problema de galinha-e-ovo com uma tag que ainda não existe no registry.

Diferenças em relação ao workflow do element-web

  • Dockerfile é o de vocês (infra/synapse-docker/), não o do upstream: instala matrix-synapse[all] do PyPI e sobrepõe o código do fork com pip install -e.
  • Sem o passo git checkout --detach — aquilo existia por causa do docker-link-repos.sh do element-web, que não tem equivalente aqui.
  • Cache type=gha via build-push-action, e não docker buildx cru: o backend de cache do GitHub precisa do ACTIONS_RUNTIME_TOKEN, que não chega ao shell de um run:. Vale a pena aqui porque este build compila a extensão Rust; no element-web o build a frio eram 3min e o cache não se pagava. Os pins de docker/* são os que este repo já usa no docker.yml.

O resto é idêntico: guarda de ref, concurrency com coalescing, token escopado da App (permission-contents: write), push com retry. zizmor limpo.

O que não consegui validar

Tentei buildar localmente e o disco da VM do Docker estourou na etapa 7 de 13. Ficou validado até o pip install matrix-synapse[all] (resolveu deps e compilou wheels); não ficaram validados os COPY do código do fork e o pip install -e /app que compila o Rust.

O primeiro run do CD é o teste. Se falhar, falha sem estrago: sem imagem publicada, sem bump, sem deploy — só um job vermelho.

⚠️ Atenção no merge

O deployment do matrix-buzzlabs tem strategy: Recreate (PVC RWO): o pod velho morre antes do novo subir. Imagem quebrada = indisponibilidade do Matrix interno, não rollout parado. O readinessProbe não protege contra isso. Rollback = reverter o commit deploy(synapse): … no Infra.

🤖 Generated with Claude Code

zZMathSP and others added 3 commits September 11, 2026 15:48
… develop

Mesmo fluxo já em uso no fork Buzzlabs/element-web: builda
infra/synapse-docker/Dockerfile, empurra
docker.buzzlabs.com.br/synapse:<AAAAMMDD-HHMMSS-sha7> e commita o bump da tag
na main do repo Infra — o deploy em si é do ArgoCD (app matrix-buzzlabs /
matrix.buzzlabs.com.br).

Runner do GitHub, não o ARC do Hetzner: este repo é público e grupo de runner
de organização não atende repositório público.

Cache no cache do GitHub via build-push-action (e não `docker buildx` cru, que
não enxerga o ACTIONS_RUNTIME_TOKEN): o build compila a extensão Rust e instala
matrix-synapse[all], e empurrar isso por commit para o registry do Hetzner o
faria crescer sem GC.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
O deployment do matrix-buzzlabs tem `strategy: Recreate` (PVC RWO): imagem
quebrada derruba o Matrix interno em vez de travar o rollout e preservar o pod
antigo. Buildar no PR (amd64, sem push, sem segredos) é o que impede isso de
ser descoberto em produção.

Também valida este próprio PR — eu não tinha conseguido buildar localmente (o
disco da VM do Docker estourou, e a máquina é arm64 enquanto o CI é amd64).

A concurrency sai do nível do workflow para o do job: o build-check cancela o
run anterior do mesmo PR, enquanto o deploy nunca cancela um run em andamento.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
O lint-newsfile do upstream exige changelog.d/<numero do PR>.<tipo> em todo PR
que toque algo fora de debian/. Sem ele os agregadores linting-done e tests-done
ficam vermelhos.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@zZMathSP
zZMathSP merged commit 5228f1c into develop Sep 11, 2026
31 checks passed
@zZMathSP
zZMathSP deleted the feat/buzzlabs-cd branch September 11, 2026 21:54
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.

1 participant