| # Copyright (c) 2020 Linaro Limited. |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| name: Documentation Build |
| |
| on: |
| schedule: |
| - cron: '0 */3 * * *' |
| push: |
| tags: |
| - v* |
| pull_request: |
| |
| permissions: |
| contents: read |
| |
| env: |
| DOXYGEN_VERSION: 1.14.0 |
| DOXYGEN_MD5SUM: e761a5097ae20ecccfd02041925f102a |
| JOB_COUNT: 4 |
| |
| jobs: |
| doc-file-check: |
| name: Check for doc changes |
| runs-on: ubuntu-24.04 |
| outputs: |
| file_check: ${{ steps.check-doc-files.outputs.any_modified }} |
| steps: |
| - name: checkout |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| ref: ${{ github.event.pull_request.head.sha }} |
| fetch-depth: 0 |
| - name: Check if Documentation related files changed |
| uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46.0.5 |
| id: check-doc-files |
| with: |
| files: | |
| doc/ |
| boards/**/doc/ |
| **.rst |
| include/ |
| kernel/include/kernel_arch_interface.h |
| lib/libc/** |
| subsys/testsuite/ztest/include/** |
| **/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: > |
| needs.doc-file-check.outputs.file_check == 'true' || github.event_name != 'pull_request' |
| runs-on: ubuntu-24.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" |
| echo "${DOXYGEN_MD5SUM} doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz" | md5sum -c |
| if [ $? -ne 0 ]; then |
| echo "Failed to verify doxygen tarball" |
| exit 1 |
| fi |
| 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@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| ref: ${{ github.event.pull_request.head.sha }} |
| fetch-depth: 0 |
| path: zephyr |
| |
| - 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 }} |
| working-directory: zephyr |
| run: | |
| git config --global user.email "actions@zephyrproject.org" |
| git config --global user.name "Github Actions" |
| rm -fr ".git/rebase-apply" |
| rm -fr ".git/rebase-merge" |
| git rebase origin/${BASE_REF} |
| git clean -f -d |
| git log --graph --oneline HEAD...${PR_HEAD} |
| |
| - name: Set up Python |
| uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 |
| with: |
| python-version: 3.12 |
| cache: pip |
| cache-dependency-path: doc/requirements.txt |
| |
| - name: Setup Zephyr project |
| uses: zephyrproject-rtos/action-zephyr-setup@b2453c72966ee67b1433be22b250348d48283286 # v1.0.7 |
| with: |
| app-path: zephyr |
| toolchains: 'all' |
| |
| - name: install-pip |
| working-directory: zephyr |
| run: | |
| pip install -r doc/requirements.txt --require-hashes |
| |
| - name: build-docs |
| shell: bash |
| working-directory: zephyr |
| 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 |
| working-directory: zephyr |
| run: | |
| tar --use-compress-program="xz -T0" -cf html-output.tar.xz --exclude html/_sources --exclude html/doxygen/xml --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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: html-output |
| path: zephyr/html-output.tar.xz |
| |
| - name: upload-api-coverage |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: api-coverage |
| path: zephyr/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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| 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' |
| runs-on: ubuntu-24.04 |
| timeout-minutes: 120 |
| concurrency: |
| group: doc-build-pdf-${{ github.ref }} |
| cancel-in-progress: true |
| |
| steps: |
| - name: checkout |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 |
| with: |
| path: zephyr |
| |
| - name: Set up Python |
| uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 |
| with: |
| python-version: 3.12 |
| cache: pip |
| cache-dependency-path: doc/requirements.txt |
| |
| - name: install-pkgs |
| run: | |
| sudo apt-get update |
| sudo apt-get install --no-install-recommends graphviz librsvg2-bin \ |
| texlive-latex-base texlive-latex-extra latexmk \ |
| texlive-fonts-recommended texlive-fonts-extra texlive-xetex \ |
| imagemagick fonts-noto xindy |
| wget --no-verbose "https://github.com/doxygen/doxygen/releases/download/Release_${DOXYGEN_VERSION//./_}/doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz" |
| echo "${DOXYGEN_MD5SUM} doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz" | md5sum -c |
| if [ $? -ne 0 ]; then |
| echo "Failed to verify doxygen tarball" |
| exit 1 |
| fi |
| sudo tar xf doxygen-${DOXYGEN_VERSION}.linux.bin.tar.gz -C /opt |
| echo "/opt/doxygen-${DOXYGEN_VERSION}/bin" >> $GITHUB_PATH |
| |
| - name: Setup Zephyr project |
| uses: zephyrproject-rtos/action-zephyr-setup@b2453c72966ee67b1433be22b250348d48283286 # v1.0.7 |
| with: |
| app-path: zephyr |
| toolchains: 'arm-zephyr-eabi' |
| |
| - name: install-pip-pkgs |
| working-directory: zephyr |
| run: | |
| pip install -r doc/requirements.txt --require-hashes |
| |
| - name: build-docs |
| shell: bash |
| working-directory: zephyr |
| 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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: pdf-output |
| if-no-files-found: ignore |
| path: | |
| zephyr/doc/_build/latex/zephyr.pdf |
| zephyr/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) }} |