xref: /llvm-project/.github/workflows/docs.yml (revision 8a62104f642e469e62aa839cc25c31adf2fa5805)
1# LLVM Documentation CI
2# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
3# See https://llvm.org/LICENSE.txt for license information.
4# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5
6name: "Test documentation build"
7
8permissions:
9  contents: read
10
11on:
12  push:
13    branches:
14      - 'main'
15    paths:
16      - 'llvm/docs/**'
17      - 'clang/docs/**'
18      - 'clang/include/clang/Basic/AttrDocs.td'
19      - 'clang/include/clang/Driver/ClangOptionDocs.td'
20      - 'clang/include/clang/Basic/DiagnosticDocs.td'
21      - 'clang-tools-extra/docs/**'
22      - 'lldb/docs/**'
23      - 'libunwind/docs/**'
24      - 'libcxx/docs/**'
25      - 'libc/docs/**'
26      - 'lld/docs/**'
27      - 'openmp/docs/**'
28      - 'polly/docs/**'
29      - 'flang/docs/**'
30      - 'flang/include/flang/Optimizer/Dialect/FIROps.td'
31      - '.github/workflows/docs.yml'
32  pull_request:
33    paths:
34      - 'llvm/docs/**'
35      - 'clang/docs/**'
36      - 'clang/include/clang/Basic/AttrDocs.td'
37      - 'clang/include/clang/Driver/ClangOptionDocs.td'
38      - 'clang/include/clang/Basic/DiagnosticDocs.td'
39      - 'clang-tools-extra/docs/**'
40      - 'lldb/docs/**'
41      - 'libunwind/docs/**'
42      - 'libcxx/docs/**'
43      - 'libc/docs/**'
44      - 'lld/docs/**'
45      - 'openmp/docs/**'
46      - 'polly/docs/**'
47      - 'flang/docs/**'
48      - 'flang/include/flang/Optimizer/Dialect/FIROps.td'
49      - '.github/workflows/docs.yml'
50
51jobs:
52  check-docs-build:
53    name: "Test documentation build"
54    runs-on: ubuntu-latest
55    if: github.repository == 'llvm/llvm-project'
56    steps:
57      # Don't fetch before checking for file changes to force the file changes
58      # action to use the Github API in pull requests. If it's a push to a
59      # branch we can't use the Github API to get the diff, so we need to have
60      # a local checkout beforehand.
61      - name: Fetch LLVM sources (Push)
62        if: ${{ github.event_name == 'push' }}
63        uses: actions/checkout@v4
64        with:
65          fetch-depth: 1
66      - name: Get subprojects that have doc changes
67        id: docs-changed-subprojects
68        uses: tj-actions/changed-files@v39
69        with:
70          files_yaml: |
71            llvm:
72              - 'llvm/docs/**'
73            clang:
74              - 'clang/docs/**'
75              - 'clang/include/clang/Basic/AttrDocs.td'
76              - 'clang/include/clang/Driver/ClangOptionDocs.td'
77              - 'clang/include/clang/Basic/DiagnosticDocs.td'
78            clang-tools-extra:
79              - 'clang-tools-extra/docs/**'
80            lldb:
81              - 'lldb/docs/**'
82            libunwind:
83              - 'libunwind/docs/**'
84            libcxx:
85              - 'libcxx/docs/**'
86            libc:
87              - 'libc/docs/**'
88            lld:
89              - 'lld/docs/**'
90            openmp:
91              - 'openmp/docs/**'
92            polly:
93              - 'polly/docs/**'
94            flang:
95              - 'flang/docs/**'
96              - 'flang/include/flang/Optimizer/Dialect/FIROps.td'
97            workflow:
98              - '.github/workflows/docs.yml'
99      - name: Fetch LLVM sources (PR)
100        if: ${{ github.event_name == 'pull_request' }}
101        uses: actions/checkout@v4
102        with:
103          fetch-depth: 1
104      - name: Setup Python env
105        uses: actions/setup-python@v5
106        with:
107          python-version: '3.11'
108          cache: 'pip'
109          cache-dependency-path: 'llvm/docs/requirements-hashed.txt'
110      - name: Install python dependencies
111        run: pip install -r llvm/docs/requirements-hashed.txt
112      - name: Install system dependencies
113        run: |
114          sudo apt-get update
115          # swig and graphviz are lldb specific dependencies
116          sudo apt-get install -y cmake ninja-build swig graphviz
117      - name: Setup output folder
118        run: mkdir built-docs
119      - name: Build LLVM docs
120        if: |
121          steps.docs-changed-subprojects.outputs.llvm_any_changed == 'true' ||
122          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
123        run: |
124          cmake -B llvm-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_SPHINX=ON ./llvm
125          TZ=UTC ninja -C llvm-build docs-llvm-html docs-llvm-man
126          mkdir built-docs/llvm
127          cp -r llvm-build/docs/* built-docs/llvm/
128      - name: Build Clang docs
129        if: |
130          steps.docs-changed-subprojects.outputs.clang_any_changed == 'true' ||
131          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
132        run: |
133          cmake -B clang-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" -DLLVM_ENABLE_SPHINX=ON ./llvm
134          TZ=UTC ninja -C clang-build docs-clang-html docs-clang-man
135          mkdir built-docs/clang
136          cp -r clang-build/docs/* built-docs/clang/
137      - name: Build clang-tools-extra docs
138        if: |
139          steps.docs-changed-subprojects.outputs.clang-tools-extra_any_changed == 'true' ||
140          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
141        run: |
142          cmake -B clang-tools-extra-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" -DLLVM_ENABLE_SPHINX=ON ./llvm
143          TZ=UTC ninja -C clang-tools-extra-build docs-clang-tools-html docs-clang-tools-man
144          mkdir built-docs/clang-tools-extra
145          cp -r clang-tools-extra-build/docs/* built-docs/clang-tools-extra/
146      - name: Build LLDB docs
147        if: |
148          steps.docs-changed-subprojects.outputs.lldb_any_changed == 'true' ||
149          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
150        run: |
151          cmake -B lldb-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lldb" -DLLVM_ENABLE_SPHINX=ON ./llvm
152          TZ=UTC ninja -C lldb-build docs-lldb-html docs-lldb-man
153          mkdir built-docs/lldb
154          cp -r lldb-build/docs/* built-docs/lldb/
155      - name: Build libunwind docs
156        if: |
157          steps.docs-changed-subprojects.outputs.libunwind_any_changed == 'true' ||
158          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
159        run: |
160          cmake -B libunwind-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RUNTIMES="libunwind" -DLLVM_ENABLE_SPHINX=ON ./runtimes
161          TZ=UTC ninja -C libunwind-build docs-libunwind-html
162          mkdir built-docs/libunwind
163          cp -r libunwind-build/libunwind/docs/* built-docs/libunwind
164      - name: Build libcxx docs
165        if: |
166          steps.docs-changed-subprojects.outputs.libcxx_any_changed == 'true' ||
167          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
168        run: |
169          cmake -B libcxx-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RUNTIMES="libcxxabi;libcxx;libunwind" -DLLVM_ENABLE_SPHINX=ON ./runtimes
170          TZ=UTC ninja -C libcxx-build docs-libcxx-html
171          mkdir built-docs/libcxx
172          cp -r libcxx-build/libcxx/docs/* built-docs/libcxx/
173      - name: Build libc docs
174        if: |
175          steps.docs-changed-subprojects.outputs.libc_any_changed == 'true' ||
176          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
177        run: |
178          cmake -B libc-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RUNTIMES="libc" -DLLVM_ENABLE_SPHINX=ON ./runtimes
179          TZ=UTC ninja -C libc-build docs-libc-html
180          mkdir built-docs/libc
181          cp -r libc-build/libc/docs/* built-docs/libc/
182      - name: Build LLD docs
183        if: |
184          steps.docs-changed-subprojects.outputs.lld_any_changed == 'true' ||
185          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
186        run: |
187          cmake -B lld-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="lld" -DLLVM_ENABLE_SPHINX=ON ./llvm
188          TZ=UTC ninja -C lld-build docs-lld-html
189          mkdir built-docs/lld
190          cp -r lld-build/docs/* built-docs/lld/
191      - name: Build OpenMP docs
192        if: |
193          steps.docs-changed-subprojects.outputs.openmp_any_changed == 'true' ||
194          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
195        run: |
196          cmake -B openmp-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;openmp" -DLLVM_ENABLE_SPHINX=ON ./llvm
197          TZ=UTC ninja -C openmp-build docs-openmp-html
198          mkdir built-docs/openmp
199          cp -r openmp-build/docs/* built-docs/openmp/
200      - name: Build Polly docs
201        if: |
202          steps.docs-changed-subprojects.outputs.polly_any_changed == 'true' ||
203          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
204        run: |
205          cmake -B polly-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="polly" -DLLVM_ENABLE_SPHINX=ON ./llvm
206          TZ=UTC ninja -C polly-build docs-polly-html docs-polly-man
207          mkdir built-docs/polly
208          cp -r polly-build/docs/* built-docs/polly/
209      - name: Build Flang docs
210        if: |
211          steps.docs-changed-subprojects.outputs.flang_any_changed == 'true' ||
212          steps.docs-changed-subprojects.outputs.workflow_any_changed == 'true'
213        run: |
214          cmake -B flang-build -GNinja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;mlir;flang" -DLLVM_ENABLE_SPHINX=ON ./llvm
215          TZ=UTC ninja -C flang-build docs-flang-html
216          mkdir built-docs/flang
217          cp -r flang-build/docs/* built-docs/flang/
218      - name: Upload docs
219        uses: actions/upload-artifact@v4
220        with:
221          name: docs-output
222          path: built-docs/
223