[llvm] [docs] Release man pages (PR #201376)

Konrad Kleine via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 8 02:34:57 PDT 2026


https://github.com/kwk updated https://github.com/llvm/llvm-project/pull/201376

>From bb486ec1e639054f8aba3a0dd4dde152ddcf5061 Mon Sep 17 00:00:00 2001
From: Konrad Kleine <kkleine at redhat.com>
Date: Mon, 1 Jun 2026 20:49:08 +0200
Subject: [PATCH 1/2] [docs] Release man pages

This adds the possibility to generate man pages from the `llvm/utils/release/build-docs.sh` script. Furthermore this adds a new github workflow to release those man pages.

This was done to prevent dependency problems when myst-parser will become a hard dependency to build the documentation in LLVM. See https://discourse.llvm.org/t/rfc-make-myst-markdown-the-llvm-docs-format-rip-rest/90840/26?u=kwk

Additionally the `build-docs.sh` script now determines the release from the source directory if no release was given. Otherwise the generated tarballs would be missing the release entirely. To make it clear that something was generated from any git directory, a short git revision will be attached to the release (e.g. `23.0.0-gc823de88d51f58`).

The script generates a total of 67 man pages for the 22.1.7 release (see below).

`lld` has their own man page hardcoded in [`lld/docs/ld.lld.1`](https://github.com/llvm/llvm-project/blob/main/lld/docs/ld.lld.1). It gets packaged manually because of a missing cmake target. To get all projects install their man pages in the same directory to package up, we have to run the install targets rather than just the build targets (e.g. `install-docs-clang-man` instead of just `docs-clang-man`).

Here's what's in the tarball for the `22.1.7` release when you run the script from this change:

```console
$ rm -rf llvm_man_pages-* docs-build llvm-project
$ ./llvm/utils/release/build-docs.sh  -no-sphinx  -no-doxygen -release 22.1.7
```

```console
$ tar -tf llvm_man_pages-22.1.7.tar.xz
llvm_man_pages-22.1.7/
llvm_man_pages-22.1.7/polly.1
llvm_man_pages-22.1.7/lldb.1
llvm_man_pages-22.1.7/lldb-server.1
llvm_man_pages-22.1.7/extraclangtools.1
llvm_man_pages-22.1.7/flang.1
llvm_man_pages-22.1.7/clang.1
llvm_man_pages-22.1.7/diagtool.1
llvm_man_pages-22.1.7/FileCheck.1
llvm_man_pages-22.1.7/bugpoint.1
llvm_man_pages-22.1.7/clang-tblgen.1
llvm_man_pages-22.1.7/dsymutil.1
llvm_man_pages-22.1.7/lit.1
llvm_man_pages-22.1.7/llc.1
llvm_man_pages-22.1.7/lldb-tblgen.1
llvm_man_pages-22.1.7/lli.1
llvm_man_pages-22.1.7/llvm-addr2line.1
llvm_man_pages-22.1.7/llvm-ar.1
llvm_man_pages-22.1.7/llvm-as.1
llvm_man_pages-22.1.7/llvm-bcanalyzer.1
llvm_man_pages-22.1.7/llvm-cgdata.1
llvm_man_pages-22.1.7/llvm-config.1
llvm_man_pages-22.1.7/llvm-cov.1
llvm_man_pages-22.1.7/llvm-cxxfilt.1
llvm_man_pages-22.1.7/llvm-cxxmap.1
llvm_man_pages-22.1.7/llvm-debuginfo-analyzer.1
llvm_man_pages-22.1.7/llvm-diff.1
llvm_man_pages-22.1.7/llvm-dis.1
llvm_man_pages-22.1.7/llvm-dwarfdump.1
llvm_man_pages-22.1.7/llvm-dwarfutil.1
llvm_man_pages-22.1.7/llvm-exegesis.1
llvm_man_pages-22.1.7/llvm-extract.1
llvm_man_pages-22.1.7/llvm-ifs.1
llvm_man_pages-22.1.7/llvm-install-name-tool.1
llvm_man_pages-22.1.7/llvm-ir2vec.1
llvm_man_pages-22.1.7/llvm-lib.1
llvm_man_pages-22.1.7/llvm-libtool-darwin.1
llvm_man_pages-22.1.7/llvm-link.1
llvm_man_pages-22.1.7/llvm-lipo.1
llvm_man_pages-22.1.7/llvm-locstats.1
llvm_man_pages-22.1.7/llvm-mc.1
llvm_man_pages-22.1.7/llvm-mca.1
llvm_man_pages-22.1.7/llvm-nm.1
llvm_man_pages-22.1.7/llvm-objcopy.1
llvm_man_pages-22.1.7/llvm-objdump.1
llvm_man_pages-22.1.7/llvm-offload-binary.1
llvm_man_pages-22.1.7/llvm-opt-report.1
llvm_man_pages-22.1.7/llvm-otool.1
llvm_man_pages-22.1.7/llvm-pdbutil.1
llvm_man_pages-22.1.7/llvm-profdata.1
llvm_man_pages-22.1.7/llvm-profgen.1
llvm_man_pages-22.1.7/llvm-ranlib.1
llvm_man_pages-22.1.7/llvm-readelf.1
llvm_man_pages-22.1.7/llvm-readobj.1
llvm_man_pages-22.1.7/llvm-reduce.1
llvm_man_pages-22.1.7/llvm-remarkutil.1
llvm_man_pages-22.1.7/llvm-size.1
llvm_man_pages-22.1.7/llvm-stress.1
llvm_man_pages-22.1.7/llvm-strings.1
llvm_man_pages-22.1.7/llvm-strip.1
llvm_man_pages-22.1.7/llvm-symbolizer.1
llvm_man_pages-22.1.7/llvm-tblgen.1
llvm_man_pages-22.1.7/llvm-test-mustache-spec.1
llvm_man_pages-22.1.7/llvm-tli-checker.1
llvm_man_pages-22.1.7/mlir-tblgen.1
llvm_man_pages-22.1.7/opt.1
llvm_man_pages-22.1.7/tblgen.1
llvm_man_pages-22.1.7/ld.lld.1
```
---
 .github/workflows/release-documentation.yml |   2 +-
 .github/workflows/release-doxygen.yml       |   2 +-
 .github/workflows/release-man-pages.yml     | 121 ++++++++++++++++++++
 llvm/utils/release/build-docs.sh            |  54 +++++++--
 4 files changed, 170 insertions(+), 9 deletions(-)
 create mode 100644 .github/workflows/release-man-pages.yml

diff --git a/.github/workflows/release-documentation.yml b/.github/workflows/release-documentation.yml
index f844b5a71103c..6b3c8ab7eaadf 100644
--- a/.github/workflows/release-documentation.yml
+++ b/.github/workflows/release-documentation.yml
@@ -72,7 +72,7 @@ jobs:
           GITHUB_TOKEN: ${{ github.token }}
           INPUTS_RELEASE_VERSION: ${{ inputs.release-version }}
         run: |
-          ./llvm/utils/release/build-docs.sh -release "$INPUTS_RELEASE_VERSION" -no-doxygen
+          ./llvm/utils/release/build-docs.sh -release "$INPUTS_RELEASE_VERSION" -no-doxygen -no-man-pages
 
       - name: Create Release Notes Artifact
         uses: actions/upload-artifact at 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
diff --git a/.github/workflows/release-doxygen.yml b/.github/workflows/release-doxygen.yml
index 548e17adbd023..67801b5616877 100644
--- a/.github/workflows/release-doxygen.yml
+++ b/.github/workflows/release-doxygen.yml
@@ -104,7 +104,7 @@ jobs:
         env:
           RELEASE_VERSION: ${{ inputs.release-version }}
         run: |
-          ./llvm/utils/release/build-docs.sh -release "$RELEASE_VERSION" -no-sphinx
+          ./llvm/utils/release/build-docs.sh -release "$RELEASE_VERSION" -no-sphinx -no-man-pages
 
       - id: app-token
         uses: actions/create-github-app-token at 1b10c78c7865c340bc4f6099eb2f838309f1e8c3  # v3.1.1
diff --git a/.github/workflows/release-man-pages.yml b/.github/workflows/release-man-pages.yml
new file mode 100644
index 0000000000000..b9a3673d7d183
--- /dev/null
+++ b/.github/workflows/release-man-pages.yml
@@ -0,0 +1,121 @@
+name: Release man pages
+
+permissions:
+  contents: read
+
+on:
+  workflow_dispatch:
+    inputs:
+      release-version:
+        description: 'Release Version'
+        required: true
+        type: string
+      upload:
+        description: 'Upload documentation'
+        required: false
+        type: boolean
+
+  workflow_call:
+    inputs:
+      release-version:
+        description: 'Release Version'
+        required: true
+        type: string
+      upload:
+        description: 'Upload documentation'
+        required: false
+        type: boolean
+    secrets:
+      LLVM_TOKEN_GENERATOR_CLIENT_ID:
+        description: "Client ID for our GitHub App we use for generating access tokens."
+        required: true
+      LLVM_TOKEN_GENERATOR_PRIVATE_KEY:
+        description: "Private key for our GitHub App we use for generating access tokens."
+        required: true
+
+jobs:
+  # This job checks permissions and validates inputs to prevent potential
+  # malicious actions.  Since the release-manpages job has contents: write
+  # permissions we need to be extra careful about who can run the job and
+  # what inputs can be provided.
+  release-man-pages-validate-input:
+    name: Release Manpage Validate Input
+    runs-on: ubuntu-24.04
+    environment:
+      name: release
+      deployment: false
+    permissions:
+      contents: read
+    steps:
+      - uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+          sparse-checkout: |
+            .github/workflows/
+
+      - name: Check Permissions
+        uses: ./.github/workflows/require-team-membership
+        with:
+          team-slug: llvm-release-managers
+          LLVM_TOKEN_GENERATOR_CLIENT_ID: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
+          LLVM_TOKEN_GENERATOR_PRIVATE_KEY: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
+
+      - name: Validate Input
+        uses: ./.github/workflows/validate-release-version
+        with:
+          release-version: ${{ inputs.release-version }}
+
+  release-man-pages:
+    name: Build and Upload Release man pages
+    runs-on: ubuntu-24.04
+    environment:
+      name: release
+      deployment: false
+    permissions:
+      contents: write
+    needs:
+      - release-man-pages-validate-input
+    env:
+      upload: ${{ inputs.upload && !contains(inputs.release-version, 'rc') }}
+    steps:
+      - name: Checkout LLVM
+        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+
+      - name: Setup Python env
+        uses: actions/setup-python at a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
+        with:
+          cache: 'pip'
+          cache-dependency-path: './llvm/docs/requirements.txt'
+
+      - name: Install Dependencies
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y \
+              python3-github \
+              ninja-build \
+          pip3 install --require-hashes --user -r ./llvm/docs/requirements.txt
+
+      - name: Build man pages
+        env:
+          RELEASE_VERSION: ${{ inputs.release-version }}
+        run: |
+          ./llvm/utils/release/build-docs.sh -release "$RELEASE_VERSION" -no-sphinx -no-doxygen
+
+      - id: app-token
+        uses: actions/create-github-app-token at 1b10c78c7865c340bc4f6099eb2f838309f1e8c3  # v3.1.1
+        with:
+          app-id: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
+          private-key: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
+          owner: ${{ github.repository_owner }}
+          permission-members: read
+
+      - name: Upload man pages
+        if: env.upload
+        env:
+          GITHUB_TOKEN: ${{ github.token }}
+          USER_TOKEN: ${{ steps.app-token.outputs.token }}
+          RELEASE_VERSION: ${{ inputs.release-version }}
+        run: |
+          ./llvm/utils/release/github-upload-release.py --token "$GITHUB_TOKEN" --release "$RELEASE_VERSION" --user "$GITHUB_ACTOR" --user-token "$USER_TOKEN" upload --files ./llvm_man_pages-*.tar.xz
diff --git a/llvm/utils/release/build-docs.sh b/llvm/utils/release/build-docs.sh
index bc32f209419e4..9f0b091d6789b 100755
--- a/llvm/utils/release/build-docs.sh
+++ b/llvm/utils/release/build-docs.sh
@@ -36,6 +36,7 @@ usage() {
   echo "                (optional) default: $srcdir"
   echo " -no-doxygen    Don't build Doxygen docs"
   echo " -no-sphinx     Don't build Spinx docs"
+  echo " -no-man-pages   Don't build man pages"
 }
 
 package_doxygen() {
@@ -65,6 +66,9 @@ while [ $# -gt 0 ]; do
     -no-sphinx )
       no_sphinx="yes"
       ;;
+    -no-man-pages )
+      no_man_pages="yes"
+      ;;
     * )
       echo "unknown option: $1"
       usage
@@ -97,11 +101,19 @@ if [ -n "$release" ]; then
   srcdir="./llvm-project/llvm"
 fi
 
-if [ "$no_doxygen" == "yes" ] && [ "$no_sphinx" == "yes" ]; then
-  echo "You can't specify both -no-doxygen and -no-sphinx, we have nothing to build then!"
+if [ "$no_doxygen" == "yes" ] && [ "$no_sphinx" == "yes" ] && [ "$no_man_pages" == "yes" ]; then
+  echo "You can't specify -no-doxygen, -no-sphinx, and -no-man_pages, we have nothing to build then!"
   exit 1
 fi
 
+# Try to determine the release from the current git directory if none is given
+# and format it like this: 23.0.0-gc823de88d51f58
+if [ -z "$release" ]; then
+  release=$(git -C $srcdir show HEAD:cmake/Modules/LLVMVersion.cmake | grep -ioP 'set\(\s*LLVM_VERSION_(MAJOR|MINOR|PATCH)\s\K[0-9]+' | paste -sd '.')
+  git_rev=$(git rev-parse HEAD)
+  release="$release-g${git_rev:0:14}"
+fi
+
 if [ "$no_sphinx" != "yes" ]; then
   echo "Sphinx: enabled"
   sphinx_targets="docs-clang-html docs-clang-tools-html docs-flang-html docs-lld-html docs-llvm-html docs-polly-html"
@@ -110,6 +122,17 @@ else
   echo "Sphinx: disabled"
 fi
 
+if [ "${no_man_pages}" != "yes" ]; then
+  echo "Man pages: enabled"
+  man_page_targets="install-docs-clang-man install-docs-clang-tools-man install-docs-dsymutil-man install-docs-flang-man install-docs-lldb-man install-docs-llvm-dwarfdump-man install-docs-llvm-man install-docs-polly-man"
+  install_prefix=${builddir}/install
+  man_page_flag=" -DLLVM_ENABLE_SPHINX=ON -DSPHINX_WARNINGS_AS_ERRORS=OFF -DSPHINX_OUTPUT_MAN:BOOL=ON -DCMAKE_INSTALL_PREFIX=${install_prefix}"
+  extra_man_page_projects=";lldb;mlir;bolt"
+  extra_man_page_runtimes=";compiler-rt;openmp;"
+else
+  echo "Man pages: disabled"
+fi
+
 if [ "$no_doxygen" != "yes" ]; then
   echo "Doxygen: enabled"
   doxygen_targets="$docs_target doxygen-clang doxygen-clang-tools doxygen-flang doxygen-llvm doxygen-mlir doxygen-polly"
@@ -118,22 +141,39 @@ else
    echo "Doxygen: disabled"
 fi
 
+# This is just to ensure we're using the right compiler
+# When running this locally, the script otherwise might
+# prefer GCC.
+export CC=clang
+export CXX=clang++
+
 cmake -G Ninja $srcdir -B $builddir \
-               -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;polly;flang" \
+               -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld;polly;flang${extra_man_page_projects}" \
                -DCMAKE_BUILD_TYPE=Release \
                -DLLVM_BUILD_DOCS=ON \
                $sphinx_flag \
-               $doxygen_flag
+               $doxygen_flag \
+               $man_page_flag
 
-ninja -C $builddir $sphinx_targets $doxygen_targets
+ninja -C $builddir $sphinx_targets $doxygen_targets $man_page_targets
 
 cmake -G Ninja $srcdir/../runtimes -B $builddir/runtimes-doc \
-               -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind" \
+               -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi;libunwind;${extra_man_page_runtimes}" \
                -DLLVM_ENABLE_SPHINX=ON \
+               -DLLVM_BUILD_DOCS=ON \
                -DSPHINX_WARNINGS_AS_ERRORS=OFF
 
 ninja -C $builddir/runtimes-doc \
-               docs-libcxx-html \
+               docs-libcxx-html
+
+if [ "${no_man_page}" != "yes" ]; then
+  output="llvm_man_pages-${release}"
+  # The LLD man_page is not installed automatically even when running the
+  # "install-docs-lld-man" target.
+  cp -v ${srcdir}/../lld/docs/ld.lld.1 ${install_prefix}/share/man/man1
+  mv ${install_prefix}/share/man/man1 ${output}
+  tar -cJf ${output}.tar.xz ${output}
+fi
 
 if [ "$no_doxygen" != "yes" ]; then
   package_doxygen llvm .

>From 04d37302c9b6e0d309b48a19340c1f4e2d85cd53 Mon Sep 17 00:00:00 2001
From: Konrad Kleine <kkleine at redhat.com>
Date: Mon, 8 Jun 2026 09:31:55 +0000
Subject: [PATCH 2/2] Re-use the release-documentation workflow as requested

This removes the release-man-pages workflow and instead re-uses the
existing release-documentation workflow. Additional wiring inside
release-tasks was also done.
---
 .github/workflows/release-documentation.yml |  63 +++++++++-
 .github/workflows/release-man-pages.yml     | 121 --------------------
 .github/workflows/release-tasks.yml         |   7 +-
 llvm/utils/release/build-docs.sh            |   2 +-
 4 files changed, 66 insertions(+), 127 deletions(-)
 delete mode 100644 .github/workflows/release-man-pages.yml

diff --git a/.github/workflows/release-documentation.yml b/.github/workflows/release-documentation.yml
index 6b3c8ab7eaadf..4a8f614f1905e 100644
--- a/.github/workflows/release-documentation.yml
+++ b/.github/workflows/release-documentation.yml
@@ -1,4 +1,4 @@
-name: Release Documentation
+name: Release Documentation and Man Pages
 
 permissions:
   contents: read
@@ -34,10 +34,47 @@ on:
         required: false
 
 jobs:
+  # This job checks permissions and validates inputs to prevent potential
+  # malicious actions.  Since the release-documentation job has contents: write
+  # permissions we need to be extra careful about who can run the job and what
+  # inputs can be provided.
+  release-man-pages-validate-input:
+    name: Release Man Pages Validate Input
+    runs-on: ubuntu-24.04
+    environment:
+      name: release
+      deployment: false
+    permissions:
+      contents: read
+    steps:
+      - uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+        with:
+          persist-credentials: false
+          sparse-checkout: |
+            .github/workflows/
+
+      - name: Check Permissions
+        uses: ./.github/workflows/require-team-membership
+        with:
+          team-slug: llvm-release-managers
+          LLVM_TOKEN_GENERATOR_CLIENT_ID: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
+          LLVM_TOKEN_GENERATOR_PRIVATE_KEY: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
+
+      - name: Validate Input
+        uses: ./.github/workflows/validate-release-version
+        with:
+          release-version: ${{ inputs.release-version }}
+
   release-documentation:
-    name: Build and Upload Release Documentation
-    environment: release
+    name: Build and Upload Release Documentation and Man Pages
+    environment:
+      name: release
+      deployment: false
     runs-on: ubuntu-24.04
+    permissions:
+      contents: write
+    needs:
+      - release-man-pages-validate-input
     env:
       upload: ${{ inputs.upload && !contains(inputs.release-version, 'rc') }}
     steps:
@@ -72,7 +109,25 @@ jobs:
           GITHUB_TOKEN: ${{ github.token }}
           INPUTS_RELEASE_VERSION: ${{ inputs.release-version }}
         run: |
-          ./llvm/utils/release/build-docs.sh -release "$INPUTS_RELEASE_VERSION" -no-doxygen -no-man-pages
+          ./llvm/utils/release/build-docs.sh -release "$INPUTS_RELEASE_VERSION" -no-doxygen
+
+      - id: app-token
+        if: env.upload
+        uses: actions/create-github-app-token at 1b10c78c7865c340bc4f6099eb2f838309f1e8c3  # v3.1.1
+        with:
+          app-id: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
+          private-key: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
+          owner: ${{ github.repository_owner }}
+          permission-members: read
+
+      - name: Upload man pages
+        if: env.upload
+        env:
+          GITHUB_TOKEN: ${{ github.token }}
+          USER_TOKEN: ${{ steps.app-token.outputs.token }}
+          RELEASE_VERSION: ${{ inputs.release-version }}
+        run: |
+          ./llvm/utils/release/github-upload-release.py --token "$GITHUB_TOKEN" --release "$RELEASE_VERSION" --user "$GITHUB_ACTOR" --user-token "$USER_TOKEN" upload --files ./llvm_man_pages-*.tar.xz
 
       - name: Create Release Notes Artifact
         uses: actions/upload-artifact at 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
diff --git a/.github/workflows/release-man-pages.yml b/.github/workflows/release-man-pages.yml
deleted file mode 100644
index b9a3673d7d183..0000000000000
--- a/.github/workflows/release-man-pages.yml
+++ /dev/null
@@ -1,121 +0,0 @@
-name: Release man pages
-
-permissions:
-  contents: read
-
-on:
-  workflow_dispatch:
-    inputs:
-      release-version:
-        description: 'Release Version'
-        required: true
-        type: string
-      upload:
-        description: 'Upload documentation'
-        required: false
-        type: boolean
-
-  workflow_call:
-    inputs:
-      release-version:
-        description: 'Release Version'
-        required: true
-        type: string
-      upload:
-        description: 'Upload documentation'
-        required: false
-        type: boolean
-    secrets:
-      LLVM_TOKEN_GENERATOR_CLIENT_ID:
-        description: "Client ID for our GitHub App we use for generating access tokens."
-        required: true
-      LLVM_TOKEN_GENERATOR_PRIVATE_KEY:
-        description: "Private key for our GitHub App we use for generating access tokens."
-        required: true
-
-jobs:
-  # This job checks permissions and validates inputs to prevent potential
-  # malicious actions.  Since the release-manpages job has contents: write
-  # permissions we need to be extra careful about who can run the job and
-  # what inputs can be provided.
-  release-man-pages-validate-input:
-    name: Release Manpage Validate Input
-    runs-on: ubuntu-24.04
-    environment:
-      name: release
-      deployment: false
-    permissions:
-      contents: read
-    steps:
-      - uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-        with:
-          persist-credentials: false
-          sparse-checkout: |
-            .github/workflows/
-
-      - name: Check Permissions
-        uses: ./.github/workflows/require-team-membership
-        with:
-          team-slug: llvm-release-managers
-          LLVM_TOKEN_GENERATOR_CLIENT_ID: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
-          LLVM_TOKEN_GENERATOR_PRIVATE_KEY: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
-
-      - name: Validate Input
-        uses: ./.github/workflows/validate-release-version
-        with:
-          release-version: ${{ inputs.release-version }}
-
-  release-man-pages:
-    name: Build and Upload Release man pages
-    runs-on: ubuntu-24.04
-    environment:
-      name: release
-      deployment: false
-    permissions:
-      contents: write
-    needs:
-      - release-man-pages-validate-input
-    env:
-      upload: ${{ inputs.upload && !contains(inputs.release-version, 'rc') }}
-    steps:
-      - name: Checkout LLVM
-        uses: actions/checkout at de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
-        with:
-          persist-credentials: false
-
-      - name: Setup Python env
-        uses: actions/setup-python at a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
-        with:
-          cache: 'pip'
-          cache-dependency-path: './llvm/docs/requirements.txt'
-
-      - name: Install Dependencies
-        run: |
-          sudo apt-get update
-          sudo apt-get install -y \
-              python3-github \
-              ninja-build \
-          pip3 install --require-hashes --user -r ./llvm/docs/requirements.txt
-
-      - name: Build man pages
-        env:
-          RELEASE_VERSION: ${{ inputs.release-version }}
-        run: |
-          ./llvm/utils/release/build-docs.sh -release "$RELEASE_VERSION" -no-sphinx -no-doxygen
-
-      - id: app-token
-        uses: actions/create-github-app-token at 1b10c78c7865c340bc4f6099eb2f838309f1e8c3  # v3.1.1
-        with:
-          app-id: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
-          private-key: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
-          owner: ${{ github.repository_owner }}
-          permission-members: read
-
-      - name: Upload man pages
-        if: env.upload
-        env:
-          GITHUB_TOKEN: ${{ github.token }}
-          USER_TOKEN: ${{ steps.app-token.outputs.token }}
-          RELEASE_VERSION: ${{ inputs.release-version }}
-        run: |
-          ./llvm/utils/release/github-upload-release.py --token "$GITHUB_TOKEN" --release "$RELEASE_VERSION" --user "$GITHUB_ACTOR" --user-token "$USER_TOKEN" upload --files ./llvm_man_pages-*.tar.xz
diff --git a/.github/workflows/release-tasks.yml b/.github/workflows/release-tasks.yml
index c708cdd731c00..f1616d2b6bd29 100644
--- a/.github/workflows/release-tasks.yml
+++ b/.github/workflows/release-tasks.yml
@@ -61,13 +61,18 @@ jobs:
         run: |
           ./llvm/utils/release/./github-upload-release.py --token "$GITHUB_TOKEN" --release "$RELEASE_VERSION" --user "$GITHUB_ACTOR" --user-token "$USER_TOKEN" create
   release-documentation:
-    name: Build and Upload Release Documentation
+    name: Build and Upload Release Documentation and Man Pages
     needs:
       - validate-tag
+      - release-create
     uses: ./.github/workflows/release-documentation.yml
     with:
       release-version: ${{ needs.validate-tag.outputs.release-version }}
       upload: true
+    # Called workflows don't have access to secrets by default, so we need to explicitly pass secrets that we use.
+    secrets:
+      LLVM_TOKEN_GENERATOR_CLIENT_ID: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
+      LLVM_TOKEN_GENERATOR_PRIVATE_KEY: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
 
   release-doxygen:
     name: Build and Upload Release Doxygen
diff --git a/llvm/utils/release/build-docs.sh b/llvm/utils/release/build-docs.sh
index 9f0b091d6789b..648c829a62618 100755
--- a/llvm/utils/release/build-docs.sh
+++ b/llvm/utils/release/build-docs.sh
@@ -36,7 +36,7 @@ usage() {
   echo "                (optional) default: $srcdir"
   echo " -no-doxygen    Don't build Doxygen docs"
   echo " -no-sphinx     Don't build Spinx docs"
-  echo " -no-man-pages   Don't build man pages"
+  echo " -no-man-pages  Don't build man pages"
 }
 
 package_doxygen() {



More information about the llvm-commits mailing list