update dependencies #40
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: Documentation Sync with Claude Code | |
| on: | |
| pull_request: | |
| types: [opened, synchronize, edited] | |
| jobs: | |
| sync-docs: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| id-token: write | |
| steps: | |
| - name: Checkout source repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| ref: ${{ github.event.pull_request.head.sha }} | |
| - name: Get changed files | |
| id: changed-files | |
| run: | | |
| git fetch origin ${{ github.event.pull_request.base.ref }} | |
| git diff --name-only origin/${{ github.event.pull_request.base.ref }}...HEAD > changed_files.txt | |
| echo "Changed files:" | |
| cat changed_files.txt | |
| grep '^docs/.*\.md$' changed_files.txt > docs_changed.txt || echo "No docs changed" | |
| - name: Get file contents and diffs | |
| id: get-diffs | |
| run: | | |
| mkdir -p /tmp/diffs | |
| touch /tmp/diffs/changes.txt | |
| # Capture all changed files and their diffs | |
| while IFS= read -r file; do | |
| echo "=== $file ===" >> /tmp/diffs/changes.txt | |
| git diff origin/${{ github.event.pull_request.base.ref }}...HEAD -- "$file" >> /tmp/diffs/changes.txt | |
| echo -e "\n\n" >> /tmp/diffs/changes.txt | |
| done < changed_files.txt | |
| # Always run - let Claude decide if docs are needed | |
| echo "skip=false" >> $GITHUB_OUTPUT | |
| - name: Checkout cloudflare-docs repository | |
| if: steps.get-diffs.outputs.skip != 'true' | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: cloudflare/cloudflare-docs | |
| token: ${{ secrets.AGENTS_GITHUB_TOKEN }} | |
| path: cloudflare-docs | |
| - name: Create branch in cloudflare-docs | |
| if: steps.get-diffs.outputs.skip != 'true' | |
| run: | | |
| cd cloudflare-docs | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git checkout -b sync-docs-pr-${{ github.event.pull_request.number }} | |
| - name: Create prompt for Claude Code | |
| if: steps.get-diffs.outputs.skip != 'true' | |
| id: create-prompt | |
| run: | | |
| cat > /tmp/claude_prompt.md << EOF | |
| # Intelligent Documentation Sync Task | |
| ## Context | |
| - **Source Repository:** ${{ github.repository }} | |
| - **Original PR:** #${{ github.event.pull_request.number }} | |
| - **PR Title:** ${{ github.event.pull_request.title }} | |
| - **PR Description:** | |
| ${{ github.event.pull_request.body }} | |
| ## Changed Files and Diffs | |
| $(cat /tmp/diffs/changes.txt) | |
| ## Your Task: Evaluate and Act | |
| You have access to two repositories: | |
| 1. The current directory (our main repo at ${{ github.repository }}) | |
| 2. ./cloudflare-docs (already cloned with branch sync-docs-pr-${{ github.event.pull_request.number }} checked out) | |
| **Step 1: Evaluate if Documentation Sync is Needed** | |
| Please review the changes in this PR and determine if they require documentation updates in cloudflare-docs: | |
| - **DO sync if:** | |
| - Documentation files in docs/ were directly changed | |
| - New public API features or functions were added | |
| - Breaking changes that affect user-facing behavior | |
| - New configuration options or environment variables | |
| - New examples or usage patterns that should be documented | |
| - Bug fixes that clarify documented behavior | |
| - **DO NOT sync if:** | |
| - Only internal code refactoring with no behavior changes | |
| - Test-only changes | |
| - CI/workflow changes | |
| - Minor typo fixes in code comments | |
| - Internal dependency updates with no API changes | |
| **Step 2: If Documentation Sync is Needed** | |
| If you determine documentation updates are required, YOU MUST COMPLETE ALL STEPS: | |
| 1. Navigate to ./cloudflare-docs (already cloned, branch sync-docs-pr-${{ github.event.pull_request.number }} checked out) | |
| 2. Adapt changes for cloudflare-docs repository structure and style | |
| 3. Create or update the appropriate markdown files | |
| 4. Ensure content follows cloudflare-docs conventions | |
| 5. **CRITICAL - Commit changes:** | |
| Run: `cd cloudflare-docs && git add . && git commit -m "Sync docs from PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}"` | |
| 6. **CRITICAL - Push to remote:** | |
| Run: `cd cloudflare-docs && git push origin sync-docs-pr-${{ github.event.pull_request.number }}` | |
| 7. **CRITICAL - Create PR in cloudflare-docs:** | |
| Run: `gh pr create --repo cloudflare/cloudflare-docs --base main --head sync-docs-pr-${{ github.event.pull_request.number }} --title "📚 Sync docs from ${{ github.repository }}#${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}" --body "🤖 Automated sync from https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}"` | |
| 8. **CRITICAL - Comment on original PR (or edit existing comment):** | |
| Get the docs PR URL, then create or update comment: | |
| ```bash | |
| DOCS_PR_URL=$(gh pr list --repo cloudflare/cloudflare-docs --head sync-docs-pr-${{ github.event.pull_request.number }} --json url --jq '.[0].url') | |
| # Check if bot comment already exists (look for comments from github-actions bot containing "Documentation sync") | |
| EXISTING_COMMENT_ID=$(gh pr view ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --json comments --jq '.comments[] | select(.author.login == "github-actions" and (.body | contains("Documentation sync"))) | .id' | head -1) | |
| COMMENT_BODY="📚 **Documentation sync PR:** $DOCS_PR_URL\n\n_This comment will be updated as the PR changes._" | |
| if [ -n "$EXISTING_COMMENT_ID" ]; then | |
| # Edit existing comment | |
| gh api --method PATCH /repos/${{ github.repository }}/issues/comments/$EXISTING_COMMENT_ID -f body="$COMMENT_BODY" | |
| else | |
| # Create new comment | |
| gh pr comment ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --body "$COMMENT_BODY" | |
| fi | |
| ``` | |
| ⚠️ THE TASK IS NOT COMPLETE UNTIL ALL 8 STEPS ARE DONE. Do not stop after editing files. | |
| ## Documentation Writing Guidelines (Diátaxis Framework) | |
| When writing the documentation content, adapt your approach based on what changed: | |
| **For a single function/method:** | |
| - **Reference**: Technical description - signature, parameters, return types, behavior | |
| - **Example**: Concise code snippet showing usage in context | |
| - **Use cases**: Brief bullets on when/why to use it (if not obvious) | |
| - **DO NOT** create separate "how-to" sections - integrate examples into the reference | |
| **For new features/workflows (multiple related functions):** | |
| - **Reference**: Complete API docs for all functions | |
| - **How-to guide**: Step-by-step guide for real-world tasks | |
| - **Explanation**: Architecture, design decisions, alternatives | |
| **For breaking changes:** | |
| - **Reference**: Updated API documentation | |
| - **How-to**: Migration guide (before/after) | |
| - **Explanation**: Why changed, implications | |
| **Key principles:** | |
| - Single functions = reference + example (concise) | |
| - Multi-step workflows = separate how-to guides | |
| - Keep reference neutral and factual | |
| - Don't overexplain simple functions | |
| **Step 3: Provide Clear Output** | |
| Clearly state your decision: | |
| - If syncing: Explain what documentation changes you're making and why | |
| - If not syncing: Explain why documentation updates aren't needed for this PR | |
| ## Important Notes | |
| - Use the GH_TOKEN environment variable for authentication with gh CLI | |
| - Adapt paths, links, and references as needed for cloudflare-docs structure | |
| - Follow existing patterns in the cloudflare-docs repository | |
| - Be conservative but thorough - when in doubt, create the sync PR for human review | |
| Begin your evaluation now. | |
| EOF | |
| echo "prompt<<PROMPT_EOF" >> $GITHUB_OUTPUT | |
| cat /tmp/claude_prompt.md >> $GITHUB_OUTPUT | |
| echo "PROMPT_EOF" >> $GITHUB_OUTPUT | |
| - name: Run Claude Code to create adapted PR | |
| if: steps.get-diffs.outputs.skip != 'true' | |
| uses: anthropics/claude-code-action@v1 | |
| with: | |
| anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| prompt: ${{ steps.create-prompt.outputs.prompt }} | |
| claude_args: "--allowed-tools Bash,Edit" | |
| env: | |
| GH_TOKEN: ${{ secrets.AGENTS_GITHUB_TOKEN }} |