name: deploy

on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths:
      - solution/**
      - lcs/**
      - lcp/**
      - lcof2/**
      - lcof/**
      - lcci/**
      - basic/**

concurrency:
  group: ${{ github.workflow }} - ${{ github.ref }}
  cancel-in-progress: true

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout main branch
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Checkout docs branch
        uses: actions/checkout@v4
        with:
          ref: docs
          path: mkdocs
          fetch-depth: 0

      - name: Sync docs branch content
        run: |
          rsync -a --remove-source-files --exclude='.git' mkdocs/ ./
          rm -rf mkdocs
          mv solution/CONTEST_README.md docs/contest.md
          mv solution/CONTEST_README_EN.md docs-en/contest.md

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

      - name: Setup Python
        uses: actions/setup-python@v5
        with:
          python-version: 3.x

      - name: Restore pip cache
        uses: actions/cache@v4
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-pip-

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

      - name: Install dependencies
        run: |
          python3 -m pip install --upgrade pip
          python3 -m pip install -r requirements.txt
          python3 -m pip install "mkdocs-material[imaging]"
          sudo apt-get install -y pngquant

      - name: Set MKDOCS_API_KEYS
        run: echo "MKDOCS_API_KEYS=${{ secrets.MKDOCS_API_KEYS }}" >> $GITHUB_ENV

      - name: Build site
        run: |
          python3 main.py
          mkdocs build -f mkdocs.yml
          mkdocs build -f mkdocs-en.yml

      - name: Generate CNAME
        run: echo "leetcode.doocs.org" > ./site/CNAME

      - name: Commit committer cache to docs branch
        if: github.ref == 'refs/heads/main'
        env:
          GH_REPO: ${{ github.repository }}
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          CACHE_FILE=".git-committers-cache.json"
          if [[ ! -f "$CACHE_FILE" ]]; then
            echo "Cache file not found; skip commit."
            exit 0
          fi

          echo "Cloning docs branch ..."
          git clone --depth 1 --branch docs "https://x-access-token:${GH_TOKEN}@github.com/${GH_REPO}.git" docs-cache
          cp "$CACHE_FILE" docs-cache/

          cd docs-cache

          git config user.name github-actions[bot]
          git config user.email 41898282+github-actions[bot]@users.noreply.github.com

          git add .git-committers-cache.json
          git commit -m "chore: update committer cache [skip ci]" || echo "No changes to commit"
          git push origin docs

      - name: Upload to GitHub Pages
        uses: actions/upload-pages-artifact@v3
        with:
          path: site

  deploy:
    needs: build
    runs-on: ubuntu-latest
    permissions:
      pages: write
      id-token: write
    environment:
      name: github_pages
      url: ${{ steps.deployment.outputs.page_url }}
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4