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.

소스 정보

저장소
Azure/apiops-cli
최근 소스 활동
2026년 6월 29일 17:47
감지된 SKILL.md 언어
영어
스타
34
포크
14

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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.
GitHub에서 보기