Runtime env (INT_*) — fail-safe¶
Problema que isto resolve¶
O Angular em produção lê window.env de um script gerado no boot a partir de ECOSIF_* → INT_* → envsubst em env.prod.js.
Se o nginx/CDN cachear /assets/env.js como asset estático (expires 1y / immutable), o browser pode ficar com um valor antigo (ex.: hideAdminMenu=true) enquanto a task ECS e o config.json / runtime-flags.json já mostram false.
Query string (?v=) não basta se o gateway/CDN indexar só pelo path e ignorar a query — o corpo antigo de /assets/env.js continua a ser servido.
Fluxo canónico¶
ECOSIF_* (task / compose)
→ ecosif-env-map.sh (INT_*)
→ envsubst(config.template.json) → config.json
→ envsubst(env.prod.js) → assets/env.js (canónico)
→ force booleans INT_* → env.js
→ asserts fail-fast (placeholders + booleans INT_* ↔ ficheiros)
→ runtime-flags.json + system-env.json (SHOWVARS+DEBUG)
→ copia → assets/env-runtime-<versao>-<UTC>.js (path ÚNICO por boot)
→ index.html: <script src="assets/env-runtime-…js">
→ nginx ^~ /assets/env* com Cache-Control: no-store
→ browser: window.env / AppConfig
Garantias no boot (contentor não sobe se falhar)¶
- Templates
env.prod.jseconfig.template.jsonainda contêm${INT_*}obrigatórios (detecta imagem “assada”). - Após
envsubst, não restam${. - Literais booleanos em
env.jseconfig.jsoniguais aosINT_*(hideAdminMenu,showVars,debug, auth flags, …). config.features.hideAdminMenuespelhaenv.jshideAdminMenu.index.htmlcarregaenv-runtime-<versao>-<boot>.js(path novo a cada boot → CDN não reutiliza/assets/env.jsantigo).- Menu admin no layout prefere
config.json(AppConfig.isAdminMenuHidden) com fallback awindow.env.
Como conferir se a imagem nova subiu (sem shell no contentor)¶
O tag Itaú (ecosif-webapp-dev:v0.1.0-<hash>) é alias interno; o hash não é o SHA do repo ds-ecosif-angular. Use estes sinais:
- View Source / Network do HTML (
/): Cache-Control: no-store…emindex.html<script src="assets/env-runtime-…js">(nãoassets/env.jssozinho nem só?v=)- Network desse
env-runtime-…js: Cache-Control: no-store…- linha
hideAdminMenucom"false"quando a task temECOSIF_ANGULAR_HIDE_ADMIN_MENU=false - Abrir
/assets/config/runtime-flags.json(404 = imagem sem o fail-safe): flags.hideAdminMenu,source: env.js- Overlay SHOWVARS:
INT_HIDE_ADMIN_MENU=falseeruntime_served.hideAdminMenu=false - Se o script ainda for
assets/env.jssemenv-runtime-→ build/deploy não inclui o entrypoint novo.
Checklist pós-deploy¶
- Publicar imagem Angular com este código + bump
ECOSIF_VERSION/appVersionvisível. - Purge CDN/gateway de
/,/index.html,/assets/env.jsse existir cache à frente (opcional após fingerprint). - Uma vez: hard refresh ou janela anónima.
- Login ADMIN + menu Ferramentas Administrativas visível.
Variável¶
| Sistema | Interna | Efeito |
|---|---|---|
ECOSIF_ANGULAR_HIDE_ADMIN_MENU |
INT_HIDE_ADMIN_MENU |
window.env.hideAdminMenu, config.features.hideAdminMenu, menu admin |
Testes locais dos asserts¶
sh conf/scripts/tests/test-ecosif-env-assert.sh