Skip to content

Switch skill CI validation workflows to vally lint#2030

Draft
aaronpowell wants to merge 6 commits into
stagedfrom
aaronpowell/comparing-vally-lint
Draft

Switch skill CI validation workflows to vally lint#2030
aaronpowell wants to merge 6 commits into
stagedfrom
aaronpowell/comparing-vally-lint

Conversation

@aaronpowell

@aaronpowell aaronpowell commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Replaces the external skill-validator binary (downloaded nightly from GitHub releases) with @microsoft/vally-cli (vally lint) for all skill static-analysis CI checks.

Why vally lint?

  • No binary download — installed via npx, no curl+tar+chmod per run
  • Stricter checksvally lint enforces the full Agent Skills spec: valid frontmatter types, file-reference integrity (valid-refs), orphan-file detection, and a 500-line SKILL.md cap
  • npm-versioned — reproducible and auditable via the npm registry

Changes

Skill PR gate & comment (skill-check.yml, skill-check-comment.yml)

  • Removed binary download/cache steps; replaced with actions/setup-node + npx @microsoft/vally-cli lint
  • Artifact and output file renamed vally-lint-results / vally-output.txt
  • PR comment UI strings updated

Nightly quality report (skill-quality-report.yml)

  • Same binary → vally swap
  • Agent check step now records an informational note (vally only processes SKILL.md, not .agent.md)

External plugin quality gates (eng/external-plugin-quality-gates.mjs)

  • Removed downloadSkillValidator() and SKILL_VALIDATOR_ARCHIVE_URL
  • Replaced buildSkillValidatorArgs() + runSkillValidatorGate() with buildVallyLintArgs() + runVallyLintGate(): runs npx @microsoft/vally-cli lint per resolved skill directory, falling back to the full plugin root when no specific skill paths are found
  • Result keys renamed: skill_validator_statusvally_lint_status, skill_validator_outputvally_lint_output

External plugin intake comments (eng/external-plugin-intake.mjs)

  • normalizeQualityGateResult defaults updated to new key names
  • PR comment table row and details section updated: "skill-validator" → "vally lint"

Documentation (CONTRIBUTING.md)

  • Two prose references to skill-validator check --plugin updated to vally lint

Behavioural notes

  • Warn-only PR gate preserved — the PR gate captures vally lint exit code but does not fail the workflow (same as before)
  • False-positive riskvally treats prose absolute paths like /spec/ as broken file references (valid-refs: absolute-path). Skills with such documentation text may show new warnings
  • 500-line limitvally enforces a 500-line cap on SKILL.md. Many existing skills exceed this; the gate is warn-only so this doesn't block PRs but does surface in the quality report
  • Agent filesvally lint only processes SKILL.md; .agent.md linting remains out of scope for this change

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actions github-actions Bot added the workflow PR touches workflow automation label Jun 17, 2026
aaronpowell and others added 4 commits June 23, 2026 14:41
Replace the downloaded skill-validator binary with
px @microsoft/vally-cli lint
in the external plugin quality gates pipeline:

- Remove downloadSkillValidator() and SKILL_VALIDATOR_ARCHIVE_URL constant
- Replace �uildSkillValidatorArgs() + 
unSkillValidatorGate() with
  �uildVallyLintArgs() + 
unVallyLintGate() that run
px vally-cli lint
  per resolved skill directory (falling back to the full plugin root when no
  specific skill paths can be resolved from plugin.json)
- Rename result keys skill_validator_status / skill_validator_output
  to �ally_lint_status / �ally_lint_output throughout both
  �ng/external-plugin-quality-gates.mjs and �ng/external-plugin-intake.mjs
- Update PR comment markdown to show 'vally lint' instead of 'skill-validator'
- Update CONTRIBUTING.md prose references accordingly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@aaronpowell aaronpowell changed the title Switch skill CI validation workflows to Vally lint Switch skill CI validation workflows to vally lint Jun 23, 2026
Replace the npx-spawned vally-cli process with a direct call to the
@microsoft/vally core library in the external plugin quality gates scripts:

- Add @microsoft/vally as a devDependency in package.json
- Import runLint and LintConsoleReporter from @microsoft/vally
- Replace runVallyLintGate() process spawn with async API call:
  - runLint({ rootPath }) returns structured LintResults
  - LintConsoleReporter with a Writable capture stream collects
    text output without printing to stdout
- Make runExternalPluginQualityGates() async (propagated to
  runExternalPluginPrQualityGates() and both main entry points)
- Use Promise.all in runExternalPluginPrQualityGates() for parallel
  plugin checks
- Fix remaining skill_validator_status reference in pr-quality-gates
  summary string (now vally-lint=...) and YAML workflow table header
- Add 'npm install @microsoft/vally' step to both calling workflows

This removes a layer of indirection (Node -> npx -> CLI -> library)
and replaces it with a direct in-process library call, which is faster,
more reliable, and gives structured access to lint results.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

workflow PR touches workflow automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant