Smoke test público y evidencia de release¶
La comprobación externa se ejecuta con scripts/run_public_smoke.py. Su objetivo
es demostrar que una instancia publicada responde desde fuera de Azure, tolera
el primer arranque y conserva un análisis sintético recuperable.
Configuración¶
Configura, únicamente en variables/secrets del entorno schemasafe-demo:
| Nombre | Tipo | Uso |
|---|---|---|
SCHEMASAFE_PUBLIC_URL |
variable | origen HTTPS del backend publicado, sin ruta ni credenciales |
SCHEMASAFE_PUBLIC_TOKEN |
secret del entorno schemasafe-demo |
token corto de rol analyst para public-demo y heterogeneous-age; nunca se entrega al frontend |
El token nunca se escribe en el artifact. La URL se valida como origen HTTPS y el workflow no se ejecuta si falta cualquiera de los dos valores.
Para generarlo localmente, usa la clave que también se configura como
SCHEMASAFE_AUTH_SIGNING_KEY en el entorno y ejecuta desde backend:
$env:AUTH_SIGNING_KEY_REF = "env:SCHEMASAFE_AUTH_SIGNING_KEY"
$env:SCHEMASAFE_AUTH_SIGNING_KEY = "<misma-clave-del-entorno>"
$env:PYTHONPATH = "."
python scripts/issue_token.py --subject public-reviewer --role analyst `
--project public-demo --resource heterogeneous-age --minutes 1440
El comando convierte automáticamente el nombre corto del recurso en el claim
RBAC public-demo:heterogeneous-age. No pegues la clave ni el token en el
repositorio, logs o chats; guarda solamente el resultado como secret
SCHEMASAFE_PUBLIC_TOKEN.
La imagen del backend incluye los fixtures sintéticos en /app/escenarios/fixtures.
El resolvedor acepta esa ruta de imagen y la ruta del checkout local, de modo que
el smoke puede ejecutar el mismo contrato en Azure y en desarrollo sin publicar
credenciales ni bases NoSQL.
Qué verifica¶
El runner registra latencias y estados de /health, /api/v1/readiness,
/api/v1/engines y /api/v1/operations. Luego envía una única propuesta
sintética sobre mongodb/heterogeneous-age y consulta el reporte por su id para
comprobar el read-after-write. La evidencia solo conserva campos operativos
seleccionados; no incluye cuerpos completos, headers, tokens, contraseñas ni
secretos.
El primer health y los reintentos de readiness disponen de una ventana de
arranque en frío de 120 segundos. Si readiness no llega a ready, falla el
workflow. El smoke no llama endpoints de escritura de los motores NoSQL: la
propuesta usa el contrato de inspección y fixture-first del backend. El
read-after-write demuestra persistencia observable por API; para afirmar que el
proveedor físico es PostgreSQL se debe conservar además la configuración segura
de CLOUD-05, porque ese dato no se expone al cliente público.
Ejecución manual¶
$env:SCHEMASAFE_PUBLIC_URL = 'https://<backend-publico>'
$env:SCHEMASAFE_PUBLIC_TOKEN = '<token-corto-de-demo>'
python scripts/run_public_smoke.py --output artifacts/public-smoke.json
En GitHub Actions, Public demo smoke se dispara manualmente o después de un
despliegue público exitoso. Si falta la configuración, la corrida queda
explícitamente bloqueada y no inventa una URL ni una evidencia. Cuando está
configurada, un fallo devuelve código distinto de cero, publica el artifact aun
en caso de error y bloquea la corrida de smoke que sirve como gate de release.
La evidencia local es temporal y no debe commitearse; el workflow la conserva como artifact con el id de la corrida, timestamps y latencias.