267 lines
8.1 KiB
YAML
267 lines
8.1 KiB
YAML
# Copyright (c) 2020 Linaro Limited.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
name: Documentation Build
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 */3 * * *'
|
|
push:
|
|
tags:
|
|
- v*
|
|
pull_request:
|
|
|
|
env:
|
|
# NOTE: west docstrings will be extracted from the version listed here
|
|
WEST_VERSION: 1.2.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.12.0
|
|
# Job count is set to 2 less than the vCPU count of 16 because the total available RAM is 32GiB
|
|
# and each sphinx-build process may use more than 2GiB of RAM.
|
|
JOB_COUNT: 14
|
|
|
|
jobs:
|
|
doc-file-check:
|
|
name: Check for doc changes
|
|
runs-on: ubuntu-22.04
|
|
if: >
|
|
github.repository_owner == 'zephyrproject-rtos'
|
|
outputs:
|
|
file_check: ${{ steps.check-doc-files.outputs.any_modified }}
|
|
steps:
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 0
|
|
- name: Check if Documentation related files changed
|
|
uses: tj-actions/changed-files@v45
|
|
id: check-doc-files
|
|
with:
|
|
files: |
|
|
doc/
|
|
**.rst
|
|
include/
|
|
kernel/include/kernel_arch_interface.h
|
|
lib/libc/**
|
|
subsys/testsuite/ztest/include/**
|
|
tests/
|
|
**/Kconfig*
|
|
west.yml
|
|
scripts/dts/
|
|
doc/requirements.txt
|
|
.github/workflows/doc-build.yml
|
|
scripts/pylib/pytest-twister-harness/src/twister_harness/device/device_adapter.py
|
|
scripts/pylib/pytest-twister-harness/src/twister_harness/helpers/shell.py
|
|
|
|
doc-build-html:
|
|
name: "Documentation Build (HTML)"
|
|
needs: [doc-file-check]
|
|
if: >
|
|
github.repository_owner == 'zephyrproject-rtos' &&
|
|
( needs.doc-file-check.outputs.file_check == 'true' || github.event_name != 'pull_request' )
|
|
runs-on: ubuntu-22.04
|
|
timeout-minutes: 90
|
|
concurrency:
|
|
group: doc-build-html-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
steps:
|
|
- name: install-pkgs
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y wget python3-pip git ninja-build graphviz lcov
|
|
wget --no-verbose "https://github.com/doxygen/doxygen/releases/download/Release_${DOXYGEN_VERSION//./_}/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz"
|
|
sudo tar xf doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz -C /opt
|
|
echo "/opt/doxygen-${DOXYGEN_VERSION}/bin" >> $GITHUB_PATH
|
|
echo "${HOME}/.local/bin" >> $GITHUB_PATH
|
|
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: ${{ github.event.pull_request.head.sha }}
|
|
fetch-depth: 0
|
|
|
|
- name: Rebase
|
|
if: github.event_name == 'pull_request'
|
|
continue-on-error: true
|
|
env:
|
|
BASE_REF: ${{ github.base_ref }}
|
|
PR_HEAD: ${{ github.event.pull_request.head.sha }}
|
|
run: |
|
|
git config --global user.email "actions@zephyrproject.org"
|
|
git config --global user.name "Github Actions"
|
|
git rebase origin/${BASE_REF}
|
|
git clean -f -d
|
|
git log --graph --oneline HEAD...${PR_HEAD}
|
|
|
|
- name: cache-pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: pip-${{ hashFiles('doc/requirements.txt') }}
|
|
|
|
- name: install-pip
|
|
run: |
|
|
sudo pip3 install -U setuptools wheel pip
|
|
pip3 install -r doc/requirements.txt
|
|
pip3 install west==${WEST_VERSION}
|
|
pip3 install cmake==${CMAKE_VERSION}
|
|
pip3 install coverxygen
|
|
|
|
- name: west setup
|
|
run: |
|
|
west init -l .
|
|
|
|
- name: build-docs
|
|
shell: bash
|
|
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="-j ${JOB_COUNT} -W --keep-going -T" \
|
|
SPHINXOPTS_EXTRA="-q -t publish" \
|
|
make -C doc ${DOC_TARGET}
|
|
|
|
# API documentation coverage
|
|
python3 -m coverxygen --xml-dir doc/_build/html/doxygen/xml/ --src-dir include/ --output doc-coverage.info
|
|
# deprecated page causing issues
|
|
lcov --remove doc-coverage.info \*/deprecated > new.info
|
|
genhtml --no-function-coverage --no-branch-coverage new.info -o coverage-report
|
|
|
|
- name: compress-docs
|
|
run: |
|
|
tar --use-compress-program="xz -T0" -cf html-output.tar.xz --directory=doc/_build html
|
|
tar --use-compress-program="xz -T0" -cf api-output.tar.xz --directory=doc/_build html/doxygen/html
|
|
tar --use-compress-program="xz -T0" -cf api-coverage.tar.xz coverage-report
|
|
|
|
- name: upload-build
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: html-output
|
|
path: html-output.tar.xz
|
|
|
|
- name: upload-api-coverage
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: api-coverage
|
|
path: api-coverage.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/"
|
|
API_DOC_URL="https://builds.zephyrproject.io/${REPO_NAME}/pr/${PR_NUM}/docs/doxygen/html/"
|
|
API_COVERAGE_URL="https://builds.zephyrproject.io/${REPO_NAME}/pr/${PR_NUM}/api-coverage/"
|
|
|
|
echo "${PR_NUM}" > pr_num
|
|
echo "Documentation will be available shortly at: ${DOC_URL}" >> $GITHUB_STEP_SUMMARY
|
|
echo "API Documentation will be available shortly at: ${API_DOC_URL}" >> $GITHUB_STEP_SUMMARY
|
|
echo "API Coverage Report will be available shortly at: ${API_COVERAGE_URL}" >> $GITHUB_STEP_SUMMARY
|
|
|
|
- name: upload-pr-number
|
|
uses: actions/upload-artifact@v4
|
|
if: github.event_name == 'pull_request'
|
|
with:
|
|
name: pr_num
|
|
path: pr_num
|
|
|
|
doc-build-pdf:
|
|
name: "Documentation Build (PDF)"
|
|
needs: [doc-file-check]
|
|
if: |
|
|
github.event_name != 'pull_request' &&
|
|
github.repository_owner == 'zephyrproject-rtos'
|
|
runs-on: ubuntu-22.04
|
|
container: texlive/texlive:latest
|
|
timeout-minutes: 120
|
|
concurrency:
|
|
group: doc-build-pdf-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
steps:
|
|
- name: Apply container owner mismatch workaround
|
|
run: |
|
|
git config --global --add safe.directory ${GITHUB_WORKSPACE}
|
|
|
|
- name: checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: install-pkgs
|
|
run: |
|
|
apt-get update
|
|
apt-get install -y python3-pip python3-venv ninja-build doxygen graphviz librsvg2-bin imagemagick
|
|
|
|
- name: cache-pip
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/pip
|
|
key: pip-${{ hashFiles('doc/requirements.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 doc/requirements.txt
|
|
pip3 install west==${WEST_VERSION}
|
|
pip3 install cmake==${CMAKE_VERSION}
|
|
|
|
- name: west setup
|
|
run: |
|
|
west init -l .
|
|
|
|
- name: build-docs
|
|
shell: bash
|
|
continue-on-error: true
|
|
run: |
|
|
if [[ "$GITHUB_REF" =~ "refs/tags/v" ]]; then
|
|
DOC_TAG="release"
|
|
else
|
|
DOC_TAG="development"
|
|
fi
|
|
|
|
DOC_TAG=${DOC_TAG} \
|
|
SPHINXOPTS="-q -j ${JOB_COUNT}" \
|
|
LATEXMKOPTS="-quiet -halt-on-error" \
|
|
make -C doc pdf
|
|
|
|
- name: upload-build
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: pdf-output
|
|
if-no-files-found: ignore
|
|
path: |
|
|
doc/_build/latex/zephyr.pdf
|
|
doc/_build/latex/zephyr.log
|
|
|
|
doc-build-status-check:
|
|
if: always()
|
|
name: "Documentation Build Status"
|
|
needs:
|
|
- doc-build-pdf
|
|
- doc-file-check
|
|
- doc-build-html
|
|
uses: ./.github/workflows/ready-to-merge.yml
|
|
with:
|
|
needs_context: ${{ toJson(needs) }}
|