From 06f914241991f97003b40e2cb44fd7651ccfed47 Mon Sep 17 00:00:00 2001 From: Lauren Hirata Singh Date: Thu, 16 Oct 2025 14:01:54 -0400 Subject: [PATCH] chore(docs): Fix redirects (#6292) --- .github/workflows/deploy_docs.yml | 88 ++----------------------------- docs/_scripts/notebook_hooks.py | 23 ++++++++ 2 files changed, 28 insertions(+), 83 deletions(-) diff --git a/.github/workflows/deploy_docs.yml b/.github/workflows/deploy_docs.yml index 462d1e663..9b805039b 100644 --- a/.github/workflows/deploy_docs.yml +++ b/.github/workflows/deploy_docs.yml @@ -1,12 +1,9 @@ -name: Deploy Docs +name: Deploy Docs Redirects on: push: branches: - main - pull_request: - branches: - - main workflow_dispatch: permissions: @@ -23,18 +20,6 @@ defaults: working-directory: docs jobs: - get-changed-files: - runs-on: ubuntu-latest - outputs: - changed-files: ${{ steps.changed-files.outputs.added_modified }} - steps: - - uses: actions/checkout@v5 - - name: Get changed files - id: changed-files - uses: Ana06/get-changed-files@v2.3.0 - with: - filter: "docs/docs/**" - deploy: runs-on: ubuntu-latest timeout-minutes: 10 # Job will be cancelled if it runs for more than 10 minutes @@ -62,84 +47,21 @@ jobs: uv run pip install "git+https://${GITHUB_TOKEN}@github.com/langchain-ai/mkdocs-material-insiders.git" fi - - name: Run unit tests - # Run unit tests on the docs build pipeline - run: make tests - - name: Lint Docs - # This step lints the docs using the existing linting set up. - # It should be very fast and should not require any external services. - run: make lint-docs - name: Build llms-text run: make llms-text - - name: Build site - run: | - # If this is main branch, then we want to download stats. we do this - # with the env variable DOWNLOAD_STATS=true - if [ "${{ github.ref }}" == "refs/heads/main" ]; then - DOWNLOAD_STATS=true make build-docs - else - make build-docs - fi + + - name: Build site (redirects only) + run: make build-docs env: - MKDOCS_GIT_COMMITTERS_APIKEY: ${{ secrets.MKDOCS_GIT_COMMITTERS_APIKEY }} OPENAI_API_KEY: sf-proj-1234567890 # fake placeholder, shouldn't actually be used ANTHROPIC_API_KEY: sk-ant-api03-1234567890 # fake placeholder, shouldn't actually be used - - name: Check links in notebooks - env: - LANGCHAIN_API_KEY: test - if: github.event_name == 'schedule' - run: | - if [ "${{ github.event_name }}" == "schedule" ]; then - echo "Running link check on all HTML files matching notebooks in docs directory..." - uv run pytest -v \ - --check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \ - --check-links-ignore "https://academy\.langchain\.com/.*" \ - --check-links-ignore "https://x.com/.*" \ - --check-links-ignore "https://twitter.com/.*" \ - --check-links-ignore "https://github\.com/.*" \ - --check-links-ignore "http://localhost:8123/.*" \ - --check-links-ignore "http://localhost:2024.*" \ - --check-links-ignore "http://127.0.0.1:.*" \ - --check-links-ignore "/.*\.(ipynb|html)$" \ - --check-links-ignore "https://python\.langchain\.com/.*" \ - --check-links-ignore "https://openai\.com/.*" \ - --check-links-ignore "https://www\.uber\.com/.*" \ - --check-links-ignore "https://pepy\.tech/.*" \ - --check-links-ignore "docs/docs/static/wordmark_*" \ - --check-links $(find site -name "index.html" | grep -v 'storm/index.html') - - else - echo "Fetching changes from origin/main..." - git fetch origin main - echo "Checking for changed notebook files..." - CHANGED_FILES=$(git diff --name-only --diff-filter=d origin/main | grep 'docs/docs/.*\.ipynb$' | grep -v 'storm.ipynb' | sed -E 's|^docs/docs/|site/|; s/\.ipynb$/\/index.html/' || true) - echo "Changed files: ${CHANGED_FILES}" - if [ -n "${CHANGED_FILES}" ]; then - echo "Running link check on HTML files matching changed notebook files..." - uv run pytest -v \ - --check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \ - --check-links-ignore "https://academy\.langchain\.com/.*" \ - --check-links-ignore "http://localhost:8123/.*" \ - --check-links-ignore "http://localhost:2024.*" \ - --check-links-ignore "http://127.0.0.1:.*" \ - --check-links-ignore "https://x.com/.*" \ - --check-links-ignore "https://twitter.com/.*" \ - --check-links-ignore "https://github\.com/.*" \ - --check-links-ignore "/.*\.(ipynb|html)$" \ - --check-links-ignore "docs/docs/static/wordmark_*" \ - --check-links ${CHANGED_FILES} \ - || ([ $? = 5 ] && exit 0 || exit $?) - else - echo "No notebook files changed." - fi - fi - name: Configure GitHub Pages if: github.ref == 'refs/heads/main' uses: actions/configure-pages@v5 - name: Upload Pages Artifact - # if: github.ref == 'refs/heads/main' + if: github.ref == 'refs/heads/main' uses: actions/upload-pages-artifact@v4 with: path: ./docs/site/ diff --git a/docs/_scripts/notebook_hooks.py b/docs/_scripts/notebook_hooks.py index b40445d8b..d671edf4e 100644 --- a/docs/_scripts/notebook_hooks.py +++ b/docs/_scripts/notebook_hooks.py @@ -847,6 +847,29 @@ def on_post_build(config): _write_html(site_dir, old_html_path, new_html_path) + # Create root index.html redirect + root_redirect_html = """ + + + + Redirecting to LangGraph Documentation + + + + + + +

Documentation has moved

+

The LangGraph documentation has moved to docs.langchain.com.

+

Redirecting you now...

+ + +""" + + root_index_path = os.path.join(site_dir, "index.html") + with open(root_index_path, "w", encoding="utf-8") as f: + f.write(root_redirect_html) + # Create server-side catch-all redirect file for Netlify/Cloudflare Pages # This handles any pages not explicitly mapped in REDIRECT_MAP redirects_content = """# Netlify/Cloudflare Pages redirect rules