Skip to content

Conversation

@robtaylor
Copy link

Summary

This PR adds a comprehensive CI workflow that tests all skills in the repository:

Jobs

  1. Validate SKILL.md Format - Checks all skills have valid SKILL.md frontmatter

    • Required fields: name, description
    • Validates naming conventions (lowercase, hyphens)
    • Warns on short content
  2. Generate Skill Zips - Creates downloadable .zip files for each skill

    • Ready for upload to Claude
    • Uploaded as artifacts for easy access
  3. Test with Claude API - Validates skill format with Claude API

    • Uploads skill to API to verify it's accepted
    • Cleans up test skill after validation
    • Only runs when ANTHROPIC_API_KEY secret is available
  4. Test with Claude Code - Integration test with Claude Code

    • Installs skill to ~/.claude/skills/
    • Uses claude-code-action to verify accessibility
    • Reports status in GitHub step summary

🤖 Generated with Claude Code

robtaylor and others added 12 commits December 9, 2025 10:34
This adds a Puppeteer-based rendering workflow for complex HTML slides that
don't convert well using the html2pptx approach.

New Scripts:
- scripts/render-slides.js: Render HTML slides to PNG at 2x scale
- scripts/create-from-images.js: Create PPTX from rendered images with
  support for diagram overlays via JSON config

New Configuration:
- package.json: Node.js dependencies (pptxgenjs, puppeteer)
- pyproject.toml: Python dependencies via uv (markitdown, defusedxml,
  python-pptx)

CI/CD:
- .github/workflows/test-pptx-skill.yml: GitHub Actions workflow with:
  - Node.js workflow tests (render slides, create PPTX)
  - Python dependency tests
  - Integration test with markitdown PPTX extraction

Tests:
- test/test-workflow.js: Automated tests for render and create scripts
- test/slides/test-slide.html: Test fixture with gradient, SVG, flexbox

Documentation:
- SKILL.md: Added "Image-Based Workflow" section with setup instructions,
  workflow guide, and diagram overlay examples

The image-based workflow addresses issues with html2pptx not handling:
- Complex SVG diagrams
- CSS gradients and advanced styling
- Intricate flexbox/grid layouts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add package-lock.json for Node.js dependencies
- Add uv.lock for Python dependencies

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- architecture-slide.html: System architecture with SVG diagrams
- metrics-slide.html: Dashboard with KPIs and charts
- diagram-overlay.html: Standalone diagram for overlay testing
- Enhanced test-workflow.js with 6 comprehensive tests
- Updated .gitignore to exclude node_modules and .venv

Test slides represent the kind of complex HTML that Claude would
generate when asked to create professional presentations.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Job 1: Validate SKILL.md format for all skills
  - Checks frontmatter exists and has required fields (name, description)
  - Validates name matches directory and uses lowercase-hyphens
  - Warns on short descriptions or body content

- Job 2: Generate skill zips for Claude installation
  - Creates downloadable .zip files for each skill
  - Uploads as artifacts for easy access
  - Summarizes zip sizes in GitHub step summary

- Job 3: Test skill upload with Claude API
  - Uploads pptx skill to Claude API to validate format
  - Cleans up test skill after validation
  - Only runs when ANTHROPIC_API_KEY secret is available

- Job 4: Test skill installation with Claude Code
  - Installs skill to ~/.claude/skills/
  - Uses claude-code-action to verify skill is accessible
  - Reports installation status in step summary

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Add id-token: write permission for OIDC
- Change 'prompt' to 'direct_prompt' (correct parameter name)
- Add github_token for API access

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
The Claude Code action requires ANTHROPIC_API_KEY secret to be configured.
Using continue-on-error so the CI still passes when secrets aren't available.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Created skill-ci.yml as a reusable workflow that can be used by any
repository implementing a Claude skill:

Features:
- Validates SKILL.md format (frontmatter, required fields, naming)
- Generates installable .zip files (uploaded as artifacts)
- Tests skill upload with Claude API (optional)
- Tests skill with Claude Code action (optional)

Usage for single-skill repos:
  jobs:
    test:
      uses: anthropics/skills/.github/workflows/skill-ci.yml@main
      with:
        skill_path: "."
      secrets:
        ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

Usage for multi-skill repos:
  jobs:
    test:
      uses: anthropics/skills/.github/workflows/skill-ci.yml@main
      with:
        skill_path: "skills"
        multi_skill: true
        test_skill_name: "my-skill"
      secrets:
        ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Comprehensive README explaining:
- Quick start for single and multi-skill repos
- All configurable inputs and secrets
- SKILL.md format requirements
- Example repository structures
- Troubleshooting guide

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Better discoverability for skill developers. Includes:
- Quick start example
- What the CI does
- Configuration options table
- Multi-skill repo example

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
@robtaylor robtaylor marked this pull request as ready for review December 9, 2025 19:31
robtaylor and others added 7 commits December 12, 2025 11:19
The Claude API rejects skill zips that contain nested zip files.
Add exclusions for:
- .zip files (could be accidentally committed or created during build)
- skill-zips/ directory (the output directory, which could be picked
  up by rglob when skill_path is ".")

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Include the GitHub run ID in the skill display_title to prevent
'cannot reuse an existing display_title' errors when previous
test runs failed to clean up properly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
The Claude API requires SKILL.md to be at the top level of the zip file.
Previously, multi-skill repos were creating zips with paths like
'skills/pptx/SKILL.md' instead of just 'SKILL.md'.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
The Claude API expects a top-level folder containing all skill files.
The zip structure should be:
  pptx/SKILL.md
  pptx/ooxml/...

Not just SKILL.md at the root or skills/pptx/SKILL.md.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
- Output skill_names_json from validation job for matrix use
- Use matrix strategy in test-claude-api to test all 16 skills in parallel
- Each skill is uploaded and validated against the Claude API
- Claude Code test continues to use first skill (more interactive/expensive)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Temporarily uses robtaylor/claude-code-action@main which includes
support for push events. This will be reverted once PR #772 is
merged to anthropics/claude-code-action.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <[email protected]>
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