176 lines
7.8 KiB
YAML
176 lines
7.8 KiB
YAML
name: Docs - Sync guides on SDK changes
|
|
|
|
on:
|
|
push:
|
|
branches: [next]
|
|
paths:
|
|
- 'ts/packages/core/src/**'
|
|
- 'ts/packages/cli/src/**'
|
|
- 'ts/packages/providers/*/src/**'
|
|
- 'python/composio/**'
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
sync-docs:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 30
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
id-token: write
|
|
|
|
steps:
|
|
- name: Generate GitHub App token
|
|
id: app-token
|
|
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
with:
|
|
client-id: ${{ vars.RELEASE_BOT_CLIENT_ID }}
|
|
private-key: ${{ secrets.RELEASE_BOT_APP_PRIVATE_KEY }}
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
with:
|
|
token: ${{ steps.app-token.outputs.token }}
|
|
fetch-depth: 0
|
|
|
|
- name: Get SDK diff
|
|
id: diff
|
|
env:
|
|
BEFORE: ${{ github.event.before }}
|
|
AFTER: ${{ github.event.after }}
|
|
run: |
|
|
if [ -z "$AFTER" ] || ! git cat-file -e "$AFTER" 2>/dev/null; then
|
|
AFTER=$(git rev-parse HEAD)
|
|
fi
|
|
|
|
if [ -z "$BEFORE" ] || [[ "$BEFORE" =~ ^0+$ ]] || ! git cat-file -e "$BEFORE" 2>/dev/null; then
|
|
echo "BEFORE ref unavailable — falling back to HEAD~1"
|
|
BEFORE=$(git rev-parse HEAD~1)
|
|
fi
|
|
|
|
git diff "$BEFORE".."$AFTER" -- \
|
|
ts/packages/core/src/ \
|
|
ts/packages/cli/src/ \
|
|
ts/packages/providers/*/src/ \
|
|
python/composio/ > /tmp/sdk-diff.patch
|
|
|
|
if [ ! -s /tmp/sdk-diff.patch ]; then
|
|
echo "has_changes=false" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "has_changes=true" >> "$GITHUB_OUTPUT"
|
|
echo "$(wc -l < /tmp/sdk-diff.patch) lines of SDK changes"
|
|
fi
|
|
|
|
- name: Check docs for staleness
|
|
if: steps.diff.outputs.has_changes == 'true'
|
|
uses: anthropics/claude-code-action/base-action@536f2c32a39763739000b0e1ac69ca2647d97ce9 # v1.0.170
|
|
with:
|
|
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
claude_args: |
|
|
--allowedTools "Read,Write,Edit,Glob,Grep"
|
|
prompt: |
|
|
SDK source code was just updated. Check if any documentation needs to change.
|
|
|
|
1. Read the SDK diff at /tmp/sdk-diff.patch to understand what changed
|
|
2. Focus on user-facing changes: new/renamed/removed methods, changed parameters, new features, changed behavior. Skip internal refactors, test changes, and type-only changes.
|
|
3. If there are user-facing changes, search docs/content/docs/ for pages that reference the affected APIs, patterns, or features
|
|
4. Update any docs that would be stale or incorrect after this SDK change — guides, FAQs, examples, quickstart, etc.
|
|
5. Do NOT touch docs/content/reference/ (those are auto-generated separately)
|
|
6. Do NOT touch docs/content/changelog/ (changelogs are written separately)
|
|
7. Do NOT edit docs/package.json or docs/bun.lock — the `@composio/*` version pins are managed automatically by the dependency-realignment step below, which runs after you and overwrites any changes you make to them
|
|
8. If no docs changes are needed, make no file changes
|
|
9. Do NOT add type assertions or casts to force a snippet to compile against an API that is missing from the published `@composio/*` package. If a feature isn't released yet, document the released behavior and let the Twoslash build flag the gap.
|
|
|
|
- name: Setup Node.js, pnpm, Bun
|
|
if: steps.diff.outputs.has_changes == 'true'
|
|
uses: ./.github/actions/setup-node-pnpm-bun
|
|
|
|
- name: Align docs SDK deps with latest published releases
|
|
if: steps.diff.outputs.has_changes == 'true'
|
|
working-directory: ./docs
|
|
run: |
|
|
# Docs is a standalone Bun app outside the pnpm workspace: it pins
|
|
# published @composio/* versions instead of linking workspace source,
|
|
# so its Twoslash snippets and example apps only ever demonstrate APIs
|
|
# that users can actually install. Realign those pins to the latest
|
|
# released versions on every sync so they never drift behind the SDK
|
|
# (the drift that previously forced workaround casts into snippets).
|
|
# This runs AFTER the content pass so the committed pins are always
|
|
# authoritative — even if that pass edited package.json/bun.lock, this
|
|
# step resets the @composio/* pins and regenerates the lockfile.
|
|
# The PR's Twoslash build (docs-typescript-check.yml) gates the result:
|
|
# if a documented feature isn't published yet, the build fails loudly
|
|
# instead of the gap being papered over.
|
|
set -euo pipefail
|
|
# Discard any edits the content pass made to these managed files so the
|
|
# realignment is the sole source of truth for the dependency pins.
|
|
git checkout -- package.json bun.lock
|
|
changed=0
|
|
for section in dependencies devDependencies; do
|
|
pkgs=$(jq -r --arg s "$section" '.[$s] // {} | keys[] | select(startswith("@composio/"))' package.json)
|
|
for pkg in $pkgs; do
|
|
latest=$(npm view "$pkg" version 2>/dev/null || true)
|
|
if [ -z "$latest" ]; then
|
|
echo "::warning::could not resolve a published version for $pkg; leaving its pin unchanged"
|
|
continue
|
|
fi
|
|
current=$(jq -r --arg s "$section" --arg p "$pkg" '.[$s][$p]' package.json)
|
|
want="^$latest"
|
|
if [ "$current" != "$want" ]; then
|
|
echo "$section.$pkg: $current -> $want"
|
|
npm pkg set "$section.$pkg=$want"
|
|
changed=1
|
|
fi
|
|
done
|
|
done
|
|
if [ "$changed" -eq 1 ]; then
|
|
bun install
|
|
else
|
|
echo "All @composio/* pins already match the latest published releases."
|
|
fi
|
|
|
|
- name: Create PR if changed
|
|
id: create-pr
|
|
if: steps.diff.outputs.has_changes == 'true'
|
|
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
|
|
with:
|
|
token: ${{ steps.app-token.outputs.token }}
|
|
commit-message: 'docs: update guides for SDK changes'
|
|
title: 'docs: update guides for SDK changes'
|
|
body: |
|
|
## Summary
|
|
Automated docs update triggered by SDK source changes on `next`.
|
|
|
|
- Claude reviewed the SDK diff and updated guides, FAQs, or examples
|
|
that reference changed APIs or features.
|
|
- The docs `@composio/*` dependencies were realigned to their latest
|
|
published releases so Twoslash snippets and example apps validate
|
|
against versions users can actually install.
|
|
|
|
## Review checklist
|
|
- [ ] Changes accurately reflect the new SDK behavior
|
|
- [ ] No unrelated docs were modified
|
|
- [ ] Code examples are correct and complete
|
|
- [ ] If a documented feature is not published yet, the Twoslash build
|
|
will fail — wait for the release instead of working around it
|
|
|
|
Generated by Claude Code via GitHub Actions.
|
|
branch: docs/auto-sdk-sync
|
|
base: next
|
|
add-paths: |
|
|
docs/content/docs/
|
|
docs/package.json
|
|
docs/bun.lock
|
|
|
|
- name: Request review from pusher
|
|
if: steps.create-pr.outputs.pull-request-number
|
|
continue-on-error: true
|
|
env:
|
|
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
PR_NUMBER: ${{ steps.create-pr.outputs.pull-request-number }}
|
|
AUTHOR: ${{ github.actor }}
|
|
run: gh pr edit "$PR_NUMBER" --add-reviewer "$AUTHOR"
|