name: publish-docs

on:
  push:
    branches:
      - master
      # release branches have names like 0.8.x, 0.9.x, ...
      - "[0-9]+.[0-9]+.x"
    # At this day, GitHub doesn't support YAML anchors, d'oh!
    paths:
      - "docs/**"
      - "docsgen/**"
      - "cli/**"
      - "rpc/**"
      - ".github/workflows/publish-docs.yaml"
  # On branch or tag creation (will be filtered by the publish-determination job)
  create:

jobs:
  publish-determination:
    runs-on: ubuntu-latest
    outputs:
      result: ${{ steps.determination.outputs.result }}
    steps:
      - name: Determine if documentation should be published on this workflow run
        id: determination
        run: |
          RELEASE_BRANCH_REGEX="refs/heads/[0-9]+.[0-9]+.x"
          if [[ "${{ github.event_name }}" == "push" || ( "${{ github.event_name }}" == "create" && "${{ github.ref }}" =~ $RELEASE_BRANCH_REGEX ) ]]; then
            RESULT="true"
          else
            RESULT="false"
          fi

          echo "::set-output name=result::$RESULT"

  publish:
    runs-on: ubuntu-latest
    needs: publish-determination
    if: needs.publish-determination.outputs.result == 'true'

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

      - name: Install Taskfile
        uses: Arduino/actions/setup-taskfile@master
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          version: 3.x

      - name: Setup Go
        uses: actions/setup-go@v2
        with:
          go-version: "1.14"

      - name: Install Go dependencies
        run: |
          go version
          go get -u github.com/pseudomuto/protoc-gen-doc/cmd/protoc-gen-doc

      - name: Install protoc compiler
        uses: arduino/setup-protoc@v1
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

      - name: Setup Python
        uses: actions/setup-python@v1
        with:
          python-version: "3.8"
          architecture: "x64"

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

      - name: Install Python dependencies
        run: |
          python3 -m pip install --upgrade pip
          python3 -m pip install -r ./requirements_docs.txt

      - name: Publish docs
        # Determine docs version for the commit pushed and publish accordingly using Mike.
        # Publishing implies creating a git commit on the gh-pages branch, we let
        # ArduinoBot own these commits.
        run: |
          git config --global user.email "bot@arduino.cc"
          git config --global user.name "ArduinoBot"
          git fetch --no-tags --prune --depth=1 origin +refs/heads/gh-pages:refs/remotes/origin/gh-pages
          python docs/build.py
