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
آخر نشاط في المصدر
٢٩ يونيو ٢٠٢٦ في ١٧:٤٧
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٣٤
التفرعات
١٤

خيارات التثبيت

يُحدَّد 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