name: Publish docs via GitHub Pages
on:
  push:
    branches:
      - master
    tags:
      - v*
  workflow_dispatch:
    inputs:
      set_default_alias:
        description: 'Alias to set as default (e.g. latest, master)'
        required: false
        default: 'latest'

permissions:
  contents: write

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Configure Git Credentials
        run: |
          git config user.name github-actions[bot]
          git config user.email 41898282+github-actions[bot]@users.noreply.github.com

      - uses: actions/setup-python@v6
        with:
          python-version: 3.x

      - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV

      - uses: actions/cache@v4
        with:
          key: mkdocs-material-${{ env.cache_id }}
          path: .cache
          restore-keys: |
            mkdocs-material-

      - name: Install dependencies
        run: pip install mkdocs-material mike

      - name: Deploy (master)
        if: github.ref == 'refs/heads/master'
        run: |
          mike deploy --push --update-aliases master

      - name: Deploy (tag)
        if: startsWith(github.ref, 'refs/tags/v')
        run: |
          version=${GITHUB_REF#refs/tags/}
          mike deploy --push --update-aliases $version latest --title "$version"
          mike set-default --push latest

      - name: Set Default (Manual)
        if: github.event_name == 'workflow_dispatch' && github.event.inputs.set_default_alias != ''
        run: |
          mike set-default --push ${{ github.event.inputs.set_default_alias }}
