Skip to content

feat(cli): tokens e blocos condicionais pro ci.yml render por repo#28

Merged
rlueder merged 1 commit intomainfrom
feat/ci-template-conditional-packages
Apr 24, 2026
Merged

feat(cli): tokens e blocos condicionais pro ci.yml render por repo#28
rlueder merged 1 commit intomainfrom
feat/ci-template-conditional-packages

Conversation

@rlueder
Copy link
Copy Markdown
Member

@rlueder rlueder commented Apr 24, 2026

Contexto

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 não eram renderizados por nenhum token. Rodar precisa sync em qualquer consumer (datasus-*, medbench-brasil, etc.) quebrava o ci.yml de duas formas: sobrescrevia a lista de pacotes com algo errado, e deixava placeholders literais no deploy-site.

Mudanças

1. Schema .precisa.json

Três campos novos, validados:

  • publishPackages: string[] — obrigatório quando publishesToNpm: true
  • siteProjectName: string — obrigatório quando hasSite: true
  • siteFilter: string — obrigatório quando hasSite: true

2. Tokens novos em tokenContext()

  • PUBLISH_PACKAGES_YAML — joina entradas com \n (newline + 8 espaços) pra caber sob packages: |
  • SITE_PROJECT_NAME, SITE_FILTER — valor direto

3. Blocos condicionais no template engine

# {{#if PUBLISHES_TO_NPM}}
...bloco renderizado só quando truthy...
# {{/if}}

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.yml refatorado

  • PUBLISH_PACKAGES_YAML substitui o package list hardcoded
  • {{#if PUBLISHES_TO_NPM}}...{{/if}} gateia release + publish
  • {{#if HAS_SITE}}...{{/if}} gateia deploy-site com SITE_PROJECT_NAME e SITE_FILTER

Plano de teste

Testado end-to-end rendando contra três perfis sintéticos:

  • dbc-like (publishesToNpm: true, hasSite: false, publishPackages: ["packages/dbc"]): publish com package correto, sem deploy-site
  • viz-like (publishesToNpm: true, hasSite: true, siteProjectName, siteFilter): publish + deploy-site com valores do manifest
  • scripts-only (publishesToNpm: false, hasSite: false): só checks + review
  • Typecheck passa
  • Prettier parseia o template sem erro

Follow-up

Consumers (datasus-dbc, datasus-sdk, datasus-viz, datasus-parquet, fhir-brasil, medbench-brasil) precisam adicionar os 3 campos em .precisa.json antes de rodar precisa sync. Vou abrir PR per-repo após o merge desse.

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.
@github-actions
Copy link
Copy Markdown

Automated Review — Round 1

Summary

The 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

  • Added conditional block processing to templates.
  • Enhanced manifest interface to include new properties.
  • Improved validation logic for manifest properties.

🔍 Found 3 suggestions (see inline comments)

Reviewed by OpenAI gpt-4o-mini (fallback) | 2,432 in / 255 out | $0.0005 — Round 1 of 2

Comment thread packages/cli/src/manifest.ts
Comment thread templates/github/workflows/ci.yml
@rlueder rlueder merged commit 5e81d75 into main Apr 24, 2026
10 checks passed
@rlueder rlueder deleted the feat/ci-template-conditional-packages branch April 24, 2026 22:32
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))
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
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.
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant