docs: fix up edge cases with links in notebooks #6591
This file contains 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: 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/[email protected] | |
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_TOKEN}@github.com/langchain-ai/mkdocs-material-insiders.git" \ | |
"git+https://github.com/benjamincburns/markdown-exec.git@cc0d39d737e5ffd4b83d23cd8729d7ea16e363c8" | |
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: 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: 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 | |
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://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 $(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://github\.com/.*" \ | |
--check-links-ignore "/.*\.(ipynb|html)$" \ | |
--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 |