# Copyright (c) 2020 Linaro Limited.
# SPDX-License-Identifier: Apache-2.0

name: Documentation Build

on:
  schedule:
  - cron: '0 */3 * * *'
  push:
    tags:
    - v*
  pull_request:
    paths:
    - 'doc/**'
    - '**.rst'
    - 'include/**'
    - 'kernel/include/kernel_arch_interface.h'
    - 'lib/libc/**'
    - 'subsys/testsuite/ztest/include/**'
    - 'tests/**'
    - '**/Kconfig*'
    - 'west.yml'
    - '.github/workflows/doc-build.yml'
    - 'scripts/dts/**'
    - 'scripts/requirements-doc.txt'

env:
  # NOTE: west docstrings will be extracted from the version listed here
  WEST_VERSION: 0.14.0
  # The latest CMake available directly with apt is 3.18, but we need >=3.20
  # so we fetch that through pip.
  CMAKE_VERSION: 3.20.5
  DOXYGEN_VERSION: 1.9.4

jobs:
  doc-build-html:
    name: "Documentation Build (HTML)"
    runs-on: ubuntu-20.04
    timeout-minutes: 45
    concurrency:
      group: doc-build-html-${{ github.ref }}
      cancel-in-progress: true

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

    - name: install-pkgs
      run: |
        sudo apt-get update
        sudo apt-get install -y ninja-build graphviz libclang1-9 libclang-cpp9
        wget --no-verbose https://downloads.sourceforge.net/project/doxygen/rel-${DOXYGEN_VERSION}/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz
        tar xf doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz
        echo "${PWD}/doxygen-${DOXYGEN_VERSION}/bin" >> $GITHUB_PATH

    - name: cache-pip
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: pip-${{ hashFiles('scripts/requirements-doc.txt') }}

    - name: install-pip
      run: |
        sudo pip3 install -U setuptools wheel pip
        pip3 install -r scripts/requirements-doc.txt
        pip3 install west==${WEST_VERSION}
        pip3 install cmake==${CMAKE_VERSION}

    - name: west setup
      run: |
        west init -l .

    - name: build-docs
      run: |
        if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then
          DOC_TAG="release"
        else
          DOC_TAG="development"
        fi

        if [[ "${{ github.event_name }}" == "pull_request" ]]; then
          DOC_TARGET="html-fast"
        else
          DOC_TARGET="html"
        fi

        DOC_TAG=${DOC_TAG} SPHINXOPTS="-q -W -t publish" make -C doc ${DOC_TARGET}

    - name: compress-docs
      run: |
        tar cfJ html-output.tar.xz --directory=doc/_build html

    - name: upload-build
      uses: actions/upload-artifact@v3
      with:
        name: html-output
        path: html-output.tar.xz

    - name: process-pr
      if: github.event_name == 'pull_request'
      run: |
        REPO_NAME="${{ github.event.repository.name }}"
        PR_NUM="${{ github.event.pull_request.number }}"
        DOC_URL="https://builds.zephyrproject.io/${REPO_NAME}/pr/${PR_NUM}/docs/"

        echo "${PR_NUM}" > pr_num
        echo "Documentation will be available shortly at: ${DOC_URL}" >> $GITHUB_STEP_SUMMARY

    - name: upload-pr-number
      uses: actions/upload-artifact@v2
      if: github.event_name == 'pull_request'
      with:
        name: pr_num
        path: pr_num

  doc-build-pdf:
    name: "Documentation Build (PDF)"
    runs-on: ubuntu-20.04
    container: texlive/texlive:latest
    timeout-minutes: 45
    concurrency:
      group: doc-build-pdf-${{ github.ref }}
      cancel-in-progress: true

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

    - name: install-pkgs
      run: |
        apt-get update
        apt-get install -y python3-pip ninja-build doxygen graphviz librsvg2-bin

    - name: cache-pip
      uses: actions/cache@v1
      with:
        path: ~/.cache/pip
        key: pip-${{ hashFiles('scripts/requirements-doc.txt') }}

    - name: install-pip
      run: |
        pip3 install -U setuptools wheel pip
        pip3 install -r scripts/requirements-doc.txt
        pip3 install west==${WEST_VERSION}
        pip3 install cmake==${CMAKE_VERSION}

    - name: west setup
      run: |
        west init -l .

    - name: build-docs
      run: |
        if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then
          DOC_TAG="release"
        else
          DOC_TAG="development"
        fi

        DOC_TAG=${DOC_TAG} SPHINXOPTS="-q -j auto" LATEXMKOPTS="-quiet -halt-on-error" make -C doc pdf

    - name: upload-build
      uses: actions/upload-artifact@v3
      with:
        name: pdf-output
        path: doc/_build/latex/zephyr.pdf
