name: Build Docs on: push: branches: - main pull_request: types: - opened - synchronize jobs: changes: runs-on: ubuntu-latest # Required permissions permissions: pull-requests: read # Set job outputs to values from filter step outputs: docs: ${{ steps.filter.outputs.docs }} steps: - uses: actions/checkout@v6 # For pull requests it's not necessary to checkout the code but for the main branch it is - uses: dorny/paths-filter@v3 id: filter with: filters: | docs: - README.md - docs/** - docs_src/** - pyproject.toml - uv.lock - mkdocs.yml - mkdocs.env.yml - .github/workflows/build-docs.yml - .github/workflows/deploy-docs.yml - data/** build-docs: needs: - changes if: ${{ needs.changes.outputs.docs == 'true' }} runs-on: ubuntu-latest steps: - name: Dump GitHub context env: GITHUB_CONTEXT: ${{ toJson(github) }} run: echo "$GITHUB_CONTEXT" - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v6 with: python-version-file: ".python-version" - name: Setup uv uses: astral-sh/setup-uv@v7 with: enable-cache: true cache-dependency-glob: | pyproject.toml uv.lock - name: Install docs extras run: uv sync --locked --no-dev --group docs - uses: actions/cache@v5 with: key: mkdocs-cards-${{ github.ref }} path: .cache - name: Verify README run: uv run ./scripts/docs.py verify-readme - name: Build Docs run: uv run ./scripts/docs.py build - uses: actions/upload-artifact@v6 with: name: docs-site path: ./site/** include-hidden-files: true # https://github.com/marketplace/actions/alls-green#why docs-all-green: # This job does nothing and is only used for the branch protection if: always() needs: - build-docs runs-on: ubuntu-latest steps: - name: Decide whether the needed jobs succeeded or failed uses: re-actors/alls-green@release/v1 with: jobs: ${{ toJSON(needs) }} allowed-skips: build-docs