Add TIL workflow system for Claude #20
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test Claude | |
| on: | |
| # Run on pull requests to main | |
| pull_request: | |
| branches: [main] | |
| paths: | |
| - 'tools/claude/config/skills/**/*.py' | |
| - 'tools/claude/config/skills/**/*.ts' | |
| - 'tools/claude/config/skills/**/pyproject.toml' | |
| - 'tools/claude/config/skills/**/deno.json' | |
| - '.github/workflows/test-claude-skills.yml' | |
| # Run on pushes to main branch | |
| push: | |
| branches: [main] | |
| paths: | |
| - 'tools/claude/config/skills/**/*.py' | |
| - 'tools/claude/config/skills/**/*.ts' | |
| - 'tools/claude/config/skills/**/pyproject.toml' | |
| - 'tools/claude/config/skills/**/deno.json' | |
| - '.github/workflows/test-claude-skills.yml' | |
| # Allow manual triggering for debugging | |
| workflow_dispatch: | |
| jobs: | |
| skills: | |
| name: Skills | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install uv | |
| run: brew install uv | |
| - name: Install deno | |
| run: brew install deno | |
| - name: Run ruff checks | |
| run: | | |
| echo "Running ruff checks on all skills..." | |
| cd tools/claude/config/skills | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/pyproject.toml" ]]; then | |
| echo "" | |
| echo "Checking $skill_dir with ruff..." | |
| cd "$skill_dir" | |
| uv run --with ruff ruff check . || exit 1 | |
| cd .. | |
| echo "✅ Passed" | |
| fi | |
| done | |
| echo "" | |
| echo "✅ All ruff checks passed" | |
| - name: Run mypy checks | |
| run: | | |
| echo "Running mypy checks on all skills..." | |
| cd tools/claude/config/skills | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/pyproject.toml" ]]; then | |
| echo "" | |
| echo "Type checking $skill_dir with mypy..." | |
| cd "$skill_dir" | |
| uv run --with mypy --with notion-client --with pydantic --with pytest mypy --python-version 3.11 . || exit 1 | |
| cd .. | |
| echo "✅ Passed" | |
| fi | |
| done | |
| echo "" | |
| echo "✅ All mypy checks passed" | |
| - name: Run deno format checks | |
| run: | | |
| echo "Running deno format checks on all TypeScript skills..." | |
| cd tools/claude/config/skills | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/deno.json" ]]; then | |
| echo "" | |
| echo "Format checking $skill_dir with deno fmt..." | |
| cd "$skill_dir" | |
| deno fmt --check || exit 1 | |
| cd .. | |
| echo "✅ Passed" | |
| fi | |
| done | |
| echo "" | |
| echo "✅ All deno format checks passed" | |
| - name: Run deno lint checks | |
| run: | | |
| echo "Running deno lint checks on all TypeScript skills..." | |
| cd tools/claude/config/skills | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/deno.json" ]]; then | |
| echo "" | |
| echo "Linting $skill_dir with deno lint..." | |
| cd "$skill_dir" | |
| deno lint || exit 1 | |
| cd .. | |
| echo "✅ Passed" | |
| fi | |
| done | |
| echo "" | |
| echo "✅ All deno lint checks passed" | |
| - name: Run deno type checks | |
| run: | | |
| echo "Running deno type checks on all TypeScript skills..." | |
| cd tools/claude/config/skills | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/deno.json" ]]; then | |
| echo "" | |
| echo "Type checking $skill_dir with deno check..." | |
| cd "$skill_dir" | |
| # Check all .ts files in the skill directory | |
| for ts_file in *.ts **/*.ts; do | |
| if [[ -f "$ts_file" ]]; then | |
| deno check "$ts_file" || exit 1 | |
| fi | |
| done | |
| cd .. | |
| echo "✅ Passed" | |
| fi | |
| done | |
| echo "" | |
| echo "✅ All deno type checks passed" | |
| - name: Run deno tests | |
| run: | | |
| echo "Running deno tests on all TypeScript skills..." | |
| cd tools/claude/config/skills | |
| FAILED_TESTS="" | |
| PASSED_TESTS=0 | |
| for skill_dir in */; do | |
| if [[ -f "$skill_dir/deno.json" ]]; then | |
| echo "" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "Testing: $skill_dir" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| cd "$skill_dir" | |
| if deno task test; then | |
| ((PASSED_TESTS++)) | |
| echo "✅ Passed: $skill_dir" | |
| else | |
| FAILED_TESTS="$FAILED_TESTS$skill_dir\n" | |
| echo "❌ Failed: $skill_dir" | |
| fi | |
| cd .. | |
| fi | |
| done | |
| if [[ $PASSED_TESTS -gt 0 ]]; then | |
| echo "" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "Deno Test Summary" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| if [[ -n "$FAILED_TESTS" ]]; then | |
| echo "❌ Failed tests:" | |
| echo -e "$FAILED_TESTS" | |
| echo "" | |
| echo "Passed: $PASSED_TESTS" | |
| exit 1 | |
| fi | |
| echo "✅ All $PASSED_TESTS TypeScript skill(s) passed" | |
| else | |
| echo "" | |
| echo "ℹ️ No TypeScript skills with deno.json found" | |
| fi | |
| - name: Run tests | |
| run: | | |
| echo "Searching for skill tests..." | |
| cd tools/claude/config/skills | |
| FAILED_TESTS="" | |
| PASSED_TESTS=0 | |
| # Find all test_*.py files | |
| for test_file in */test_*.py; do | |
| if [[ -f "$test_file" ]]; then | |
| echo "" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "Running: $test_file" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| if uv run "$test_file"; then | |
| ((PASSED_TESTS++)) | |
| echo "✅ Passed: $test_file" | |
| else | |
| FAILED_TESTS="$FAILED_TESTS$test_file\n" | |
| echo "❌ Failed: $test_file" | |
| fi | |
| fi | |
| done | |
| echo "" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "Test Summary" | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| if [[ -n "$FAILED_TESTS" ]]; then | |
| echo "❌ Failed tests:" | |
| echo -e "$FAILED_TESTS" | |
| echo "" | |
| echo "Passed: $PASSED_TESTS" | |
| exit 1 | |
| fi | |
| if [[ $PASSED_TESTS -eq 0 ]]; then | |
| echo "⚠️ No test files found" | |
| exit 0 | |
| fi | |
| echo "✅ All $PASSED_TESTS test file(s) passed" | |
| - name: Summary | |
| if: always() | |
| run: | | |
| echo "=== Test Summary ===" | |
| echo "Repository: ${{ github.repository }}" | |
| echo "Branch: ${{ github.ref_name }}" | |
| echo "Commit: ${{ github.sha }}" | |
| echo "Runner OS: ${{ runner.os }}" | |
| if [[ "${{ job.status }}" == "success" ]]; then | |
| echo "🎉 All Claude skill tests passed (Python + TypeScript)!" | |
| else | |
| echo "❌ Some tests failed. Check the logs above for details." | |
| fi |