mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-08-17 21:25:46 +02:00
180 lines
6.7 KiB
YAML
180 lines
6.7 KiB
YAML
name: Deploy Docs
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- main
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
POETRY_VERSION: "1.7.1"
|
|
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
|
|
concurrency:
|
|
group: "pages"
|
|
cancel-in-progress: false
|
|
|
|
defaults:
|
|
run:
|
|
working-directory: docs
|
|
|
|
jobs:
|
|
get-changed-files:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
changed-files: ${{ steps.changed-files.outputs.added_modified }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Get changed files
|
|
id: changed-files
|
|
uses: Ana06/get-changed-files@v2.3.0
|
|
with:
|
|
filter: "docs/docs/**"
|
|
|
|
run-changed-notebooks:
|
|
needs: get-changed-files
|
|
uses: ./.github/workflows/run_notebooks.yml
|
|
secrets: inherit
|
|
with:
|
|
changed-files: ${{ needs.get-changed-files.outputs.changed-files }}
|
|
|
|
deploy:
|
|
# needs: run-changed-notebooks
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10 # Job will be cancelled if it runs for more than 10 minutes
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.MKDOCS_GITHUB_TOKEN }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up Python + Poetry ${{ env.POETRY_VERSION }}
|
|
uses: "./.github/actions/poetry_setup"
|
|
with:
|
|
python-version: "3.12"
|
|
poetry-version: ${{ env.POETRY_VERSION }}
|
|
cache-key: docs
|
|
|
|
- name: Use Node.js
|
|
uses: actions/setup-node@v3
|
|
with:
|
|
node-version: "22"
|
|
cache: "yarn"
|
|
cache-dependency-path: docs/yarn.lock
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
yarn
|
|
poetry install --with test --with docs --no-root
|
|
poetry run pip install -U \
|
|
pytest \
|
|
pytest-check-links \
|
|
GitPython \
|
|
"git+https://github.com/benjamincburns/markdown-exec.git@cc0d39d737e5ffd4b83d23cd8729d7ea16e363c8"
|
|
|
|
# we run this installation only for internal PRs
|
|
# as GITHUB_TOKEN is not available for PRs from outside contributors
|
|
if [ -n "${GITHUB_TOKEN}" ]; then
|
|
poetry run pip install "git+https://${GITHUB_TOKEN}@github.com/langchain-ai/mkdocs-material-insiders.git"
|
|
fi
|
|
|
|
poetry run jupyter kernelspec list
|
|
poetry run python3 -m ipykernel install --user --name=python3
|
|
npm install -g tslab
|
|
poetry run tslab install --python=python3
|
|
poetry run jupyter kernelspec list
|
|
|
|
- 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
|
|
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
|
|
run: |
|
|
if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ] || ([ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]); then
|
|
echo "Running link check on all HTML files matching notebooks in docs directory..."
|
|
poetry 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..."
|
|
poetry 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@v4
|
|
|
|
- name: Upload Pages Artifact
|
|
# if: github.ref == 'refs/heads/main'
|
|
uses: actions/upload-pages-artifact@v3
|
|
with:
|
|
path: ./docs/site/
|
|
|
|
- name: Deploy to GitHub Pages
|
|
if: github.ref == 'refs/heads/main'
|
|
id: deployment
|
|
uses: actions/deploy-pages@v4
|