---
name: Build GH-Pages

on:
  pull_request:
    branches: [master]
    types: [opened, synchronize, reopened]
  push:
    branches: [master]
  workflow_dispatch:

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

jobs:
  update_pages:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Checkout gh-pages
        uses: actions/checkout@v4
        with:
          ref: gh-pages
          path: gh-pages
          persist-credentials: false  # otherwise, the token used is the GITHUB_TOKEN, instead of the personal token
          fetch-depth: 0  # otherwise, will fail to push refs to dest repo

      - name: Prepare gh-pages
        run: |
          # empty contents
          rm -f -r ./gh-pages/*

          # copy template back to pages
          cp -f -r ./gh-pages-template/. ./gh-pages/

      - name: Upload Artifacts
        if: ${{ github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
        uses: actions/upload-artifact@v4
        with:
          name: gh-pages
          if-no-files-found: error  # 'warn' or 'ignore' are also available, defaults to `warn`
          path: |
            ${{ github.workspace }}/gh-pages
            !**/*.git

      - name: Deploy to gh-pages
        if: >-
          (github.event_name == 'push' && github.ref == 'refs/heads/master') ||
          (github.event_name == 'workflow_dispatch')
        uses: actions-js/push@v1.5
        with:
          github_token: ${{ secrets.GH_BOT_TOKEN }}
          author_email: ${{ secrets.GH_BOT_EMAIL }}
          author_name: ${{ secrets.GH_BOT_NAME }}
          directory: gh-pages
          branch: gh-pages
          force: false
          message: sync gh-pages to ${{ github.sha }}