https://github.com/FranciscoPombal updated https://github.com/llvm/llvm-project/pull/202000
>From 836a0ec1222833767909373fbfc094eef246b1db Mon Sep 17 00:00:00 2001 From: Keith Smiley <[email protected]> Date: Wed, 3 Jun 2026 15:04:02 -0700 Subject: [PATCH 1/3] [release] Add zstd archives to github releases (#186526) This leaves the previous xz files but also creates zstd archives of the binaries. This provides significantly reduced download sizes. We could integrate this with cpack but we don't have control over the compression level in that until version 4.3 which isn't even released yet. Fixes https://github.com/llvm/llvm-project/issues/164537 (cherry picked from commit 4d23acde98acb72e103d8c999edf752a9317aced) --- .github/workflows/release-binaries.yml | 14 ++++++++++- llvm/utils/release/github-upload-release.py | 26 +++++++++++++++------ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml index 1de66bdfe6f02..90aec02bc760f 100644 --- a/.github/workflows/release-binaries.yml +++ b/.github/workflows/release-binaries.yml @@ -60,6 +60,7 @@ jobs: build-flang: ${{ steps.vars.outputs.build-flang }} release-binary-basename: ${{ steps.vars.outputs.release-binary-basename }} release-binary-filename: ${{ steps.vars.outputs.release-binary-filename }} + release-binary-filename-zstd: ${{ steps.vars.outputs.release-binary-filename-zstd }} build-runs-on: ${{ steps.vars.outputs.build-runs-on }} test-runs-on: ${{ steps.vars.outputs.build-runs-on }} attestation-name: ${{ steps.vars.outputs.attestation-name }} @@ -151,6 +152,7 @@ jobs: fi echo "release-binary-basename=$release_binary_basename" >> $GITHUB_OUTPUT echo "release-binary-filename=$release_binary_basename.tar.xz" >> $GITHUB_OUTPUT + echo "release-binary-filename-zstd=$release_binary_basename.tar.zst" >> $GITHUB_OUTPUT target="$RUNNER_OS-$RUNNER_ARCH" @@ -292,6 +294,14 @@ jobs: mv $tarball $env:GITHUB_WORKSPACE echo "windows-installer-filename=$(Split-Path -Path $installer -Leaf)" >> $env:GITHUB_OUTPUT + - name: Create zstd compressed tarball + shell: bash + env: + RELEASE_BINARY_FILENAME: ${{ needs.prepare.outputs.release-binary-filename }} + RELEASE_BINARY_FILENAME_ZSTD: ${{ needs.prepare.outputs.release-binary-filename-zstd }} + run: | + xz -dc "$RELEASE_BINARY_FILENAME" | zstd --ultra -22 -T0 -o "$RELEASE_BINARY_FILENAME_ZSTD" + - name: Generate sha256 digest for binaries id: digest shell: bash @@ -299,6 +309,7 @@ jobs: RELEASE_BINARY_FILENAME: ${{ needs.prepare.outputs.release-binary-filename }} # This will be empty on non-Windows builds. WINDOWS_INSTALLER_FILENAME: ${{ steps.build-windows.outputs.windows-installer-filename }} + RELEASE_BINARY_FILENAME_ZSTD: ${{ needs.prepare.outputs.release-binary-filename-zstd }} run: | if [ "$RUNNER_OS" = "macOS" ]; then # Mac runners don't have sha256sum. @@ -306,7 +317,7 @@ jobs: else sha256sum="sha256sum" fi - echo "digest=$(cat $WINDOWS_INSTALLER_FILENAME $RELEASE_BINARY_FILENAME | $sha256sum | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT + echo "digest=$(cat $WINDOWS_INSTALLER_FILENAME $RELEASE_BINARY_FILENAME $RELEASE_BINARY_FILENAME_ZSTD | $sha256sum | cut -d ' ' -f 1)" >> $GITHUB_OUTPUT - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 id: artifact-upload @@ -317,6 +328,7 @@ jobs: # The steps.build-windows.* variables will be empty on Linux/MacOS. path: | ${{ needs.prepare.outputs.release-binary-filename }} + ${{ needs.prepare.outputs.release-binary-filename-zstd }} ${{ steps.build-windows.outputs.windows-installer-filename }} - name: Run Tests diff --git a/llvm/utils/release/github-upload-release.py b/llvm/utils/release/github-upload-release.py index 3eb592bb27462..ea1a1e53d9901 100755 --- a/llvm/utils/release/github-upload-release.py +++ b/llvm/utils/release/github-upload-release.py @@ -55,18 +55,22 @@ ( ( "LINUX_X86", - "* [Linux x86_64]({0}) ([signature]({1}))", + "* Linux x86_64: [xz archive]({0}) ([signature]({1})), [zstd archive]({2}) ([signature]({3}))", ( "LLVM-{release}-Linux-X64.tar.xz", "LLVM-{release}-Linux-X64.tar.xz.jsonl", + "LLVM-{release}-Linux-X64.tar.zst", + "LLVM-{release}-Linux-X64.tar.zst.jsonl", ), ), ( "LINUX_ARM64", - "* [Linux Arm64]({0}) ([signature]({1}))", + "* Linux Arm64: [xz archive]({0}) ([signature]({1})), [zstd archive]({2}) ([signature]({3}))", ( "LLVM-{release}-Linux-ARM64.tar.xz", "LLVM-{release}-Linux-ARM64.tar.xz.jsonl", + "LLVM-{release}-Linux-ARM64.tar.zst", + "LLVM-{release}-Linux-ARM64.tar.zst.jsonl", ), ), ( @@ -81,30 +85,36 @@ ( ( "MACOS_ARM64", - "* [macOS Apple Silicon]({0}) (ARM64) ([signature]({1}))", + "* macOS Apple Silicon (ARM64): [xz archive]({0}) ([signature]({1})), [zstd archive]({2}) ([signature]({3}))", ( "LLVM-{release}-macOS-ARM64.tar.xz", "LLVM-{release}-macOS-ARM64.tar.xz.jsonl", + "LLVM-{release}-macOS-ARM64.tar.zst", + "LLVM-{release}-macOS-ARM64.tar.zst.jsonl", ), ), ( "MACOS_X86", - "* [macOS Intel]({0}) (x86-64) ([signature]({1}))", + "* macOS Intel (x86-64): [xz archive]({0}) ([signature]({1})), [zstd archive]({2}) ([signature]({3}))", ( "LLVM-{release}-macOS-X64.tar.xz", "LLVM-{release}-macOS-X64.tar.xz.jsonl", + "LLVM-{release}-macOS-X64.tar.zst", + "LLVM-{release}-macOS-X64.tar.zst.jsonl", ), ), ), ( ( "WINDOWS_X64", - "* Windows x64 (64-bit): [installer]({0}) ([signature]({1})), [archive]({2}) ([signature]({3}))", + "* Windows x64 (64-bit): [installer]({0}) ([signature]({1})), [xz archive]({2}) ([signature]({3})), [zstd archive]({4}) ([signature]({5}))", ( "LLVM-{release}-win64.exe", "LLVM-{release}-win64.exe.jsonl", "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.xz", "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.xz.jsonl", + "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.zst", + "clang+llvm-{release}-x86_64-pc-windows-msvc.tar.zst.jsonl", ), ), ( @@ -114,12 +124,14 @@ ), ( "WINDOWS_ARM64", - "* Windows on Arm (ARM64): [installer]({0}) ([signature]({1})), [archive]({2}) ([signature]({3}))", + "* Windows on Arm (ARM64): [installer]({0}) ([signature]({1})), [xz archive]({2}) ([signature]({3})), [zstd archive]({4}) ([signature]({5}))", ( "LLVM-{release}-woa64.exe", "LLVM-{release}-woa64.exe.jsonl", "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.xz", "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.xz.jsonl", + "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.zst", + "clang+llvm-{release}-aarch64-pc-windows-msvc.tar.zst.jsonl", ), ), ), @@ -170,7 +182,7 @@ def create_release(repo, release, tag=None, name=None, message=None): ## Package Types -Each platform has one binary release package. The file name starts with either `LLVM-` or `clang+llvm-` and ends with the platform's name. For example, `LLVM-{release}-Linux-ARM64.tar.xz` contains LLVM binaries for Arm64 Linux. +Each platform has binary release packages. The file name starts with either `LLVM-` or `clang+llvm-` and ends with the platform's name. For example, `LLVM-{release}-Linux-ARM64.tar.xz` contains LLVM binaries for Arm64 Linux. Binary archive packages may be available as `.tar.xz` or `.tar.zst` files. The `.tar.zst` files contain the same package contents, but use zstd compression. Except for Windows. Where `LLVM-*.exe` is an installer intended for using LLVM as a toolchain and the archive `clang+llvm-` contains the contents of the installer, plus libraries and tools not normally used in a toolchain. You most likely want the `LLVM-` installer, unless you are developing software which itself uses LLVM, in which case choose `clang+llvm-`. >From 9f776e9662381abbef282c1ecd3e170f08778599 Mon Sep 17 00:00:00 2001 From: Francisco Pombal <[email protected]> Date: Sat, 6 Jun 2026 04:31:27 +0100 Subject: [PATCH 2/3] [release] fix building zstd archives on Windows 11 ARM builds The Windows 11 ARM runner doesn't have zstd installed by default. This installs zstd from source through vcpkg to address this. Fixes https://github.com/llvm/llvm-project/pull/201518. --- .github/workflows/release-binaries.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml index 90aec02bc760f..fedad4cb62c98 100644 --- a/.github/workflows/release-binaries.yml +++ b/.github/workflows/release-binaries.yml @@ -79,6 +79,13 @@ jobs: vcpkg install openssl:arm64-windows-static-md echo "OPENSSL_DIR=$env:VCPKG_INSTALLATION_ROOT\installed\arm64-windows-static-md" >> $env:GITHUB_ENV + # zstd is missing from the windows-11-arm runner + - name: Install zstd on windows-11-arm runner + if: runner.os == 'Windows' && runner.arch == 'ARM64' + run: | + vcpkg install "zstd[tools]:arm64-windows" + echo "$env:VCPKG_INSTALLATION_ROOT\installed\arm64-windows\bin" >> $env:GITHUB_PATH + - name: Checkout LLVM uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 >From cf87338df49e9a09c71c6f609c49316a48c98b26 Mon Sep 17 00:00:00 2001 From: Francisco Pombal <[email protected]> Date: Sat, 6 Jun 2026 05:36:53 +0100 Subject: [PATCH 3/3] fix GITHUB_PATH not propagating across jobs --- .github/workflows/release-binaries.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml index fedad4cb62c98..bfd7af5d012a7 100644 --- a/.github/workflows/release-binaries.yml +++ b/.github/workflows/release-binaries.yml @@ -61,6 +61,7 @@ jobs: release-binary-basename: ${{ steps.vars.outputs.release-binary-basename }} release-binary-filename: ${{ steps.vars.outputs.release-binary-filename }} release-binary-filename-zstd: ${{ steps.vars.outputs.release-binary-filename-zstd }} + zstd-bin-dir: ${{ steps.vars.outputs.zstd-bin-dir }} build-runs-on: ${{ steps.vars.outputs.build-runs-on }} test-runs-on: ${{ steps.vars.outputs.build-runs-on }} attestation-name: ${{ steps.vars.outputs.attestation-name }} @@ -82,9 +83,7 @@ jobs: # zstd is missing from the windows-11-arm runner - name: Install zstd on windows-11-arm runner if: runner.os == 'Windows' && runner.arch == 'ARM64' - run: | - vcpkg install "zstd[tools]:arm64-windows" - echo "$env:VCPKG_INSTALLATION_ROOT\installed\arm64-windows\bin" >> $env:GITHUB_PATH + run: vcpkg install "zstd[tools]:arm64-windows" - name: Checkout LLVM uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 @@ -161,6 +160,11 @@ jobs: echo "release-binary-filename=$release_binary_basename.tar.xz" >> $GITHUB_OUTPUT echo "release-binary-filename-zstd=$release_binary_basename.tar.zst" >> $GITHUB_OUTPUT + # Export the zstd path if we are on a Windows ARM64 runner + if [ "$RUNNER_OS" = "Windows" ] && [ "$RUNNER_ARCH" = "ARM64" ]; then + echo "zstd-bin-dir=$VCPKG_INSTALLATION_ROOT\installed\arm64-windows\bin" >> $GITHUB_OUTPUT + fi + target="$RUNNER_OS-$RUNNER_ARCH" # The macOS builds try to cross compile some libraries so we need to @@ -301,6 +305,10 @@ jobs: mv $tarball $env:GITHUB_WORKSPACE echo "windows-installer-filename=$(Split-Path -Path $installer -Leaf)" >> $env:GITHUB_OUTPUT + - name: Activate Windows ARM zstd Path + if: needs.prepare.outputs.zstd-bin-dir != '' + run: echo "${{ needs.prepare.outputs.zstd-bin-dir }}" >> $env:GITHUB_PATH + - name: Create zstd compressed tarball shell: bash env: _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
