feat: componente pulumi, stacks e smoke da stack dev em kind - #28
Merged
Merged
Conversation
4 tasks done
4 tasks done
NicolasArthurDev
left a comment
Contributor
There was a problem hiding this comment.
Depende do #24, que precisa entrar antes.
Resolver antes do merge
- Tamanho. São 62 arquivos e cerca de 2,6 mil linhas, misturando a troca do SQLite pelo Postgres, a config por variável de ambiente, o subcomando migrate, Pulumi e kind, a troca do Docker Hub pelo GHCR e docs. O próprio checklist deixa "PR pequeno" desmarcado. Sugiro separar pelo menos em: (a) storage, config e migrate; (b) Pulumi, kind e o workflow da stack dev; (c) release no GHCR.
- Arquivo que entrou por engano. O
docs/release-notes-v1.0.0-rc.1.mdveio no commit 1335404 (docs: troca o cloudnativepg pelo postgres no namespace), que não tem relação com ele. O conteúdo está desatualizado: fala em SQLite e na imagemriedelgab/ifsces2do Docker Hub. Ele não existe em main nem em dev. - A imagem do GHCR provavelmente não baixa em produção. Pacote de organização no GHCR nasce privado, e o componente não declara
imagePullSecrets. A prod deve ficar em ImagePullBackOff. Ou o pacote vira público, ou o componente passa a aceitar um pull secret. - Gateway próprio nas portas 80/443 no cluster de produção. Precisa ser confirmado: com o Cilium em hostNetwork, um segundo Gateway nas mesmas portas do Gateway que o cluster já tem pode conflitar. A prod também já tem ClusterIssuer. Vale oferecer a opção de pendurar o HTTPRoute no Gateway compartilhado (
parentRefsde outro namespace) em vez de criar Gateway e Issuer próprios.
Médio
- Postgres do StatefulSet (
deploy/pulumi/database.go):- sem requests e limits e sem liveness probe;
- sem securityContext, então o entrypoint roda como root e o pod é recusado se o namespace aplicar PodSecurity
restricted; - a tag
postgres:17-alpineé flutuante e se repete no componente, no compose e no testcontainers.
- API sem requests e limits em
deploy/pulumi/workload.go. deploy-dev.yml: o nome diz deploy, mas o workflow só faz o smoke. Roda um kind de 5 minutos em todo PR, inclusive nos que só mexem em docs. Faltapaths:.- Config:
MARKUPP_MAX_NOTE_SIZE=0ou negativo cai no default sem avisar, enquantoMARKUPP_PORT=0ou negativo é aceito. Melhor validar a faixa e devolver erro com o valor recebido. OLoadtambém passa de 20 linhas. - Makefile: o
allainda fazdocker-upantes dotest, mas otestagora roda no host com testcontainers.
Menor
- Mensagem do
validate(): quando faltaacmeEmail, a mensagem não trazcertificateIssuernemacmeEmail, só namespace, image e host. - Réplicas: com
withDefaults,apiReplicas: 0vira 2, então não dá para pedir zero réplicas. - Migração editada no lugar: a
00001trocou TIMESTAMP por TIMESTAMPTZ sem migração nova. Só funciona porque ainda não existe banco Postgres; vale registrar isso na descrição. - TDD por commit: alguns
feat:vieram sem umtest:antes (compose, cluster kind, stacks).
O que está bom
Os testes do componente Pulumi usam um monitor falso com nome, o storagetest cria um banco por teste e garante isolamento, e a migração saiu do boot para um Job. O controle de versão já trunca timestamp em milissegundo, então não há falso 409 com o Postgres.
NicolasArthurDev
requested changes
Oct 2, 2026
thnbi
force-pushed
the
feat/infra-kubernetes
branch
from
October 2, 2026 22:42
5386cd9 to
f23d4f3
Compare
This was referenced Oct 2, 2026
thnbi
changed the base branch from
docs/escala-a-zero-com-keda
to
feat/servidor-postgres
October 2, 2026 22:42
NicolasArthurDev
approved these changes
Oct 2, 2026
NicolasArthurDev
left a comment
Contributor
There was a problem hiding this comment.
Ficou bem melhor depois de quebrar o PR, parabéns! A opção existingGateway com testes para cada caso, o zero réplicas, a versão fixa do Postgres e o workflow de smoke com filtro de paths: resolveram tudo o que eu tinha comentado.
Sugestões para um próximo PR, sem bloquear:
- A stack em
deploy/stacks/Pulumi.yamlainda não expõeexistingGateway, então a prod continua criando Gateway próprio. Vale expor quando a escolha do Gateway da prod for confirmada. - Requests, limits e securityContext no Postgres e na API deixam o deploy pronto para um namespace com PodSecurity
restricted.
Aprovado.
This was referenced Oct 2, 2026
Closed
3 of 4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
O que mudou
deploy/pulumi: PostgreSQL no namespace (ou banco externo por URL), Job de migração, API, e entrada por Gateway API, com Gateway e Issuer próprios ou pendurada num Gateway existentedeploy/stackscom as stacks dev e proddeploy/kindcom os requisitos do cluster de produção (Cilium em hostNetwork, Gateway API, cert-manager):make smoke-kind,make kind-up,make kind-painel,make kind-downFixes #30
Fixes #31
Por quê
Respostas à revisão
docs/release-notes-v1.0.0-rc.1.mdsaiu: tinha entrado por enganoexistingGateway, que cria só o HTTPRoute; a stack prod passa a usá-lo quando o admin do cluster oferecer um Gateway compartilhadoimagePullSecrets17.9-alpine3.23, igual ao compose e aos testes;apiReplicas: 0passa a ser aceito; a mensagem de campo vazio traz emissor e email ACME; o workflow virousmoke-dev.ymlcompaths:Pendente, de propósito
Como testar
make smoke-kind(precisa de Docker, kind, helm, kubectl e Pulumi)make kind-upemake kind-painelpara acompanhar no Headlamp;make kind-downno fimcd deploy/pulumi && go test ./...Auto-review (checklist)