Skip to content

[Feature] Automate community catalog submissions with validation and PR generation #2400

@mnriem

Description

@mnriem

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

  • catalog-validate.yml workflow
  • catalog-pr.yml workflow
  • catalog-validate.py script (metadata-only validation, no archive extraction)
  • catalog-pr.py script
  • catalog-generate-table.py script
  • Updated extensions/EXTENSION-PUBLISHING-GUIDE.md
  • Updated extensions/EXTENSION-USER-GUIDE.md
  • Updated extensions/EXTENSION-DEVELOPMENT-GUIDE.md
  • Updated extensions/README.md
  • Updated integrations/CONTRIBUTING.md
  • Updated presets/PUBLISHING.md
  • New presets/DEVELOPING.md
  • Updated .github/CODEOWNERS

Acceptance Criteria

  • Extension submission issues are auto-validated with a comment summarizing pass/fail
  • Preset submission issues are auto-validated with a comment summarizing pass/fail
  • Validated submissions get an auto-generated PR adding the entry to the community catalog
  • No archive downloads or extractions occur — validation is metadata and URL reachability only
  • Duplicate IDs are rejected during validation
  • Invalid/unreachable download URLs are flagged
  • A maintainer must still review and merge the generated PR (human in the loop)
  • Publishing and development guides are updated to reference the automated flow

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions