Skip to content

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

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions