# 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: 1.0.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.6

jobs:
  doc-build-html:
    name: "Documentation Build (HTML)"
    runs-on: ubuntu-22.04
    timeout-minutes: 45
    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 update
        sudo apt-get install -y ninja-build graphviz
        wget --no-verbose "https://github.com/doxygen/doxygen/releases/download/Release_${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@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 .
        west update bsim

    - 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@v3
      if: github.event_name == 'pull_request'
      with:
        name: pr_num
        path: pr_num

  doc-build-pdf:
    name: "Documentation Build (PDF)"
    if: github.event_name != 'pull_request'
    runs-on: ubuntu-22.04
    container: texlive/texlive:latest
    timeout-minutes: 60
    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 .
        west update bsim

    - 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
