Skip to content

Commit 03f2ecf

Browse files
nhortonclaude
andauthored
fix: Update CI to validate skills instead of deprecated commands (#179)
The validate-generation CI job was looking for `.claude/commands/` which is the old structure. DeepWork now generates skills in `.claude/skills/` with SKILL.md files inside directories. Changes: - Update validate-generation job to check for skill directories - Update claude-code-e2e job to use skill paths - Update artifact upload paths for new skill structure - Update README documentation to reference skills https://claude.ai/code/session_01UUxYSXJyUU8uinbBwNwG84 Co-authored-by: Claude <noreply@anthropic.com>
1 parent eda2388 commit 03f2ecf

File tree

2 files changed

+33
-30
lines changed

2 files changed

+33
-30
lines changed

.github/workflows/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This directory contains CI/CD workflows for the DeepWork project. We use GitHub'
77
| Workflow | File | Purpose |
88
|----------|------|---------|
99
| **Validate** | `validate.yml` | Linting (ruff) and unit tests |
10-
| **Integration Tests** | `claude-code-test.yml` | Command generation and e2e tests |
10+
| **Integration Tests** | `claude-code-test.yml` | Skill generation and e2e tests |
1111
| **CLA Assistant** | `cla.yml` | Contributor License Agreement verification |
1212
| **Release** | `release.yml` | PyPI publishing on tags |
1313

@@ -85,7 +85,7 @@ All checks will pass in both PR and merge queue contexts (either by running or b
8585
- **Triggers**: `pull_request` (main), `merge_group` (main), `workflow_dispatch`
8686
- **Jobs**:
8787
- `pr-check`: Runs on PRs only, always passes (lightweight check)
88-
- `validate-generation`: Tests command generation from fixtures (no API key needed)
88+
- `validate-generation`: Tests skill generation from fixtures (no API key needed)
8989
- `claude-code-e2e`: Full end-to-end test with Claude Code CLI (requires `ANTHROPIC_API_KEY`)
9090
- `validate-generation` and `claude-code-e2e` skip on PRs, run in merge queue and manual dispatch
9191

.github/workflows/claude-code-test.yml

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ permissions:
2626
contents: read
2727

2828
jobs:
29-
# Job 1: Validate command generation from fixtures (no API key needed)
29+
# Job 1: Validate skill generation from fixtures (no API key needed)
3030
# Runs on all events, but actual work only happens in merge_group/workflow_dispatch
3131
# This ensures the check name exists for PRs (needed for GitHub's merge queue)
3232
validate-generation:
@@ -60,7 +60,7 @@ jobs:
6060
if: github.event_name != 'pull_request'
6161
run: uv run pytest tests/integration/test_fruits_workflow.py -v
6262

63-
- name: Generate commands and validate structure
63+
- name: Generate skills and validate structure
6464
if: github.event_name != 'pull_request'
6565
run: |
6666
# Create a test environment
@@ -80,24 +80,27 @@ jobs:
8080
# Run deepwork install to set up the project (this also runs sync)
8181
uv run deepwork install --platform claude --path test_project
8282
83-
# Validate generated commands exist
84-
echo "Checking generated commands..."
85-
ls -la test_project/.claude/commands/
83+
# Validate generated skills exist
84+
echo "Checking generated skills..."
85+
ls -la test_project/.claude/skills/
8686
87-
# Verify command files exist
88-
test -f test_project/.claude/commands/fruits.identify.md || (echo "Missing fruits.identify.md" && exit 1)
89-
test -f test_project/.claude/commands/fruits.classify.md || (echo "Missing fruits.classify.md" && exit 1)
87+
# Verify skill directories and SKILL.md files exist
88+
# Meta-skill for the job itself
89+
test -f test_project/.claude/skills/fruits/SKILL.md || (echo "Missing fruits meta-skill" && exit 1)
90+
# Step skills
91+
test -f test_project/.claude/skills/fruits.identify/SKILL.md || (echo "Missing fruits.identify skill" && exit 1)
92+
test -f test_project/.claude/skills/fruits.classify/SKILL.md || (echo "Missing fruits.classify skill" && exit 1)
9093
91-
# Verify command content
92-
grep -q "# fruits.identify" test_project/.claude/commands/fruits.identify.md
93-
grep -q "raw_items" test_project/.claude/commands/fruits.identify.md
94-
grep -q "identified_fruits.md" test_project/.claude/commands/fruits.identify.md
94+
# Verify skill content
95+
grep -q "# fruits.identify" test_project/.claude/skills/fruits.identify/SKILL.md
96+
grep -q "raw_items" test_project/.claude/skills/fruits.identify/SKILL.md
97+
grep -q "identified_fruits.md" test_project/.claude/skills/fruits.identify/SKILL.md
9598
96-
grep -q "# fruits.classify" test_project/.claude/commands/fruits.classify.md
97-
grep -q "identified_fruits.md" test_project/.claude/commands/fruits.classify.md
98-
grep -q "classified_fruits.md" test_project/.claude/commands/fruits.classify.md
99+
grep -q "# fruits.classify" test_project/.claude/skills/fruits.classify/SKILL.md
100+
grep -q "identified_fruits.md" test_project/.claude/skills/fruits.classify/SKILL.md
101+
grep -q "classified_fruits.md" test_project/.claude/skills/fruits.classify/SKILL.md
99102
100-
echo "Command generation validated successfully!"
103+
echo "Skill generation validated successfully!"
101104
102105
# Job 2: Full end-to-end test with Claude Code
103106
# Tests the COMPLETE workflow: define job -> implement -> execute
@@ -172,8 +175,8 @@ jobs:
172175
uv run deepwork install --platform claude --path test_project
173176
174177
echo "Fresh test project setup complete"
175-
echo "Available commands:"
176-
ls -la test_project/.claude/commands/
178+
echo "Available skills:"
179+
ls -la test_project/.claude/skills/
177180
178181
# STEP 1: Use /deepwork_jobs.define to CREATE the fruits job
179182
- name: Create job with /deepwork_jobs.define
@@ -264,22 +267,22 @@ jobs:
264267
exit 1
265268
fi
266269
267-
# Run sync to generate the slash commands
268-
echo "=== Running deepwork sync to generate commands ==="
270+
# Run sync to generate the skills
271+
echo "=== Running deepwork sync to generate skills ==="
269272
cd ..
270273
uv run deepwork sync --path test_project
271274
272-
echo "=== Checking generated commands ==="
273-
ls -la test_project/.claude/commands/
275+
echo "=== Checking generated skills ==="
276+
ls -la test_project/.claude/skills/
274277
275-
if [ -f "test_project/.claude/commands/fruits.identify.md" ] && [ -f "test_project/.claude/commands/fruits.classify.md" ]; then
276-
echo "SUCCESS: Slash commands generated"
278+
if [ -f "test_project/.claude/skills/fruits.identify/SKILL.md" ] && [ -f "test_project/.claude/skills/fruits.classify/SKILL.md" ]; then
279+
echo "SUCCESS: Skills generated"
277280
else
278-
echo "ERROR: Slash commands were not generated"
281+
echo "ERROR: Skills were not generated"
279282
exit 1
280283
fi
281284
282-
# STEP 3: Execute the generated /fruits.identify command
285+
# STEP 3: Execute the generated /fruits.identify skill
283286
- name: Run /fruits.identify
284287
if: steps.check-key.outputs.has_key == 'true'
285288
working-directory: test_project
@@ -301,7 +304,7 @@ jobs:
301304
exit 1
302305
fi
303306
304-
# STEP 4: Execute the generated /fruits.classify command
307+
# STEP 4: Execute the generated /fruits.classify skill
305308
- name: Run /fruits.classify
306309
if: steps.check-key.outputs.has_key == 'true'
307310
working-directory: test_project
@@ -368,7 +371,7 @@ jobs:
368371
name: claude-code-e2e-outputs
369372
path: |
370373
test_project/.deepwork/jobs/fruits/
371-
test_project/.claude/commands/fruits.*.md
374+
test_project/.claude/skills/fruits*/
372375
test_project/identified_fruits.md
373376
test_project/classified_fruits.md
374377
retention-days: 7

0 commit comments

Comments
 (0)