name: Docs

on:
  push:
    branches: [master, main]
    tags:
      - 'v*'
  pull_request:

jobs:
  docs:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Install uv
      uses: astral-sh/setup-uv@v3
      with:
        enable-cache: true
        cache-dependency-glob: "pyproject.toml"

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: '3.12'

    - name: Install project and dependencies
      run: |
        # This replaces requirements.txt, setup.py build, and pip install .
        # It reads pyproject.toml, builds pycapnp, and installs it into a fast .venv
        uv sync --all-extras

    - name: Build documentation
      run: |
        # uv run executes sphinx within the isolated virtual environment
        uv run sphinx-build docs build/html

    - name: Upload documentation artifact
      uses: actions/upload-artifact@v4
      with:
        name: html-docs
        path: build/html

  deploy:
      needs: docs
      if: startsWith(github.ref, 'refs/tags/v')
      runs-on: ubuntu-latest
      permissions:
        contents: write
      steps:
      - name: Download documentation artifact
        uses: actions/download-artifact@v4
        with:
          name: html-docs
          path: build/html

      - name: Add .nojekyll file
        run: touch build/html/.nojekyll

      - name: Deploy to gh-pages
        uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./build/html
          publish_branch: gh-pages