Add Claude Code SDK tutorials and examples #25
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: Notebook Quality Check | |
| on: | |
| pull_request: | |
| paths: | |
| - '**/*.ipynb' | |
| - 'pyproject.toml' | |
| - 'uv.lock' | |
| push: | |
| branches: [main] | |
| paths: | |
| - '**/*.ipynb' | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| jobs: | |
| validate-notebooks: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install uv | |
| uses: astral-sh/setup-uv@v4 | |
| with: | |
| enable-cache: true | |
| cache-dependency-glob: "uv.lock" | |
| - name: Set up Python 3.11 | |
| run: uv python install 3.11 | |
| - name: Install dependencies | |
| run: | | |
| uv sync --frozen --all-extras | |
| - name: Lint notebooks with Ruff | |
| run: | | |
| uv run ruff check **/*.ipynb --show-fixes || true | |
| uv run ruff format **/*.ipynb --check || true | |
| - name: Validate notebook structure | |
| run: | | |
| uv run python scripts/validate_notebooks.py | |
| # Only run API tests on main branch or for maintainers (costs money) | |
| - name: Execute notebooks (API Testing) | |
| if: | | |
| github.event_name == 'push' || | |
| github.event.pull_request.author_association == 'MEMBER' || | |
| github.event.pull_request.author_association == 'OWNER' | |
| env: | |
| ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} | |
| run: | | |
| mkdir -p test_outputs | |
| for notebook in $(find . -name "*.ipynb" -not -path "*/.*" -not -path "*/test_outputs/*"); do | |
| echo "📓 Testing: $notebook" | |
| output_name=$(echo "$notebook" | sed 's|/|_|g' | sed 's|\.|_|g') | |
| # Use nbconvert to execute notebooks and save outputs | |
| uv run jupyter nbconvert --to notebook \ | |
| --execute "$notebook" \ | |
| --ExecutePreprocessor.kernel_name=python3 \ | |
| --ExecutePreprocessor.timeout=120 \ | |
| --output "test_outputs/${output_name}_executed.ipynb" \ | |
| --output-dir=. \ | |
| || echo "⚠️ Failed: $notebook" | |
| done | |
| # Mock testing for external contributors | |
| - name: Execute notebooks (Mock Testing) | |
| if: | | |
| github.event_name == 'pull_request' && | |
| github.event.pull_request.author_association != 'MEMBER' && | |
| github.event.pull_request.author_association != 'OWNER' | |
| run: | | |
| echo "🔒 Running in mock mode for external contributor" | |
| for notebook in $(find . -name "*.ipynb" -not -path "*/.*"); do | |
| echo "📓 Validating structure: $notebook" | |
| uv run python -m nbformat.validator "$notebook" | |
| done | |
| - name: Upload test outputs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: notebook-test-outputs | |
| path: test_outputs/ | |
| retention-days: 7 |