Skip to content

Add CI validation, release workflow, plugin validator - #3

Draft
patrickking67 wants to merge 2 commits into
mainfrom
claude/plugin-ci-and-release-workflow
Draft

patrickking67 wants to merge 2 commits into
mainfrom
claude/plugin-ci-and-release-workflow

Conversation

@patrickking67

Copy link
Copy Markdown
Owner

Summary

Adds the three things that would have caught the install-breaking bug we shipped in v1.0 before it merged.

1. scripts/validate_plugin.py

Catches every bug class we hit:

  • Unparseable YAML frontmatter (the task: reads agent bug)
  • Wrong schema keys: authors (plural array) vs author (singular object), tools: as YAML list vs comma-separated string
  • Missing required fields on skills / commands / agents
  • Invalid JSON in marketplace.json / plugin.json / .mcp.json
  • Invalid TOML in codex-config.toml
  • [mcp_servers.*] entries that have neither command nor url
  • Forbidden fields (e.g. owner.url — not in the marketplace schema)

Run locally: pip install pyyaml && python3 scripts/validate_plugin.py

Regression-verified: re-introducing the exact bug we fixed in #2 (unquoted colon in description:) makes the validator exit 1 with mapping values are not allowed here.

2. .github/workflows/validate.yml

Runs on every push to main and every PR. Steps:

  • Run validate_plugin.py (schema + frontmatter)
  • node --check every max-for-live/*.js
  • Build the bundle as a smoke test and re-parse the bundled plugin.json + agent YAML

3. .github/workflows/release.yml

Triggers on v* tag push (or manual dispatch). Builds producer.plugin from plugins/producer/, validates the bundle, attaches it to a GitHub Release with auto-generated notes.

Cleanup

  • dist/producer.plugin is no longer committed (it's a build artifact). .gitignore excludes dist/.
  • README.md "Manual install (bundle)" now points to latest GitHub release instead of the in-repo path, and adds a "Development" section with the local validator command.

Test plan

  • validate.yml runs green on this PR
  • After merge, push a v1.0.1 tag → release.yml builds and publishes the bundle
  • python3 scripts/validate_plugin.py exits 0 on a clean checkout, 1 if any frontmatter/JSON/TOML is broken
  • Update the sideload link in README to a real release once v1.0.1 is published

Generated by Claude Code

claude added 2 commits May 16, 2026 09:08
- scripts/validate_plugin.py: catches the three bug classes we shipped
  in v1.0 — unparseable YAML frontmatter, wrong schema keys (`authors`
  vs `author`, `tools` as a list), JSON / TOML syntax errors. Also
  verifies marketplace.json and plugin.json structure, and that every
  [mcp_servers.*] entry in codex-config.toml has command or url.
- .github/workflows/validate.yml: runs the validator on every push +
  PR, lints Max for Live JS with `node --check`, and builds the plugin
  bundle as a smoke test (catches packaging regressions).
- .github/workflows/release.yml: builds and attaches producer.plugin to
  a GitHub Release on every `v*` tag push (or manual dispatch). Plugin
  bundle is no longer committed to main — `.gitignore` excludes dist/
  and README points sideloaders to the latest release instead.
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.

2 participants