Skip to content

feat: Extension gallery infrastructure + V2 schema - #1

Merged
Niels Laute (niels9001) merged 9 commits into
mainfrom
feat/extension-gallery-v2
Mar 27, 2026
Merged

Niels Laute (niels9001) merged 9 commits into
mainfrom
feat/extension-gallery-v2

Conversation

@niels9001

Copy link
Copy Markdown
Contributor

Summary

Sets up the complete extension gallery infrastructure for Command Palette, including:

Gallery Infrastructure

  • extensions/ folder convention — each extension lives in its own subfolder with extension.json + icon
  • JSON Schema (.github/schemas/extension.schema.json) — validates extension submissions
  • Validation script (.github/scripts/validate.py) — PR-time checks (schema, icon, duplicates, naming)
  • Generation script (.github/scripts/generate.py) — aggregates all extensions into root extensions.json
  • CI workflows — PR validation + auto-regeneration on merge to main

V2 Extension Schema

  • title (display name), author (object: name + url), installSources (array supporting multiple sources)
  • Install source types: winget (id), msstore (id), url (uri)
  • Simple slug IDs (e.g., media-controls)
  • Optional category and tags fields

Documentation

  • docs/CONTRIBUTING.md — step-by-step submission guide for 3P developers
  • PR template with submission checklist
  • Updated README with gallery overview and JSON endpoint

Sample Extension

  • extensions/sample-extension/ — reference implementation for contributors

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Niels Laute (niels9001) and others added 3 commits March 27, 2026 13:59
- 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>

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.json schema (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 generated extensions.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 $schema URL 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 on main), or remove/update the $schema reference so it doesn’t 404.
    .github/scripts/generate.py:25
  • GALLERY_SCHEMA_URL is set to ${BASE_RAW_URL}/.github/schemas/gallery.schema.json, but there is no gallery.schema.json under .github/schemas/ in this repo. This makes the $schema value in the generated extensions.json point 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.

Comment thread docs/CONTRIBUTING.md Outdated
Comment thread docs/CONTRIBUTING.md Outdated
Comment thread extensions/sample-extension/extension.json Outdated
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Comment thread extensions/microsoft/sample-extension/extension.json
Comment thread .github/schemas/extension.schema.json Outdated
"type": "object",
"description": "An installation source.",
"required": ["type"],
"oneOf": [

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can an extension have multiple install sources? like, from the store INCLUSIVE_OR from winget?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking we could let the user choose.. but maybe it's overkill? thoughts?

Comment thread .github/schemas/extension.schema.json Outdated
Niels Laute (niels9001) and others added 5 commits March 27, 2026 15:23
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>
@niels9001
Niels Laute (niels9001) merged commit a40b326 into main Mar 27, 2026
2 checks passed
@niels9001
Niels Laute (niels9001) deleted the feat/extension-gallery-v2 branch March 27, 2026 22:38
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.

4 participants