Skip to main content

update-config-schema-version

Bump the filter/override JSON Schema version (schemas/v<N>) and update every reference so docs, Copilot prompts, init-generated configs, and tests point at the new version. Use when changing the configuration.extractor.yaml / configuration.<env>.yaml schema shape, introducing a breaking schema change, or when 'schemaVersion' in package.json needs to move.

Datos de origen

Repositorio
Azure/apiops-cli
Última actividad en el origen
29 de junio de 2026 a las 17:47
Idioma detectado de SKILL.md
inglés
Estrellas
31
Forks
12

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
update-config-schema-version
description
Bump the filter/override JSON Schema version (schemas/v<N>) and update every reference so docs, Copilot prompts, init-generated configs, and tests point at the new version. Use when changing the configuration.extractor.yaml / configuration.<env>.yaml schema shape, introducing a breaking schema change, or when 'schemaVersion' in package.json needs to move.
domain
configuration-schema
confidence
high
source
manual + observed from schemas/v1 layout and schema-ref.ts/generate-schemas.mjs wiring
## Context The filter (extractor) and override config JSON Schemas are versioned **independently of the CLI package version**. Each schema version lives at a frozen path `schemas/v<N>/` on the `main` branch: - **Backward-compatible edits** (add an optional field, loosen validation): keep the same version and regenerate in place. - **Breaking changes** (rename/remove a field, tighten validation): introduce a **new** version folder `schemas/v<N+1>/` and leave the old folder frozen so existing config files keep resolving against the shape they were written for. The single source of truth is `schemaVersion` in [`package.json`](../../../package.json). ## What updates automatically (do NOT hand-edit) Both of these read `schemaVersion` at build time — bumping `package.json` is enough for them: - [`scripts/generate-schemas.mjs`](../../../scripts/generate-schemas.mjs) — writes the schema files to `schemas/v<N>/` and stamps the `$id` URL. - [`src/templates/configs/schema-ref.ts`](../../../src/templates/configs/schema-ref.ts) — builds the `# yaml-language-server: $schema=` URL injected into the `apiops init` generated configs (`filter-config.yaml` / `override-config.yaml` templates use the `{{SCHEMA_URL}}` placeholder). Regenerating happens on `prebuild` / `prelint` / `pretest`, or run manually: ```bash node scripts/generate-schemas.mjs && node scripts/embed-markdown-templates.mjs ``` ## What must be updated by hand These hardcode `schemas/v<N>/` and will NOT change on their own. Update every one to the new version. Find them all first: ```bash grep -rn "schemas/v[0-9]" \ src/templates docs tests \ | grep -v node_modules ``` Files that reference the version directly today: 1. **Copilot prompt templates** (embedded into the package — must be edited at the source, then re-embed): - [`src/templates/copilot/configure-filter-prompt.md`](../../../src/templates/copilot/configure-filter-prompt.md) → `schemas/v<N>/extractor-config.schema.json` - [`src/templates/copilot/configure-overrides-prompt.md`](../../../src/templates/copilot/configure-overrides-prompt.md) → `schemas/v<N>/override-config.schema.json` 2. **Docs**: - [`docs/guides/filtering-resources.md`](../../../docs/guides/filtering-resources.md) (the `$schema` example line and the "published at `schemas/v<N>/...`" link) - [`docs/guides/environment-overrides.md`](../../../docs/guides/environment-overrides.md) (two `$schema` example lines and the "published at `schemas/v<N>/...`" link) 3. **Unit tests** (assert the rendered schema URL): - [`tests/unit/templates/configs/config-templates.test.ts`](../../../tests/unit/templates/configs/config-templates.test.ts) (`expect(config).toContain('schemas/v<N>/extractor-config.schema.json')` and the override equivalent) ## Procedure ### 1) Decide compatible vs breaking - **Backward-compatible:** keep `schemaVersion` as-is, edit `src/models/config.ts`, regenerate, done. No reference updates needed. - **Breaking:** bump `schemaVersion` and continue below. ### 2) Bump the source of truth ```jsonc // package.json "schemaVersion": "2", ``` ### 3) Regenerate derived artifacts ```bash node scripts/generate-schemas.mjs # creates schemas/v2/*.schema.json node scripts/embed-markdown-templates.mjs # re-embeds prompt md after step 4 ``` `schemas/v2/` is created; **keep `schemas/v1/` in place** (frozen for existing configs). Do not delete the old version folder. ### 4) Update every hardcoded reference Edit each file listed in "What must be updated by hand" to `v2`, then re-run the embed script so the prompt changes land in `src/templates/generated/embedded-markdown.ts`. ### 5) Verify nothing still points at the old version unintentionally ```bash # Should only match the intentionally-frozen old folder and any "previous # version" historical notes — not docs/prompts/tests describing the current shape. grep -rn "schemas/v1" src docs tests scripts ``` ### 6) Build and test ```bash npm run build npx vitest run tests/unit/templates/configs/config-templates.test.ts \ tests/integration/package-build/package-build.test.ts ``` The package-build integration test confirms the embedded templates (including the updated prompts) ship in the npm pack output. ## Gotchas - The `schemas/v<old>/` folder is intentionally retained on a breaking bump — removing it breaks configs already pinned to that version. - Prompt `.md` edits do nothing until `embed-markdown-templates.mjs` re-runs and the project rebuilds; the embedded constant is what ships, not the raw file. - `apiops init` output needs no manual change — it derives the URL from `schemaVersion` via `schema-ref.ts`. - Keep `package.json schemaVersion` a bare integer string (`"2"`), not `"v2"`; the `v` prefix is added by the scripts.
Ver en GitHub