feat: Extension gallery infrastructure + V2 schema - #1
Conversation
- Rename 'name' to 'title', 'publisher' to 'author' object - Support multiple install sources (installSources array) - Install types: winget, msstore, url with type-specific keys - Simplify id format to slug (no publisher prefix) - Drop version and license fields - Make category and tags optional - Rename sample extension folder accordingly - Update docs, schema, scripts, and PR template Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Sets up a GitHub-hosted “extension gallery” pipeline for Command Palette by standardizing the on-repo extension submission format (V2 schema) and adding CI automation to validate submissions and generate a single aggregated extensions.json endpoint.
Changes:
- Introduces a V2
extension.jsonschema (author object + multiple install sources) and updates docs/templates accordingly. - Adds PR-time validation and main-branch gallery generation workflows backed by Python scripts under
.github/scripts/. - Replaces the previous sample extension folder/metadata with a new
extensions/sample-extension/example and updates the generatedextensions.json.
Reviewed changes
Copilot reviewed 11 out of 13 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| extensions/sample-extension/icon.png | Adds an icon asset for the sample extension. |
| extensions/sample-extension/extension.json | Adds a V2-format sample extension submission. |
| extensions/microsoft.sample-extension/extension.json | Removes legacy V1 sample metadata. |
| extensions.json | Updates generated gallery output to V2 fields and new schema location. |
| docs/CONTRIBUTING.md | Updates contributor instructions to new folder/id conventions and V2 schema fields. |
| README.md | Updates repo structure + endpoint documentation to extensions.json at repo root. |
| .github/workflows/validate-pr.yml | Runs validator against changed extensions/** files in PRs using new script paths. |
| .github/workflows/generate-gallery.yml | Regenerates and commits extensions.json on merges to main. |
| .github/scripts/validate.py | Updates validator for new repo layout and V2 id rules. |
| .github/scripts/requirements.txt | Adds Python dependency pinning for validation/generation scripts. |
| .github/scripts/generate.py | Updates generator to output root extensions.json and new schema URL path. |
| .github/schemas/extension.schema.json | Defines the V2 extension submission JSON Schema. |
| .github/PULL_REQUEST_TEMPLATE.md | Updates submission checklist for new naming and install source types. |
Comments suppressed due to low confidence (4)
.github/scripts/validate.py:28
- The script’s ImportError guidance still references
pip install -r scripts/requirements.txt, but dependencies are now in.github/scripts/requirements.txt. Update that message so local runs point at the correct requirements file.
extensions.json:2 - The gallery
$schemaURL points at.github/schemas/gallery.schema.json, but that file does not exist in the repository. Either add the gallery schema at that path (and ensure it’s published onmain), or remove/update the$schemareference so it doesn’t 404.
.github/scripts/generate.py:25 GALLERY_SCHEMA_URLis set to${BASE_RAW_URL}/.github/schemas/gallery.schema.json, but there is nogallery.schema.jsonunder.github/schemas/in this repo. This makes the$schemavalue in the generatedextensions.jsonpoint to a non-existent URL; add the missing schema or adjust the URL/value accordingly.
.github/scripts/validate.py:16- The usage examples still reference
python scripts/validate.py ..., but the script now lives under.github/scripts/validate.py. Update the remaining usage lines so they match the new path to avoid confusing local runs and copy/paste instructions.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
| "type": "object", | ||
| "description": "An installation source.", | ||
| "required": ["type"], | ||
| "oneOf": [ |
There was a problem hiding this comment.
can an extension have multiple install sources? like, from the store INCLUSIVE_OR from winget?
There was a problem hiding this comment.
I was thinking we could let the user choose.. but maybe it's overkill? thoughts?
Adds examples to all fields in the JSON Schema for better editor autocompletion and documentation (id, title, description, author, icon, homepage, tags, and all installSources types). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ting Extensions now live at extensions/<author>/<extension-name>/ with id format author.extension-name (e.g., jiripolasek.media-controls). - Schema id pattern updated to require dot-separated author.name - Validate script discovers extensions two levels deep - Generate script globs two levels deep, icon URLs include author path - Sample extension moved to extensions/microsoft/sample-extension/ - Docs, PR template, and README updated with new convention Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Sets up the complete extension gallery infrastructure for Command Palette, including:
Gallery Infrastructure
extensions/folder convention — each extension lives in its own subfolder withextension.json+ icon.github/schemas/extension.schema.json) — validates extension submissions.github/scripts/validate.py) — PR-time checks (schema, icon, duplicates, naming).github/scripts/generate.py) — aggregates all extensions into rootextensions.jsonV2 Extension Schema
title(display name),author(object: name + url),installSources(array supporting multiple sources)winget(id),msstore(id),url(uri)media-controls)categoryandtagsfieldsDocumentation
docs/CONTRIBUTING.md— step-by-step submission guide for 3P developersSample Extension
extensions/sample-extension/— reference implementation for contributorsCo-authored-by: Copilot 223556219+Copilot@users.noreply.github.com