feat: improve catalog submission templates and CODEOWNERS#2401
feat: improve catalog submission templates and CODEOWNERS#2401mnriem merged 1 commit intogithub:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Automates community extension/preset catalog submissions by validating issue-form metadata and generating follow-up PRs, and updates docs to reflect the new submission flow.
Changes:
- Added GitHub Actions workflows to validate submission issues and create catalog-update PRs.
- Added Python scripts to parse issue bodies, validate fields/URLs, update catalog JSON, and generate markdown tables.
- Updated extension/preset publishing docs to instruct users to submit via issue templates (not manual PRs).
Show a summary per file
| File | Description |
|---|---|
| presets/PUBLISHING.md | Updates preset publishing instructions to the new issue-based automation flow. |
| presets/DEVELOPING.md | New guide for preset structure, validation, testing, and releases. |
| integrations/CONTRIBUTING.md | Notes that automated submission is planned (integrations still manual). |
| extensions/README.md | Updates extension submission steps to issue-based automation. |
| extensions/EXTENSION-USER-GUIDE.md | Updates safety guidance to reflect metadata-only validation. |
| extensions/EXTENSION-PUBLISHING-GUIDE.md | Rewrites publishing steps around issue submission + bot-generated PRs. |
| extensions/EXTENSION-DEVELOPMENT-GUIDE.md | Simplifies community catalog submission section; adds maintenance guidance. |
| .github/workflows/catalog-validate.yml | New workflow to validate extension/preset submission issues and label/comment results. |
| .github/workflows/catalog-pr.yml | New workflow to create/update PRs when an issue is labeled validated. |
| .github/scripts/catalog-validate.py | New validator/parser + catalog entry builder for submissions. |
| .github/scripts/catalog-pr.py | New catalog updater + optional docs table regeneration hook. |
| .github/scripts/catalog-generate-table.py | New script to generate/update markdown tables from catalogs. |
| .github/CODEOWNERS | Adds maintainership requirements for catalog JSON files. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/workflows/catalog-pr.yml:203
- Same as the extension job:
git commitwill fail if the catalog/table regeneration produces no changes (common on reruns). Add an explicit no-op guard before committing/pushing so the workflow exits cleanly when there's nothing to update.
git add presets/catalog.community.json docs/community/presets.md
git commit -m "${ACTION} community preset: ${ITEM_ID}
Automated from issue #${ISSUE_NUMBER}.
Co-authored-by: ${ISSUE_AUTHOR} <${ISSUE_AUTHOR}@users.noreply.github.com>"
git push -u origin "$BRANCH" --force-with-lease
- Files reviewed: 13/13 changed files
- Comments generated: 8
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 13/13 changed files
- Comments generated: 7
- SSRF protection: reject private/loopback/reserved IPs and non-HTTP(S) schemes in check_url_reachable() before making network requests - Table generator: exit non-zero when --target is set but markers are missing, so CI fails loudly instead of silently skipping the update - Add catalog-table-start/end markers to docs/community/presets.md so the table generator can update it automatically - Use RELEASE_PAT instead of GITHUB_TOKEN in catalog-pr.yml so auto-generated PRs trigger downstream CI workflows - Reword extension safety FAQ to distinguish verified vs unverified community extensions
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/workflows/catalog-validate.yml:122
- Same issue as the extension validation job:
actions/checkoutrequirescontents: read, but this job only grantsissues: write, so checkout will fail under the defaultGITHUB_TOKENpermissions model. Addcontents: readhere as well.
if: contains(github.event.issue.labels.*.name, 'preset-submission')
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/checkout@v4
- Files reviewed: 14/14 changed files
- Comments generated: 6
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 15/15 changed files
- Comments generated: 10
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/workflows/catalog-validate.yml:161
- Same issue in the preset validation job: the comment-update logic filters on
c.user.type === 'Bot'but usessecrets.RELEASE_PATfor authentication, so it will usually never match the previous comment and will keep posting new ones. Prefer matching on the marker (and optionallyuser.login) rather thanuser.type.
const marker = '<!-- catalog-submission-bot -->';
const botComment = allComments.find(c =>
c.user.type === 'Bot' && c.body.includes(marker)
);
- Files reviewed: 15/15 changed files
- Comments generated: 3
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/scripts/catalog-validate.py:371
validate_tags()currently requires 2–5 tags. The existing catalogs include entries with 1 tag (e.g.,confluence) and many with >5 tags (e.g.,docguard, several presets), so the update path described in the docs/workflows won’t work for those without forcing tag changes. To keep updates compatible, consider allowing a wider range (or making the upper bound warn-only on updates).
def validate_tags(value: str) -> tuple[bool, str]:
if not _present(value):
return False, "Tags are required."
raw_tags = [t.strip().lower() for t in value.split(",") if t.strip()]
if len(raw_tags) < 2:
return False, "Please provide at least 2 tags."
if len(raw_tags) > 5:
return False, f"Too many tags ({len(raw_tags)}). Please provide 2-5 tags."
bad = [t for t in raw_tags if not re.match(r"^[a-z0-9-]+$", t)]
if bad:
return False, (
f"Tags must be lowercase alphanumeric with hyphens: {', '.join(bad)}"
)
return True, f"Tags: {', '.join(raw_tags)}."
- Files reviewed: 16/16 changed files
- Comments generated: 5
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/workflows/catalog-pr.yml:187
- Same issue in the preset PR job: when the branch already exists, this step re-runs
catalog-validate.pywithoutISSUE_BODY/ISSUE_NUMBER/GITHUB_TOKENenv vars, so reruns after edits will fail. Add those env vars to this step (or skip re-running the validator here and reuse the /tmp outputs from the earlier step).
# Check if branch already exists (from a previous run)
if git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then
git fetch origin "$BRANCH"
git checkout "$BRANCH"
git reset --hard origin/main
# Re-run on the fresh branch
python .github/scripts/catalog-validate.py \
--catalog presets/catalog.community.json \
--type preset
python .github/scripts/catalog-pr.py \
- Files reviewed: 16/16 changed files
- Comments generated: 2
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 16/16 changed files
- Comments generated: 4
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 17/17 changed files
- Comments generated: 7
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 9/9 changed files
- Comments generated: 3
41fbf8f to
06fdf26
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 9/9 changed files
- Comments generated: 2
06fdf26 to
ef7ebb1
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 9/9 changed files
- Comments generated: 3
ef7ebb1 to
0030bce
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 9/9 changed files
- Comments generated: 2
0030bce to
a8c75ec
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/workflows/catalog-assign.yml:31
addAssigneeswill fail the job ifmnriemcan’t be assigned (e.g., user renamed/left org, insufficient permissions). To avoid breaking all submissions, wrap the assignment/comment calls in try/catch and post a fallback comment (or just skip assignment) when the API returns a 4xx.
script: |
// Assign default maintainer and notify the team
await github.rest.issues.addAssignees({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
assignees: ['mnriem'],
});
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
body: 'cc @github/spec-kit-maintainers — new catalog submission for review.',
- Files reviewed: 9/9 changed files
- Comments generated: 3
a8c75ec to
d99869f
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 9/9 changed files
- Comments generated: 5
d99869f to
9ac4eb3
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/ISSUE_TEMPLATE/preset_submission.yml:115
templates-providedis markedrequired: true, but the PR description indicates this should be optional for command-only presets. Either make this field optional (and rely on the “enter None” guidance) or update the PR/docs to match the required behavior.
- spec-template.md — adds compliance section
- plan-template.md — includes audit checkpoints
- checklist-template.md — HIPAA compliance checklist
validations:
required: true
- Files reviewed: 9/9 changed files
- Comments generated: 1
Simplify the community catalog submission flow to use issue templates with manual maintainer review (no automation scripts or workflows). - Add explicit CODEOWNERS entries for catalog.community.json files so submissions are automatically assigned to a maintainer for review - Improve preset submission template: - Add 'Required Extensions' optional field - Make 'Templates Provided' optional (supports command-only presets) - Add 'Number of Scripts' optional field The existing extension and preset issue templates already collect all required catalog metadata. Maintainers review submissions and manually update the catalog JSON files. Closes github#2400
9ac4eb3 to
dcc4918
Compare
There was a problem hiding this comment.
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comments suppressed due to low confidence (1)
.github/ISSUE_TEMPLATE/preset_submission.yml:116
- PR description says the preset submission template makes “Templates Provided” optional for command-only presets, but the field is still marked required (validations.required: true). If the intent is to allow command-only presets without templates, consider making this field optional (and/or updating the label to explicitly say optional) so the template matches the documented flow.
- type: textarea
id: templates-provided
attributes:
label: Templates Provided
description: List the template overrides your preset provides (enter "None" if command-only)
placeholder: |
- spec-template.md — adds compliance section
- plan-template.md — includes audit checkpoints
- checklist-template.md — HIPAA compliance checklist
validations:
required: true
- Files reviewed: 9/9 changed files
- Comments generated: 0 new
Summary
Simplifies the community catalog submission flow to use issue templates with manual maintainer review.
Changes
Auto-assign workflow (
.github/workflows/catalog-assign.yml):@mnriemto new extension and preset submission issues@github/spec-kit-maintainersto notify the teamCODEOWNERS:
Extension Publishing Guide:
Extension README & Development Guide:
Disclaimer updates (across
README.md,extensions/README.md,docs/community/presets.md,presets/README.md):Preset submission template:
How it works
@mnriemand notifies@github/spec-kit-maintainersvia commentCloses #2400