[llvm-branch-commits] [llvm] e571f79 - workflows/release-documentation: Rework workflow to make it testable (#214304)
Tobias Hieta via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Aug 11 00:27:37 PDT 2026
Author: Tom Stellard
Date: 2026-08-11T09:27:26+02:00
New Revision: e571f7942a263809e616190ad0ef253293937589
URL: https://github.com/llvm/llvm-project/commit/e571f7942a263809e616190ad0ef253293937589
DIFF: https://github.com/llvm/llvm-project/commit/e571f7942a263809e616190ad0ef253293937589.diff
LOG: workflows/release-documentation: Rework workflow to make it testable (#214304)
This includes several separate changes for the workflow, which were
necessary to get the testing to pass:
* Merged release-man-pages-validate-input into the release-documentation
job.
* Split the release note uploading into a separate job.
* Moved the environment declaration to the upload-man-pages job.
* Stopped forcing clang as the compiler in build-docs.sh script. This
was causing the runtimes build to fail, because the default Ubuntu
debian packages for clang where not providing all the necessary CMake
files. It seems that when you use clang as the compiler, the runtimes
try to use the cmake files installed along with it.
(cherry picked from commit e310250eb80f282efe02dee4c94454a784c6886c)
Added:
Modified:
.github/workflows/release-documentation.yml
llvm/utils/release/build-docs.sh
Removed:
################################################################################
diff --git a/.github/workflows/release-documentation.yml b/.github/workflows/release-documentation.yml
index d0b6a9994edb5..c19148017cfec 100644
--- a/.github/workflows/release-documentation.yml
+++ b/.github/workflows/release-documentation.yml
@@ -38,76 +38,43 @@ on:
LLVM_TOKEN_GENERATOR_PRIVATE_KEY:
description: "Private key for our GitHub App we use for generating access tokens."
required: true
+ # Run on pull_requests for testing purposes.
+ pull_request:
+ paths:
+ - '.github/workflows/release-documentation.yml'
+ - 'llvm/utils/release/build-docs.sh'
+ types:
+ - opened
+ - synchronize
+ - reopened
+ # When a PR is closed, we still start this workflow, but then skip
+ # all the jobs, which makes it effectively a no-op. The reason to
+ # do this is that it allows us to take advantage of concurrency groups
+ # to cancel in progress CI jobs whenever the PR is closed.
+ - closed
+
+concurrency:
+ group: release-documentation-${{ inputs.release-version || github.event.pull_request.number }}
+ cancel-in-progress: true
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 df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
- 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 and Man Pages
runs-on: ubuntu-24.04
- needs:
- - release-man-pages-validate-input
+ if: >-
+ github.repository_owner == 'llvm' &&
+ github.event.action != 'closed'
outputs:
man-page-digest: ${{ steps.man-page-digest.outputs.man-page-digest }}
man-page-artifact-id: ${{ steps.man-page-artifact-upload.outputs.artifact-id }}
-
- man-page-release-version: ${{ steps.vars.outputs.man-page-release-version }}
- man-page-tarball-name: ${{ steps.vars.outputs.man-page-tarball-name }}
- man-page-upload: ${{ steps.vars.outputs.man-page-upload }}
- man-page-attestation-name: ${{ steps.vars.outputs.man-page-attestation-name }}
- env:
- upload: ${{ inputs.upload && !contains(inputs.release-version, 'rc') }}
steps:
- - name: Collect Variables
- id: vars
- env:
- INPUTS_RELEASE_VERSION: ${{ inputs.release-version }}
- UPLOAD_MAN_PAGES: ${{ inputs.upload }}
- shell: bash
- run: |
- {
- echo "man-page-release-version=$INPUTS_RELEASE_VERSION"
- echo "man-page-tarball-name=llvm_man_pages-$INPUTS_RELEASE_VERSION.tar.xz"
- echo "man-page-ref=llvmorg-$INPUTS_RELEASE_VERSION"
- echo "man-page-upload=$UPLOAD_MAN_PAGES"
- echo "man-page-attestation-name=$RUNNER_OS-$RUNNER_ARCH-release-man-page-attestation"
- } >> "$GITHUB_OUTPUT"
-
- name: Checkout LLVM
uses: actions/checkout at df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false
- name: Validate Input
+ if: inputs.release-version
uses: ./.github/workflows/validate-release-version
with:
release-version: ${{ inputs.release-version }}
@@ -129,25 +96,30 @@ jobs:
pip3 install --require-hashes --user -r ./llvm/docs/requirements.txt
- name: Build Documentation
+ id: build
env:
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 \
+ $(test -n "$INPUTS_RELEASE_VERSION" && echo -release "$INPUTS_RELEASE_VERSION" || echo -srcdir llvm) -no-doxygen
+ echo "man-page-tarball-name=$(basename $(find . -iname 'llvm_man_pages-*.tar.xz'))" >> "$GITHUB_OUTPUT"
+
- name: Generate sha256 digest for man page tarball
id: man-page-digest
shell: bash
env:
- TARBALL_NAME: ${{ steps.vars.outputs.man-page-tarball-name }}
+ TARBALL_NAME: ${{ steps.build.outputs.man-page-tarball-name }}
run: |
- echo "man-page-digest=$(cat "$TARBALL_NAME" | sha256sum | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT
+ echo "man-page-digest=$(cat "$TARBALL_NAME" | sha256sum | cut -d ' ' -f 1)" >> "$GITHUB_OUTPUT"
- id: man-page-artifact-upload
uses: actions/upload-artifact at 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
+ name: man-pages
path: |
- ${{ steps.vars.outputs.man-page-tarball-name }}
+ ${{ steps.build.outputs.man-page-tarball-name }}
- name: Create Release Notes Artifact
uses: actions/upload-artifact at 043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -155,8 +127,23 @@ jobs:
name: release-notes
path: docs-build/html-export/
+
+ upload-release-notes:
+ name: "Upload Release Notes"
+ runs-on: ubuntu-24.04
+ environment:
+ deployment: false
+ name: release
+ needs:
+ - release-documentation
+ if: >-
+ github.event_name != 'pull_request' &&
+ inputs.upload &&
+ !contains(inputs.release-version, 'rc')
+ permissions:
+ contents: read
+ steps:
- name: Clone www-releases
- if: env.upload
uses: actions/checkout at df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
repository: ${{ github.repository_owner }}/www-releases
@@ -165,15 +152,19 @@ jobs:
path: www-releases
persist-credentials: false
+ - name: Download Release Notes Artifact
+ uses: actions/download-artifact at 3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
+ id: download-artifact
+ with:
+ name: release-notes
+ path: ${{ github.workspace }}/www-releases/${{ inputs.release-version }}
+
- name: Upload Release Notes
- if: env.upload
env:
PUSH_TOKEN: ${{ secrets.LLVMBOT_WWW_RELEASES_PUSH }}
GH_TOKEN: ${{ secrets.WWW_RELEASES_TOKEN }}
INPUTS_RELEASE_VERSION: ${{ inputs.release-version }}
run: |
- mkdir -p www-releases/$INPUTS_RELEASE_VERSION
- mv ./docs-build/html-export/* www-releases/$INPUTS_RELEASE_VERSION
cd www-releases
git checkout -b $INPUTS_RELEASE_VERSION
git add $INPUTS_RELEASE_VERSION
@@ -203,10 +194,10 @@ jobs:
id: man-page-artifact-upload
uses: $/.github/workflows/upload-release-artifact
with:
- release-version: ${{ needs.release-documentation.outputs.man-page-release-version }}
+ release-version: ${{ inputs.release-version }}
artifact-id: ${{ needs.release-documentation.outputs.man-page-artifact-id }}
- attestation-name: ${{ needs.release-documentation.outputs.man-page-attestation-name }}
+ attestation-name: ${{ runner.os }}-${{ runner.arch }}-release-man-page-attestation
digest: ${{ needs.release-documentation.outputs.man-page-digest }}
- upload: ${{ needs.release-documentation.outputs.man-page-upload }}
+ upload: ${{ inputs.upload }}
LLVM_TOKEN_GENERATOR_CLIENT_ID: ${{ secrets.LLVM_TOKEN_GENERATOR_CLIENT_ID }}
LLVM_TOKEN_GENERATOR_PRIVATE_KEY: ${{ secrets.LLVM_TOKEN_GENERATOR_PRIVATE_KEY }}
diff --git a/llvm/utils/release/build-docs.sh b/llvm/utils/release/build-docs.sh
index 648c829a62618..3c80af1317d11 100755
--- a/llvm/utils/release/build-docs.sh
+++ b/llvm/utils/release/build-docs.sh
@@ -141,12 +141,6 @@ 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${extra_man_page_projects}" \
-DCMAKE_BUILD_TYPE=Release \
More information about the llvm-branch-commits
mailing list