-
Notifications
You must be signed in to change notification settings - Fork 5
160 lines (133 loc) · 4.66 KB
/
Copy pathplugin-validation.yml
File metadata and controls
160 lines (133 loc) · 4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# Schema/lint layer for the shipped agent plugin bundles. Mirrors:
# https://github.com/cursor/plugins/blob/main/.github/workflows/validate-plugins.yml
#
# Rust contract tests already run in ci.yml. Keep this workflow to schema checks
# and the SDK-backed MCP smoke, which needs a built binary plus npx.
name: Plugin Validation
on:
push:
branches: [master]
pull_request:
paths:
- "plugin/**"
- "plugin/cursor-native-extension/**"
- "tests/fixtures/cursor-schemas/**"
- "tests/agent_suite/*plugin*"
- "tests/agent_suite/*skill*"
- "scripts/mcp-conformance-smoke.sh"
- "scripts/check-dashboard-bundle.py"
- "src/serve.rs"
- "src/main.rs"
- "src/lib.rs"
- "src/mcp/**"
- "Cargo.toml"
- "Cargo.lock"
- ".github/workflows/plugin-validation.yml"
permissions:
contents: read
env:
TRACEDECAY_SKIP_DASHBOARD_BUILD: "1"
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
dashboard-assets:
name: Build dashboard artifact
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v5
with:
node-version: 22
cache: npm
cache-dependency-path: dashboard/package-lock.json
- name: Install dashboard dependencies
working-directory: dashboard
run: npm ci
- name: Build dashboard
working-directory: dashboard
run: npm run build
- name: Validate dashboard bundle
run: python3 scripts/check-dashboard-bundle.py dashboard/app-dist
- name: Upload dashboard artifact
uses: actions/upload-artifact@v6
with:
name: dashboard-app-dist
path: dashboard/app-dist
if-no-files-found: error
include-hidden-files: true
manifest-schema:
name: Manifest schema
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v5
with:
node-version: 22
- name: Install ajv-cli
run: npm install --no-save ajv-cli@5.0.0 ajv-formats@2.1.1
- name: Compile vendored schemas
run: |
set -euo pipefail
npx --no-install ajv compile --spec=draft7 -c ajv-formats \
-s tests/fixtures/cursor-schemas/plugin.schema.json \
-s tests/fixtures/cursor-schemas/marketplace.schema.json \
-s tests/fixtures/cursor-schemas/mcp.schema.json \
-s tests/fixtures/cursor-schemas/hooks.schema.json
- name: Validate Cursor plugin manifest
run: |
set -euo pipefail
npx --no-install ajv validate --spec=draft7 -c ajv-formats --errors=text \
-s tests/fixtures/cursor-schemas/plugin.schema.json \
-d plugin/.cursor-plugin/plugin.json
- name: Check bundle JSON files parse
run: |
set -euo pipefail
find plugin -name '*.json' -print0 |
while IFS= read -r -d '' f; do
python3 -c "import json,sys; json.load(open(sys.argv[1]))" "$f" \
|| { echo "invalid JSON: $f" >&2; exit 1; }
echo "ok: $f"
done
claude-native-validation:
name: Claude native plugin validation
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v7
- name: Install Claude Code
run: |
set -euo pipefail
curl -fsSL https://claude.ai/install.sh | bash
echo "$HOME/.local/bin" >> "$GITHUB_PATH"
- name: Validate Claude plugin bundle
run: claude plugin validate plugin --strict
# Uses MCP Inspector's TypeScript SDK client to cover stdio handshake and
# schema compatibility beyond the in-repo Rust MCP tests.
mcp-conformance-smoke:
name: MCP conformance smoke
needs: dashboard-assets
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v7
- name: Download dashboard artifact
uses: actions/download-artifact@v7
with:
name: dashboard-app-dist
path: dashboard/app-dist
- name: Validate downloaded dashboard bundle
run: python3 scripts/check-dashboard-bundle.py dashboard/app-dist
- uses: actions/setup-node@v5
with:
node-version: 22
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build tracedecay
run: cargo build --all-features --bin tracedecay --locked
- name: Run MCP conformance smoke
run: scripts/mcp-conformance-smoke.sh
env:
TRACEDECAY_BIN: target/debug/tracedecay