Problem Statement
Community extension and preset submissions currently require manual processing: a maintainer reads the issue, validates the metadata, copies it into catalog.community.json, and opens a PR. This is tedious and error-prone, especially as submission volume grows.
Proposed Solution
Automate the catalog submission pipeline with two GitHub Actions workflows and supporting scripts:
1. Validation workflow (catalog-validate.yml)
Triggered when an issue with extension-submission or preset-submission label is opened/edited:
- Parses the structured issue form fields (name, ID, version, download URL, repository, etc.)
- Validates required fields, format constraints, and ID uniqueness against existing catalog
- Verifies the download URL is reachable (HEAD request, falling back to GET)
- Posts a validation summary comment on the issue
- Adds
validated or validation-failed label
Important: The workflow does not download or extract the archive. Validation is metadata-only — it checks that the URL returns a 200, not what's inside. This is intentional: extracting user-submitted archives on CI runners introduces zip slip, zip bomb, and symlink attack risks that are unnecessary for catalog registration. The catalog is a directory of metadata and URLs, not a hosting platform.
2. PR generation workflow (catalog-pr.yml)
Triggered when a validated issue receives the validated label:
- Re-parses the issue body
- Generates the catalog entry JSON
- Updates
extensions/catalog.community.json or presets/catalog.community.json
- Opens a PR referencing the issue
- A maintainer reviews and merges the PR (human in the loop)
3. Supporting scripts
catalog-validate.py — issue body parsing, field validation, URL reachability check, catalog dedup
catalog-pr.py — catalog entry generation, branch creation, PR opening
catalog-generate-table.py — generates formatted catalog summary tables
4. Documentation updates
- Updated publishing guides for extensions, integrations, and presets to reference the automated flow
- New
presets/DEVELOPING.md — preset development guide
- CODEOWNERS updates for catalog files
Scope of Work
Acceptance Criteria
Additional Context
- Work in progress on local branch
feat/catalog-submission-automation
- Builds on the existing
extension_submission.yml and preset_submission.yml issue templates
Problem Statement
Community extension and preset submissions currently require manual processing: a maintainer reads the issue, validates the metadata, copies it into
catalog.community.json, and opens a PR. This is tedious and error-prone, especially as submission volume grows.Proposed Solution
Automate the catalog submission pipeline with two GitHub Actions workflows and supporting scripts:
1. Validation workflow (
catalog-validate.yml)Triggered when an issue with
extension-submissionorpreset-submissionlabel is opened/edited:validatedorvalidation-failedlabelImportant: The workflow does not download or extract the archive. Validation is metadata-only — it checks that the URL returns a 200, not what's inside. This is intentional: extracting user-submitted archives on CI runners introduces zip slip, zip bomb, and symlink attack risks that are unnecessary for catalog registration. The catalog is a directory of metadata and URLs, not a hosting platform.
2. PR generation workflow (
catalog-pr.yml)Triggered when a validated issue receives the
validatedlabel:extensions/catalog.community.jsonorpresets/catalog.community.json3. Supporting scripts
catalog-validate.py— issue body parsing, field validation, URL reachability check, catalog dedupcatalog-pr.py— catalog entry generation, branch creation, PR openingcatalog-generate-table.py— generates formatted catalog summary tables4. Documentation updates
presets/DEVELOPING.md— preset development guideScope of Work
catalog-validate.ymlworkflowcatalog-pr.ymlworkflowcatalog-validate.pyscript (metadata-only validation, no archive extraction)catalog-pr.pyscriptcatalog-generate-table.pyscriptextensions/EXTENSION-PUBLISHING-GUIDE.mdextensions/EXTENSION-USER-GUIDE.mdextensions/EXTENSION-DEVELOPMENT-GUIDE.mdextensions/README.mdintegrations/CONTRIBUTING.mdpresets/PUBLISHING.mdpresets/DEVELOPING.md.github/CODEOWNERSAcceptance Criteria
Additional Context
feat/catalog-submission-automationextension_submission.ymlandpreset_submission.ymlissue templates