Produção e staging com serviços, sites e backends separados.
Do boilerplate aos dois ambientes publicados.
GH Hub com staging e produção no projeto próprio, acesso externo controlado, CRUD de usuários com shadcn e correções reutilizáveis incorporadas ao template no GitHub.
gh-hub-v1, na organização Dudata, com faturamento ativo.
Correções genéricas mescladas às 16:08 BRT, com CI concluída.
Ambientes entregues
| Ambiente | Entrada pública | Cloud Run · southamerica-east1 | Convex isolado |
|---|---|---|---|
| Produção | gh-hub-v1.web.app |
gh-hub-v1Revisão atual: gh-hub-v1-00002-9wd |
different-spoonbill-218 |
| Staging | gh-hub-v1-staging.web.app |
gh-hub-v1-stagingRevisão atual: gh-hub-v1-staging-00003-dpl |
earnest-porcupine-45 |
Ambos usam deployments Convex do tipo prod:. Os nomes staging/produção
representam ambientes da aplicação, com dados, configuração e credenciais separados.
Produção
Cliente Google e sessão próprios
Staging
Cliente Google e sessão próprios
GitHub Actions autentica no GCP por Workload Identity Federation restrita ao repositório e publica imagens via Artifact Registry. Produção promove o artefato de um SHA de main com release aprovado; staging recompila com suas URLs.
Correções no boilerplate
Autenticação pela origem pública
-
Proxy de autenticação no servidor de produção e rota de callback Google na origem
definida por
SITE_URL. -
Cookies de autenticação encapsulados em
__session, o cookie encaminhado pela fachada Firebase Hosting. - Clientes OAuth, callbacks e secrets de sessão separados por ambiente.
- Login Google disponível na aplicação; login por senha tratado como opção local explícita.
Clone, build e validação reproduzíveis
- Dockerfile inclui pacote backend e argumentos de build Convex; arquivos privados excluídos do contexto Docker.
-
Validador aceita deployments Convex
prod:; ajustes de catálogo e lockfile. - Tipos gerados de backend e árvore de rotas versionados; compilador backend incluído para CI em clone limpo.
-
Correções de tipos, lint e formatação, além de rota
/api/healthpara smoke tests.
Base inicial: a4276c9 — Boilerplate v1 (#54). Implementação da aplicação:
0ec90d7. Ajuste final para clone limpo: fc7672a.
Validação do deploy inicial
Versão do deploy inicial:
fc7672a5ec3d7b42ff8a1aa3c062e01d88e829c7.
| Verificação | Resultado registrado |
|---|---|
| CI e release build | CI: sucesso · Release build: sucesso |
| Publicação | Staging: sucesso · Produção: sucesso |
| Fachadas públicas |
Ambos os endpoints /api/health responderam HTTP 200 com
{"status":"ok"}.
|
| Login real no Helium | Conta Google Dudata autenticou em ambos; tela exibiu nome e e-mail. |
| Ciclo de sessão | Reload preservou a sessão; logout voltou à tela de login. Staging passou por novo login e manteve sessão após promoção final. |
| Gates locais | Instalação frozen, catálogo, lint/formatação, tipos web/backend, 10 testes e codegen Convex passaram. Imagem Docker respondeu a health e login antes do deploy. |
Acesso externo — entregue e validado
Produção e staging receberam a funcionalidade. A
PR #1 foi incorporada à
main como 91cf4d021a8a94aff0385e0a318a0e14e85c9628, versão runtime de
produção. Staging validou 6eef48526f9b8c015091fc970878e8117caf06d0; os dois
commits têm a mesma árvore de arquivos. O commit posterior 34981b4 registra
evidências, sem alterar o runtime publicado.
Cadastro simples e acesso controlado
- CRUD de usuários com componentes shadcn: cadastrar, consultar, editar, desativar e remover, além de provisionar senha e fazer reset pelo administrador.
-
Contas internas do domínio fixo
dudatacompany.comrecebem administração. Externos entram pela allowlist e não recebem administração. - Google Auth Platform configurado como Externo / Em produção, com homepage, aviso de privacidade e os dois domínios Firebase. O fluxo observado pediu apenas email, profile e openid.
- Login externo por Google ou senha provisionada; sem cadastro público aberto. Desativação e remoção revogam sessões e acesso com JWT anterior.
Testes finais
- 17 testes automatizados, catálogo, lint/formatação, tipos frontend/backend e build passaram. Revisão independente cobriu autorização, vínculo entre provedores e revogação.
- Staging: provisionamento por administrador, login externo por senha, administração negada ao externo e revogação de sessão/JWT após desativação e remoção.
- Reset no staging invalidou a senha antiga e aceitou a nova. A conta pessoal autorizada entrou também pelo Google, vinculada à mesma identidade; reload manteve a sessão sem administração.
- Login Google interno repetido com sucesso no staging. Em produção, login Google Dudata exibiu administração e CRUD com lista vazia. Health HTTP 200 nos dois ambientes.
| Etapa | Evidência |
|---|---|
| CI da feature | 36618396390 · sucesso |
| Staging | 36618358112 · sucesso |
| Release de produção | 36618928452 · sucesso |
| Produção | 36619317734 · sucesso |
Update no template GitHub
PR #66 · Backport deployment-ready Google auth and clean-clone checks
foi mesclada em 29/09/2026 às 16:08 BRT. Commit de merge:
15da1e1ed8d4d11622630df0df8bf75376993e96.
O que ficou reutilizável
-
Fluxo Google pela mesma origem e envelope
__session; tela genérica de login e conta. - Login local por senha restrito a loopback, com envio explícito de configuração runtime após iniciar o backend; seed recusa deploy keys.
- Checks reais de tipos em clone limpo, arquivos gerados, entradas Docker e health route.
- Referência de deploy manual com SHA validado, projeto GCP dedicado e destinos configuráveis para staging/produção.
- Terraform preserva configurações de revisão runtime gerenciadas pelo release; documentação de setup por clone.
Como foi validado
- Clone limpo, instalação frozen, catálogo, lint/formatação e build cliente/servidor.
- 12 testes, incluindo cookies OAuth, callback, signout e modos público/local.
- TypeScript frontend/backend; actionlint 1.7.7; Terraform fmt/validate com providers Google travados.
-
CI 36616972107: success, executada no head pré-merge
c1f5911.
O update do template não criou recursos nem fez deploy em cloud. Cada novo clone precisa configurar e validar os próprios ambientes; IDs e secrets da aplicação não foram incorporados ao template.
Correção de infraestrutura e limpeza
A implantação foi concentrada no projeto próprio gh-hub-v1, com as variáveis
dos environments GitHub corrigidas. Foram removidos de dudata-pocs os
recursos criados indevidamente nesta tarefa: dois serviços, repositório de imagens, WIF
pool, service account e bindings associados.
O inventário posterior preservou os serviços anteriores bancada-mcp,
bancada-web e web, os repositórios pocs e
bancada e a WIF pool github. As APIs compartilhadas permaneceram
habilitadas. O projeto vazio gh-hub-v1-staging foi marcado para exclusão; o
staging ativo está dentro de gh-hub-v1.
Credenciais OAuth e de sessão ficam nos deployments Convex; deploy keys ficam nos environments GitHub. Este relatório não contém segredos.
Fontes e rastreabilidade
- Registro final de acesso externo — publicação, autorização, testes reais e limpeza das contas de teste.
- Diagnóstico e correção de infraestrutura — registro inicial e evolução da decisão de projeto único.
- Registro final de validação — revisão publicada, runs, login no Helium e limpeza.
- Commit de implementação 0ec90d7 · Correção de CI fc7672a.
- PR do template #66 · Commit de merge · CI do template.