name: docs

on:
  push:
    branches:
      - master
      - v[0-9]+.[0-9]+
    tags:
      - v[0-9]+.[0-9]+.[0-9]+
  pull_request:
    branches:
      - master
      - v[0-9]+.[0-9]+

jobs:
  check:
    outputs:
      continue: ${{ steps.check.outputs.need_to_build }}
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Get commit range (push)
        if: ${{ github.event_name == 'push' }}
        run: |
          echo "COMMIT_RANGE=$GITHUB_SHA" >> $GITHUB_ENV

      - name: Get commit range (pull_request)
        if: ${{ github.event_name == 'pull_request' }}
        run: |
          echo "COMMIT_RANGE=${{ github.event.pull_request.base.sha }}..${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV

      - name: Get file status
        run: |
          set +e
          git diff --name-only $COMMIT_RANGE | grep \
            -e '.github/workflows/docs.yml' \
            -e 'docs/**'
          echo "FILE_CHANGED=$?" >> $GITHUB_ENV

      - name: Check
        id: check
        shell: bash
        run: |
          source ci/env.sh
          eval "$(ci/channel-info.sh)"
          TAG=$CI_TAG

          echo "TAG: $TAG"
          echo "CHANNEL: $CHANNEL"
          echo "FILE_CHANGED: $FILE_CHANGED"

          echo need_to_build="$(
            if [ "$TAG" != '' ]
            then
              echo 1
            elif [ $FILE_CHANGED = 0 ] && ( [ "$CHANNEL" = "beta" ] || [ "$CHANNEL" = "edge" ] )
            then
              echo 1
            else
              echo 0
            fi
          )" >> $GITHUB_OUTPUT

  build_and_deploy:
    needs:
      - check
    if: ${{ needs.check.outputs.continue == 1 }}
    # the name is used by .mergify.yml as well
    name: build & deploy docs
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Setup Node
        uses: actions/setup-node@v3
        with:
          node-version: 16

      - name: Build
        working-directory: docs
        run: |
          npm install
          ./build.sh
        env:
          VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}

  error_reporting:
    needs:
      - check
      - build_and_deploy
    if: failure() && github.event_name == 'push'
    uses: ./.github/workflows/error-reporting.yml
    secrets:
      WEBHOOK: ${{ secrets.SLACK_ERROR_REPORTING_WEBHOOK }}
