name: dev docs

on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

concurrency:
  group: docs-deploy

env:
  FORCE_COLOR: "1"

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v4
      with:
        # Fetch all history for applying timestamps to every page
        fetch-depth: 0

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

    - name: Validate history
      run: python scripts/validate_history.py

    - name: Install UV
      uses: astral-sh/setup-uv@v3

    - name: Install ourself
      run: |
        uv pip install --system -e .
        hatch env create

    - name: Configure Git for GitHub Actions bot
      run: |
        git config --local user.name 'github-actions[bot]'
        git config --local user.email 'github-actions[bot]@users.noreply.github.com'

    - name: Build documentation
      run: hatch -v run docs:build-check
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GH_TOKEN_MKDOCS_MATERIAL_INSIDERS: ${{ secrets.GH_TOKEN_MKDOCS_MATERIAL_INSIDERS }}

    - name: Commit documentation
      run: hatch -v run docs:ci-build dev
      env:
        GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        GH_TOKEN_MKDOCS_MATERIAL_INSIDERS: ${{ secrets.GH_TOKEN_MKDOCS_MATERIAL_INSIDERS }}

    - name: Create archive
      run: git archive -o site.zip gh-pages

    - uses: actions/upload-artifact@v4
      with:
        name: documentation
        path: site.zip

  publish:
    runs-on: ubuntu-latest

    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    needs:
    - build

    steps:
    - uses: actions/download-artifact@v4
      with:
        name: documentation

    - name: Unpack archive
      run: python -m zipfile -e site.zip site

    - uses: peaceiris/actions-gh-pages@v4
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        publish_dir: site
        commit_message: ${{ github.event.head_commit.message }}
        # Write .nojekyll at the root, see:
        # https://help.github.com/en/github/working-with-github-pages/about-github-pages#static-site-generators
        enable_jekyll: false
        # Only deploy if there were changes
        allow_empty_commit: false
