docs+infra: corrige status (JWT sem commit/contagem) + versão em DEV
build-and-promote / build (push) Failing after 29s
build-and-promote / promote (push) Has been skipped

- STATUS-SEGURANCA-E-PRODUCAO.md: a rotação do JWT_SECRET deixa de ser
  atribuída ao commit fcf2fb1 (que só remove .env/adiciona .dockerignore) —
  passa a constar como ação operacional na VPS, sem commit (segredo não
  versionado). Ajusta a contagem: 13 commits da sessão (inclui este doc),
  repo ahead 14 de origin/main (o 14º, docs/LEIA, é anterior à sessão).
- dev-build.sh: builda o ambiente de DEV injetando APP_VERSION/GIT_COMMIT/
  BUILD_TIME a partir do git (git describe), espelhando o deploy-prod.sh.
  /api/version em DEV deixa de mostrar apenas "dev".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Builder
2026-06-21 23:21:59 +02:00
parent 6adf353403
commit 8a27f3bc7c
2 changed files with 45 additions and 1 deletions
Executable
+40
View File
@@ -0,0 +1,40 @@
#!/usr/bin/env bash
# =============================================================================
# Build + sobe o ambiente de DEV (porta 8020 / dev.scoreodonto.com) carimbando
# a VERSÃO a partir do git — para que /api/version (e o rótulo no app) deixe de
# mostrar apenas "dev".
#
# Uso (NA VPS): ./dev-build.sh
#
# Diferença p/ produção: a prod consome imagem versionada e injeta a tag em
# runtime (deploy-prod.sh). Em DEV buildamos local, então derivamos a versão do
# git AQUI (no host, onde o .git existe) e passamos como build-args do compose.
# =============================================================================
set -euo pipefail
cd "$(dirname "$0")"
export DOCKER_HOST=unix:///run/user/1000/docker.sock
# Versão semântica + commit + carimbo de build, derivados do git.
# APP_VERSION -> ex.: v1.0.18-16-g6adf353 (tag mais próxima + distância + sha)
# GIT_COMMIT -> sha curto
export APP_VERSION="$(git describe --tags --always --dirty 2>/dev/null || echo dev)"
export GIT_COMMIT="$(git rev-parse --short HEAD 2>/dev/null || echo dev)"
export BUILD_TIME="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
export APP_ENV="DEV"
echo "──────────────────────────────────────────────────────────────"
echo " Build ScoreOdonto → DEV (porta 8020)"
echo " APP_VERSION = $APP_VERSION"
echo " GIT_COMMIT = $GIT_COMMIT"
echo " BUILD_TIME = $BUILD_TIME"
echo "──────────────────────────────────────────────────────────────"
docker compose up -d --build scoreodonto-backend scoreodonto-frontend nginx
echo
echo -n " versão no ar (DEV): "
sleep 8
curl -s --max-time 10 http://localhost:8020/api/version || echo "(ainda subindo — confira em alguns segundos)"
echo
echo "✅ DEV buildado com versão carimbada."
@@ -11,7 +11,7 @@
### 1. Segredos ### 1. Segredos
- **`JWT_SECRET` rotacionado em DEV e PRODUÇÃO** (recriado o backend na VPS1 na mesma tag, sem rebuild; - **`JWT_SECRET` rotacionado em DEV e PRODUÇÃO** (recriado o backend na VPS1 na mesma tag, sem rebuild;
`/api/health` e `/api/version` validados). → **vetor de tomada de conta FECHADO** (o segredo vazado não `/api/health` e `/api/version` validados). → **vetor de tomada de conta FECHADO** (o segredo vazado não
forja mais tokens). Commit `fcf2fb1`. forja mais tokens). **Ação operacional na VPS1 — sem commit** (o segredo não é versionado).
- **`backend/.env` fora do tracking do git** + `backend/.dockerignore` (o Dockerfile fazia `COPY . .` sem - **`backend/.env` fora do tracking do git** + `backend/.dockerignore` (o Dockerfile fazia `COPY . .` sem
`.dockerignore` → segredos iam para dentro da imagem) + `.env.example`. Commits `fcf2fb1`. `.dockerignore` → segredos iam para dentro da imagem) + `.env.example`. Commits `fcf2fb1`.
- **Senhas hardcoded removidas do `docker-compose.yml`**: banco via `SCOREO_DB_PASS` (com `:?` fail-fast); - **Senhas hardcoded removidas do `docker-compose.yml`**: banco via `SCOREO_DB_PASS` (com `:?` fail-fast);
@@ -89,7 +89,11 @@ do frontend, via 3 helpers: `requireCapability`, `requireCapabilityRow`, `requir
--- ---
## Commits locais da sessão (nenhum `push`, exceto JWT já aplicado em prod) ## Commits locais da sessão (nenhum `push`, exceto JWT já aplicado em prod)
> **13 commits desta sessão** (incluindo este documento) ainda **locais**. O repositório está
> `ahead 14` de `origin/main` — o 14º (`7c5b199 docs(LEIA)`) é anterior a esta sessão.
> A rotação do `JWT_SECRET` **não** está nesta lista (foi ação operacional na VPS, sem commit).
``` ```
6adf353 docs: status geral de segurança & produção (este documento)
f22e30e docs(skills): completa as 62 skills f22e30e docs(skills): completa as 62 skills
e83af04 docs(skills): biblioteca operacional e83af04 docs(skills): biblioteca operacional
5b99292 docs: auditoria funcional + estratégica 5b99292 docs: auditoria funcional + estratégica