name: Sync Documentation Files on: push: branches: - main workflow_dispatch: jobs: sync-docs: runs-on: ubuntu-latest if: github.event_name == 'workflow_dispatch' || contains(github.event.head_commit.modified, 'apps/docs/') || contains(github.event.head_commit.added, 'apps/docs/') || contains(github.event.head_commit.removed, 'apps/docs/') steps: - name: Checkout source repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Check for MDX files in apps/docs id: check-files run: | if find apps/docs -name "*.mdx" -type f | head -1 | grep -q .; then echo "docs_found=true" >> $GITHUB_OUTPUT echo "Found MDX files to sync" else echo "docs_found=false" >> $GITHUB_OUTPUT echo "No MDX files found in apps/docs" fi - name: Clone LangChain docs repository if: steps.check-files.outputs.docs_found == 'true' run: | git clone https://x-access-token:${{ secrets.LANGCHAIN_DOCS_TOKEN }}@github.com/langchain-ai/docs.git langchain-docs cd langchain-docs git config user.name "OpenSWE Bot" git config user.email "openswe-bot@langchain.com" - name: Create branch for documentation sync if: steps.check-files.outputs.docs_found == 'true' run: | cd langchain-docs BRANCH_NAME="sync-openswe-docs-$(date +%Y%m%d-%H%M%S)" echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV git checkout -b "$BRANCH_NAME" - name: Prepare target directory if: steps.check-files.outputs.docs_found == 'true' run: | cd langchain-docs # Remove existing content to ensure clean sync rm -rf src/labs/swe mkdir -p src/labs/swe - name: Copy MDX files to LangChain docs if: steps.check-files.outputs.docs_found == 'true' run: | # Copy all .mdx files from apps/docs to the target directory, preserving structure find apps/docs -name "*.mdx" -type f | while read file; do # Get the relative path from apps/docs rel_path="${file#apps/docs/}" # Create the directory structure in target target_dir="langchain-docs/src/labs/swe/$(dirname "$rel_path")" mkdir -p "$target_dir" # Copy the file cp "$file" "langchain-docs/src/labs/swe/$rel_path" done # List copied files for verification echo "Copied MDX files:" find langchain-docs/src/labs/swe/ -name "*.mdx" -type f echo "Directory structure:" tree langchain-docs/src/labs/swe/ || find langchain-docs/src/labs/swe/ -type d - name: Commit changes if: steps.check-files.outputs.docs_found == 'true' id: commit run: | cd langchain-docs git add src/labs/swe/ if git diff --staged --quiet; then echo "No changes to commit" echo "has_changes=false" >> $GITHUB_OUTPUT else git commit -m "Sync OpenSWE documentation files - Updated MDX files from apps/docs/ - Synced at $(date -u '+%Y-%m-%d %H:%M:%S UTC') - Source commit: ${{ github.sha }}" echo "has_changes=true" >> $GITHUB_OUTPUT fi - name: Push branch and create pull request if: steps.check-files.outputs.docs_found == 'true' && steps.commit.outputs.has_changes == 'true' run: | cd langchain-docs git push origin "$BRANCH_NAME" # Create pull request using GitHub CLI gh pr create \ --title "Sync OpenSWE Documentation Files" \ --body "This PR syncs documentation files from the OpenSWE repository. **Changes:** - Updated MDX files from \`apps/docs/\` - Target directory: \`src/labs/swe/\` - Source commit: ${{ github.sha }} - Synced at $(date -u '+%Y-%m-%d %H:%M:%S UTC') **Auto-generated by:** OpenSWE Documentation Sync Workflow" \ --head "$BRANCH_NAME" \ --base main env: GH_TOKEN: ${{ secrets.LANGCHAIN_DOCS_TOKEN }}