[llvm-branch-commits] [llvm] [release] fix building zstd archives on Windows 11 ARM builds (PR #202000)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Fri Jun 5 20:56:07 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-github-workflow
Author: Francisco Pombal (FranciscoPombal)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/202000.diff
2 Files Affected:
- (modified) .github/workflows/release-binaries.yml (+20-1)
- (modified) llvm/utils/release/github-upload-release.py (+19-7)
``````````diff
diff --git a/.github/workflows/release-binaries.yml b/.github/workflows/release-binaries.yml
index 1de66bdfe6f02..fedad4cb62c98 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 }}
@@ -78,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 at 8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
@@ -151,6 +159,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 +301,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 +316,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 +324,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 at b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
id: artifact-upload
@@ -317,6 +335,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-`.
``````````
</details>
https://github.com/llvm/llvm-project/pull/202000
More information about the llvm-branch-commits
mailing list