Skip to content

feat(ci): add marketplace, eval, and markdown validation workflow#861

Merged
christso merged 7 commits intomainfrom
feat/ci-validate
Mar 30, 2026
Merged

feat(ci): add marketplace, eval, and markdown validation workflow#861
christso merged 7 commits intomainfrom
feat/ci-validate

Conversation

@christso
Copy link
Copy Markdown
Collaborator

Summary

  • Add reusable composite setup-bun GitHub Action with dependency caching (mirrors opencode pattern)
  • Add marketplace validation job: schema + sync check, alphabetical sort check, frontmatter validation for agent/skill/command .md files
  • Add evals validation job: installs agentv globally, verifies every evals/ directory has at least one eval file, runs agentv validate with glob patterns against all example evals
  • Add glob pattern support to agentv validate command (reuses fast-glob, already a CLI dependency)
  • Sort marketplace.json plugins alphabetically and sync .github/plugin/ copy
  • Add demo eval YAML files to compare and trace-analysis examples (previously had only result files, no eval definitions)

Changes

File Description
.github/actions/setup-bun/action.yml Composite action: bun setup + cache + install
.github/workflows/validate.yml Added marketplace and evals jobs
apps/cli/src/commands/validate/validate-files.ts Glob pattern support in expandPaths()
scripts/marketplace/*.ts Marketplace validation scripts (4 files)
scripts/validate-eval-dirs.ts Checks evals/ dirs have eval files
examples/features/compare/evals/dataset.eval.yaml New demo eval
examples/features/trace-analysis/evals/dataset.eval.yaml New demo eval
.claude-plugin/marketplace.json Sorted alphabetically
.github/plugin/marketplace.json Synced with sorted source

Test plan

  • All marketplace scripts pass locally
  • Eval directory validation passes (no hardcoded exceptions)
  • agentv validate with glob patterns finds and validates 52 eval files
  • New demo eval files pass schema validation
  • Full test suite passes (1713 tests)
  • Typecheck and lint pass
  • Pre-push hooks pass

🤖 Generated with Claude Code

christso and others added 2 commits March 30, 2026 04:33
… Actions

- Add composite setup-bun action with caching (mirrors opencode pattern)
- Add marketplace job: schema validation, sort check, sync check, frontmatter validation
- Add evals job: installs agentv globally, validates eval dirs have eval files, runs agentv validate with glob patterns
- Add glob pattern support to `agentv validate` command (uses fast-glob, already a dependency)
- Sort marketplace.json plugins alphabetically and sync .github/plugin/ copy

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Instead of hardcoding known exceptions in the eval-dirs validation
script, add proper eval YAML files to the compare and trace-analysis
example directories so they pass validation like all other features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@cloudflare-workers-and-pages
Copy link
Copy Markdown

cloudflare-workers-and-pages bot commented Mar 30, 2026

Deploying agentv with  Cloudflare Pages  Cloudflare Pages

Latest commit: 4b42302
Status: ✅  Deploy successful!
Preview URL: https://1b52946c.agentv.pages.dev
Branch Preview URL: https://feat-ci-validate.agentv.pages.dev

View logs

christso and others added 5 commits March 30, 2026 04:44
- Run agentv validate from built dist (bun apps/cli/dist/cli.js) instead
  of installing from npm, which lacks the new glob support
- Replace import.meta.url with __dirname in pi-coding-agent.ts to
  eliminate the esbuild CJS warning about empty import.meta

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enable `shims: true` in tsup config instead of manual runtime guards.
tsup injects proper CJS shims (pathToFileURL(__filename)) so
import.meta.url works in CJS output without esbuild warnings, while
ESM output uses native import.meta.url directly.

Reverts pi-coding-agent.ts to its original idiomatic ESM code since
the build tool now handles cross-format compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The criteria field was set to ${{ EVAL_CRITERIA }} which resolves to
empty string when the env var isn't set, causing validation to fail in
CI. Move interpolation demo to expected_output and input fields instead,
keeping criteria as a static string.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
name and description are optional metadata — no reason to couple them.
name can be derived from the filename if not provided.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Compare eval: match all 5 fixture test IDs (code-review-001/002/003,
  code-gen-001/002) so eval output is directly comparable
- Remove $schema from eval YAML files — not needed
- Verified: full eval run passes (5/5, 3/3), output is
  agentv-compare-compatible with matching test IDs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@christso christso merged commit 8de5385 into main Mar 30, 2026
4 checks passed
@christso christso deleted the feat/ci-validate branch March 30, 2026 05:51
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.

1 participant