feat(cli): tokens e blocos condicionais pro ci.yml render por repo#28
Merged
feat(cli): tokens e blocos condicionais pro ci.yml render por repo#28
Conversation
O template ci.yml tinha hardcoded o package list do fhir-brasil
(packages/core + packages/calculators) e um deploy-site block com
placeholders {{PROJECT_NAME}}/{{SITE_FILTER}} que nao eram renderizados.
Consequencia: precisa sync quebrava ci.yml em qualquer repo consumidor.
Mudancas:
1. Schema .precisa.json ganha tres campos:
- publishPackages: string[] (obrigatorio quando publishesToNpm: true)
- siteProjectName: string (obrigatorio quando hasSite: true)
- siteFilter: string (obrigatorio quando hasSite: true)
2. tokenContext() novos:
- PUBLISH_PACKAGES_YAML — joina entradas com newline+8espacos pra
caber sob packages: |. Primeiro entry fica no slot indentado do
template; os demais replicam o indent.
- SITE_PROJECT_NAME, SITE_FILTER — valor direto
3. Preprocessador de blocos condicionais no template engine:
# {{#if PUBLISHES_TO_NPM}}
...bloco renderizado so quando truthy...
# {{/if}}
Marcadores ficam dentro de comentario da linguagem host (prefixo #
ou // ou qualquer coisa antes do {{), mantendo o template valido
pra syntax-aware tools (prettier). Truthy = nao-vazio e != false.
Blocos aninhados resolvem via fixed-point loop.
4. Template ci.yml usa PUBLISH_PACKAGES_YAML pra lista e {{#if}}
pra gatear release+publish (PUBLISHES_TO_NPM) e deploy-site (HAS_SITE).
Testado end-to-end contra tres perfis sinteticos:
- dbc-like (npm, sem site): publish com package correto, sem deploy
- viz-like (npm + site): publish + deploy-site com project_name e
site_filter vindos do manifest
- scripts-only (nem npm nem site): so checks + review
Follow-up: consumers precisam adicionar os 3 campos em .precisa.json
antes de rodar precisa sync; PRs per-repo virao.
Automated Review — Round 1SummaryThe PR introduces new functionality for rendering templates with conditional blocks and improves the manifest validation mechanism. Overall, it enhances both the template processing logic and the configuration validation process. Changes
🔍 Found 3 suggestions (see inline comments) Reviewed by OpenAI gpt-4o-mini (fallback) | 2,432 in / 255 out | $0.0005 — Round 1 of 2 |
precisa-saude-release-bot Bot
pushed a commit
that referenced
this pull request
Apr 24, 2026
## [1.7.0](v1.6.1...v1.7.0) (2026-04-24) ### Features * **cli:** tokens e blocos condicionais pro ci.yml render por repo ([#28](#28)) ([5e81d75](5e81d75)), closes [#if](https://github.com/Precisa-Saude/tooling/issues/if) ### Chores * **templates:** remover deployments: write nao utilizado do ci.yml ([#27](#27)) ([68aed4b](68aed4b)) * **templates:** remover shamefully-hoist=false do .npmrc ([#26](#26)) ([d489412](d489412))
2 tasks
rlueder
added a commit
to Precisa-Saude/datasus-dbc
that referenced
this pull request
Apr 24, 2026
Adiciona publishPackages ao .precisa.json (exigido agora que o template
gateia o publish job via {{#if PUBLISHES_TO_NPM}} e renderiza o package
list via {{PUBLISH_PACKAGES_YAML}} — ver Precisa-Saude/tooling#28).
Sync tambem aplica as mudancas pendentes de template no repo:
- ci.yml: remove deployments: write nao utilizado (tooling#27),
atualiza comentario da secao de customizacao per-repo
- publish-tag.yml: adiciona --if-present no pnpm -r exec
2 tasks
rlueder
added a commit
to Precisa-Saude/datasus-sdk
that referenced
this pull request
Apr 24, 2026
Adiciona publishPackages ao .precisa.json (exigido pelo novo template
com {{#if PUBLISHES_TO_NPM}} + {{PUBLISH_PACKAGES_YAML}}, ver
Precisa-Saude/tooling#28).
Sync aplica pendencias de template:
- ci.yml: remove deployments: write (tooling#27), atualiza comentario.
- publish-tag.yml: adiciona --if-present no pnpm -r exec.
Preserva eslint.config.js local (override para scripts de manutencao
em packages/core/scripts/**); divergencia agora documentada em AGENTS.md.
3 tasks
rlueder
added a commit
to Precisa-Saude/datasus-viz
that referenced
this pull request
Apr 24, 2026
…e refresh (#19) Adiciona tres campos ao .precisa.json exigidos pelo novo template do ci.yml (Precisa-Saude/tooling#28): - publishPackages: ["packages/cli"] (so o CLI publica; site e private) - siteProjectName: "datasus-viz" - siteFilter: "@datasus-viz/site" Sync entao gera: - ci.yml com publish correto, release condicionado em publishesToNpm e deploy-site condicionado em hasSite (com os valores do manifest) - .github/workflows/_deploy-site.yml (novo, reusable) pra Cloudflare Pages + Slack - .claude/settings.json (novo) — baseline compartilhado do tooling Esse PR foca so em .precisa.json + workflows + settings.json; outras divergencias detectadas pelo doctor (tsconfig, eslint, governance docs, issue templates) ficam pra follow-up caso o time queira convergi-las.
precisa-saude-release-bot Bot
pushed a commit
to Precisa-Saude/datasus-viz
that referenced
this pull request
Apr 24, 2026
## [1.3.2](v1.3.1...v1.3.2) (2026-04-24) ### Bug Fixes * **ci:** usar contexto do repo atual no pr-review-responder ([#17](#17)) ([fae51eb](fae51eb)) ### Refactoring * **site:** mover packages/site → site/ pra alinhar com o ecossistema ([#22](#22)) ([b11b96b](b11b96b)) ### Documentation * **site:** remover referencias obsoletas a datasus-brasil e branch PRE-206 ([#16](#16)) ([a2e73a5](a2e73a5)) ### Chores * **config:** precisa sync — governance/issue/PR templates ([#20](#20)) ([47ada22](47ada22)) * **config:** precisa sync — publishPackages + site wiring + template refresh ([#19](#19)) ([669f0f7](669f0f7)), closes [Precisa-Saude/tooling#28](Precisa-Saude/tooling#28) * **config:** remover shamefully-hoist=false do .npmrc ([#18](#18)) ([2022034](2022034)), closes [Precisa-Saude/tooling#26](Precisa-Saude/tooling#26) * **config:** siteSourcePath=packages/site/ + sync do _deploy-site ([#21](#21)) ([9046862](9046862)), closes [Precisa-Saude/tooling#29](Precisa-Saude/tooling#29)
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.
Contexto
O template
ci.ymltinha hardcoded o package list do fhir-brasil (packages/core+packages/calculators) e umdeploy-siteblock com placeholders{{PROJECT_NAME}}/{{SITE_FILTER}}que não eram renderizados por nenhum token. Rodarprecisa syncem qualquer consumer (datasus-*, medbench-brasil, etc.) quebrava oci.ymlde duas formas: sobrescrevia a lista de pacotes com algo errado, e deixava placeholders literais nodeploy-site.Mudanças
1. Schema
.precisa.jsonTrês campos novos, validados:
publishPackages: string[]— obrigatório quandopublishesToNpm: truesiteProjectName: string— obrigatório quandohasSite: truesiteFilter: string— obrigatório quandohasSite: true2. Tokens novos em
tokenContext()PUBLISH_PACKAGES_YAML— joina entradas com\n(newline + 8 espaços) pra caber sobpackages: |SITE_PROJECT_NAME,SITE_FILTER— valor direto3. Blocos condicionais no template engine
Marcadores ficam dentro de comentário da linguagem host (prefixo
#,//, ou qualquer coisa antes do{{), então o template permanece válido pra syntax-aware tools (prettier parseia o YAML inteiro sem reclamar). Truthy = não-vazio e diferente de"false". Blocos aninhados resolvem via fixed-point loop.4. Template
ci.ymlrefatoradoPUBLISH_PACKAGES_YAMLsubstitui o package list hardcoded{{#if PUBLISHES_TO_NPM}}...{{/if}}gateiarelease+publish{{#if HAS_SITE}}...{{/if}}gateiadeploy-sitecomSITE_PROJECT_NAMEeSITE_FILTERPlano de teste
Testado end-to-end rendando contra três perfis sintéticos:
publishesToNpm: true,hasSite: false,publishPackages: ["packages/dbc"]): publish com package correto, sem deploy-sitepublishesToNpm: true,hasSite: true,siteProjectName,siteFilter): publish + deploy-site com valores do manifestpublishesToNpm: false,hasSite: false): só checks + reviewFollow-up
Consumers (datasus-dbc, datasus-sdk, datasus-viz, datasus-parquet, fhir-brasil, medbench-brasil) precisam adicionar os 3 campos em
.precisa.jsonantes de rodarprecisa sync. Vou abrir PR per-repo após o merge desse.