# 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.12.0 DOXYGEN_MD5SUM: fd96a5defa535dfe2e987b46540844a4 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@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3 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: Setup Zephyr project uses: zephyrproject-rtos/action-zephyr-setup@f7b70269a8eb01f70c8e710891e4c94972a2f6b4 # v1.0.6 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: 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@f7b70269a8eb01f70c8e710891e4c94972a2f6b4 # v1.0.6 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) }}