# 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.11.1
  # 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

jobs:
  doc-build-html:
    name: "Documentation Build (HTML)"
    runs-on: ubuntu-20.04
    timeout-minutes: 30

    concurrency:
      group: doc-build-html-${{ github.ref }}
      cancel-in-progress: true

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

    - name: install-pkgs
      run: |
        sudo apt-get install -y ninja-build doxygen graphviz

    - name: cache-pip
      uses: actions/cache@v3
      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" 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 "::notice:: Documentation will be available shortly at: ${DOC_URL}"

    - name: upload-pr-number
      uses: actions/upload-artifact@v3
      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: 30
    concurrency:
      group: doc-build-pdf-${{ github.ref }}
      cancel-in-progress: true

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

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

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

    - name: setup-venv
      run: |
        python3 -m venv .venv
        . .venv/bin/activate
        echo PATH=$PATH >> $GITHUB_ENV

    - 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
