name: Release Documentation

on:
  push:
    branches:
      - main
    paths:
      - 'docs/**'
      - 'python/sglang/version.py'
  workflow_dispatch:

jobs:
  execute-notebooks:
    runs-on: 1-gpu-runner
    if: github.repository == 'sgl-project/sglang'
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      - name: Install dependencies
        run: |
          bash scripts/ci_install_dependency.sh
          pip install -r docs/requirements.txt

      - name: Setup Jupyter Kernel
        run: |
          python -m ipykernel install --user --name python3 --display-name "Python 3"

      - name: Execute notebooks
        run: |
          cd docs
          for nb in *.ipynb; do
            if [ -f "$nb" ]; then
              echo "Executing $nb"
              jupyter nbconvert --to notebook --execute --inplace "$nb" \
                --ExecutePreprocessor.timeout=600 \
                --ExecutePreprocessor.kernel_name=python3
            fi
          done

  build-and-deploy:
    needs: execute-notebooks
    if: github.repository == 'sgl-project/sglang'
    runs-on: 1-gpu-runner
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.9'

      - name: Install dependencies
        run: |
          bash scripts/ci_install_dependency.sh
          pip install -r docs/requirements.txt
          apt-get update
          apt-get install -y pandoc

      - name: Build documentation
        run: |
          cd docs
          make html

      - name: Push to sgl-project.github.io
        env:
          GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}
        run: |
          cd docs/_build/html
          git clone https://$GITHUB_TOKEN@github.com/sgl-project/sgl-project.github.io.git ../sgl-project.github.io
          cp -r * ../sgl-project.github.io
          cd ../sgl-project.github.io
          git config user.name "zhaochenyang20"
          git config user.email "zhaochenyang20@gmail.com"
          git add .
          git commit -m "Update $(date +'%Y-%m-%d %H:%M:%S')"
          git push https://$GITHUB_TOKEN@github.com/sgl-project/sgl-project.github.io.git main
          cd ..
          rm -rf sgl-project.github.io