From 31ebf0f23070c29fb8081a4e07a11a6c45d8be9c Mon Sep 17 00:00:00 2001 From: Bruno Borges Date: Wed, 8 Jul 2026 07:39:46 -0400 Subject: [PATCH] Map Zulu x86 architecture to i686 for Azul Metadata API The Azul Metadata API's `arch=x86` returns both 32-bit (i686) and 64-bit (x64) packages. Because the two variants share identical java_version and distro_version, setup-java cannot distinguish them and may resolve an explicit `architecture: x86` request to a 64-bit JDK (and for Java 21+, where 32-bit is dropped, x86 silently returns x64 instead of failing). The legacy Zulu Discovery API used `arch=x86&hw_bitness=32` to target only 32-bit builds. The Metadata API exposes the equivalent via `arch=i686`, which returns only genuine 32-bit builds with full version parity to the old behavior. Map x86 -> i686 to restore correct 32-bit resolution. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- __tests__/distributors/zulu-installer.test.ts | 6 +++--- __tests__/distributors/zulu-linux-installer.test.ts | 6 +++--- __tests__/distributors/zulu-windows-installer.test.ts | 6 +++--- dist/setup/index.js | 6 +++++- src/distributions/zulu/installer.ts | 6 +++++- 5 files changed, 19 insertions(+), 11 deletions(-) diff --git a/__tests__/distributors/zulu-installer.test.ts b/__tests__/distributors/zulu-installer.test.ts index 6cadf6cf..863a1b79 100644 --- a/__tests__/distributors/zulu-installer.test.ts +++ b/__tests__/distributors/zulu-installer.test.ts @@ -87,7 +87,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100' + '?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ga&availability_types=ca&page=1&page_size=100' ], [ { @@ -96,7 +96,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100' + '?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ea&availability_types=ca&page=1&page_size=100' ], [ { @@ -225,7 +225,7 @@ describe('getAvailableVersions', () => { describe('getArchitectureOptions', () => { it.each([ [{architecture: 'x64'}, 'x64'], - [{architecture: 'x86'}, 'x86'], + [{architecture: 'x86'}, 'i686'], [{architecture: 'aarch64'}, 'aarch64'], [{architecture: 'arm64'}, 'aarch64'], [{architecture: 'arm'}, 'arm'] diff --git a/__tests__/distributors/zulu-linux-installer.test.ts b/__tests__/distributors/zulu-linux-installer.test.ts index 4e3350aa..547bf74a 100644 --- a/__tests__/distributors/zulu-linux-installer.test.ts +++ b/__tests__/distributors/zulu-linux-installer.test.ts @@ -89,7 +89,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=linux_glibc&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100' + '?os=linux_glibc&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ga&availability_types=ca&page=1&page_size=100' ], [ { @@ -98,7 +98,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=linux_glibc&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100' + '?os=linux_glibc&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ea&availability_types=ca&page=1&page_size=100' ], [ { @@ -229,7 +229,7 @@ describe('getAvailableVersions', () => { describe('getArchitectureOptions', () => { it.each([ [{architecture: 'x64'}, 'x64'], - [{architecture: 'x86'}, 'x86'], + [{architecture: 'x86'}, 'i686'], [{architecture: 'aarch64'}, 'aarch64'], [{architecture: 'arm64'}, 'aarch64'], [{architecture: 'arm'}, 'arm'] diff --git a/__tests__/distributors/zulu-windows-installer.test.ts b/__tests__/distributors/zulu-windows-installer.test.ts index 22a07d3c..c6749edb 100644 --- a/__tests__/distributors/zulu-windows-installer.test.ts +++ b/__tests__/distributors/zulu-windows-installer.test.ts @@ -88,7 +88,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100' + '?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ga&availability_types=ca&page=1&page_size=100' ], [ { @@ -97,7 +97,7 @@ describe('getAvailableVersions', () => { packageType: 'jdk', checkLatest: false }, - '?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100' + '?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&arch=i686&release_status=ea&availability_types=ca&page=1&page_size=100' ], [ { @@ -226,7 +226,7 @@ describe('getAvailableVersions', () => { describe('getArchitectureOptions', () => { it.each([ [{architecture: 'x64'}, 'x64'], - [{architecture: 'x86'}, 'x86'], + [{architecture: 'x86'}, 'i686'], [{architecture: 'aarch64'}, 'aarch64'], [{architecture: 'arm64'}, 'aarch64'], [{architecture: 'arm'}, 'arm'] diff --git a/dist/setup/index.js b/dist/setup/index.js index 0b129029..4c6d65f1 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -131465,7 +131465,11 @@ class ZuluDistribution extends JavaBase { case 'x64': return 'x64'; case 'x86': - return 'x86'; + // The Azul Metadata API's "x86" value returns both 32-bit (i686) and + // 64-bit (x64) packages, which are indistinguishable by version and + // would let a 32-bit request resolve to a 64-bit JDK. Use "i686" to + // target only genuine 32-bit builds, matching the legacy API behavior. + return 'i686'; case 'aarch64': case 'arm64': return 'aarch64'; diff --git a/src/distributions/zulu/installer.ts b/src/distributions/zulu/installer.ts index 807e978c..f587b193 100644 --- a/src/distributions/zulu/installer.ts +++ b/src/distributions/zulu/installer.ts @@ -185,7 +185,11 @@ export class ZuluDistribution extends JavaBase { case 'x64': return 'x64'; case 'x86': - return 'x86'; + // The Azul Metadata API's "x86" value returns both 32-bit (i686) and + // 64-bit (x64) packages, which are indistinguishable by version and + // would let a 32-bit request resolve to a 64-bit JDK. Use "i686" to + // target only genuine 32-bit builds, matching the legacy API behavior. + return 'i686'; case 'aarch64': case 'arm64': return 'aarch64';