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 jobs: deploy: runs-on: ubuntu-latest 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: Install dependencies run: | poetry install --with docs poetry run pip install -U pytest pytest-check-links langsmith langchain GitPython - name: Build site run: make build-docs env: MKDOCS_GIT_COMMITTERS_APIKEY: ${{ secrets.MKDOCS_GIT_COMMITTERS_APIKEY }} - 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://x.com/.*" \ --check-links-ignore "https://github\.com/.*" \ --check-links-ignore "/.*\.(ipynb|html)$" \ --check-links $(find docs/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/|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://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