Skip to content

Commit 48d05a6

Browse files
Claudenbauma109
andauthored
Fix P1 issues: Add pagination and correct architecture mapping for Zulu metadata API
- Add pagination logic to fetch all available packages instead of just first 100 - Add getArchParam() method to correctly map architecture values (x64, x86, arm64, arm) - Update tests to expect correct architecture parameters in API URLs Agent-Logs-Url: https://github.com/nbauma109/setup-java/sessions/b138d8c7-38d8-473f-b525-5b0eebc89962 Co-authored-by: nbauma109 <9403560+nbauma109@users.noreply.github.com>
1 parent 3f583bc commit 48d05a6

4 files changed

Lines changed: 124 additions & 61 deletions

File tree

__tests__/distributors/zulu-linux-installer.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('getAvailableVersions', () => {
5858
packageType: 'jdk',
5959
checkLatest: false
6060
},
61-
'?os=linux-glibc&arch=x86&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
61+
'?os=linux-glibc&arch=x64&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
6262
],
6363
[
6464
{
@@ -67,7 +67,7 @@ describe('getAvailableVersions', () => {
6767
packageType: 'jre',
6868
checkLatest: false
6969
},
70-
'?os=linux-glibc&arch=x86&archive_type=zip&java_package_type=jre&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
70+
'?os=linux-glibc&arch=x64&archive_type=zip&java_package_type=jre&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
7171
],
7272
[
7373
{
@@ -76,7 +76,7 @@ describe('getAvailableVersions', () => {
7676
packageType: 'jdk+fx',
7777
checkLatest: false
7878
},
79-
'?os=linux-glibc&arch=x86&archive_type=zip&java_package_type=jdk&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
79+
'?os=linux-glibc&arch=x64&archive_type=zip&java_package_type=jdk&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
8080
],
8181
[
8282
{
@@ -85,7 +85,7 @@ describe('getAvailableVersions', () => {
8585
packageType: 'jre+fx',
8686
checkLatest: false
8787
},
88-
'?os=linux-glibc&arch=x86&archive_type=zip&java_package_type=jre&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
88+
'?os=linux-glibc&arch=x64&archive_type=zip&java_package_type=jre&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
8989
],
9090
[
9191
{
@@ -94,7 +94,7 @@ describe('getAvailableVersions', () => {
9494
packageType: 'jdk',
9595
checkLatest: false
9696
},
97-
'?os=linux-glibc&arch=arm&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
97+
'?os=linux-glibc&arch=arm64&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
9898
],
9999
[
100100
{
@@ -139,7 +139,8 @@ describe('getAvailableVersions', () => {
139139
distribution['getPlatformOption'] = () => 'linux';
140140
// Override extension for linux default arch case to match util behavior
141141
spyUtilGetDownloadArchiveExtension.mockReturnValue('tar.gz');
142-
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=linux-glibc&arch=${distroArch.arch}&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100`;
142+
const expectedArch = distroArch.bitness === '64' && distroArch.arch === 'x86' ? 'x64' : distroArch.bitness === '64' && distroArch.arch === 'arm' ? 'arm64' : distroArch.arch;
143+
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=linux-glibc&arch=${expectedArch}&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100`;
143144

144145
await distribution['getAvailableVersions']();
145146

__tests__/distributors/zulu-windows-installer.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ describe('getAvailableVersions', () => {
5858
packageType: 'jdk',
5959
checkLatest: false
6060
},
61-
'?os=windows&arch=x86&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
61+
'?os=windows&arch=x64&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
6262
],
6363
[
6464
{
@@ -67,7 +67,7 @@ describe('getAvailableVersions', () => {
6767
packageType: 'jre',
6868
checkLatest: false
6969
},
70-
'?os=windows&arch=x86&archive_type=zip&java_package_type=jre&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
70+
'?os=windows&arch=x64&archive_type=zip&java_package_type=jre&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
7171
],
7272
[
7373
{
@@ -76,7 +76,7 @@ describe('getAvailableVersions', () => {
7676
packageType: 'jdk+fx',
7777
checkLatest: false
7878
},
79-
'?os=windows&arch=x86&archive_type=zip&java_package_type=jdk&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
79+
'?os=windows&arch=x64&archive_type=zip&java_package_type=jdk&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
8080
],
8181
[
8282
{
@@ -85,7 +85,7 @@ describe('getAvailableVersions', () => {
8585
packageType: 'jre+fx',
8686
checkLatest: false
8787
},
88-
'?os=windows&arch=x86&archive_type=zip&java_package_type=jre&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
88+
'?os=windows&arch=x64&archive_type=zip&java_package_type=jre&javafx_bundled=true&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
8989
],
9090
[
9191
{
@@ -94,7 +94,7 @@ describe('getAvailableVersions', () => {
9494
packageType: 'jdk',
9595
checkLatest: false
9696
},
97-
'?os=windows&arch=arm&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
97+
'?os=windows&arch=arm64&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100'
9898
],
9999
[
100100
{
@@ -137,7 +137,8 @@ describe('getAvailableVersions', () => {
137137
checkLatest: false
138138
});
139139
distribution['getPlatformOption'] = () => 'windows';
140-
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=windows&arch=${distroArch.arch}&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100`;
140+
const expectedArch = distroArch.bitness === '64' && distroArch.arch === 'x86' ? 'x64' : distroArch.bitness === '64' && distroArch.arch === 'arm' ? 'arm64' : distroArch.arch;
141+
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=windows&arch=${expectedArch}&archive_type=zip&java_package_type=jdk&javafx_bundled=false&crac_supported=false&release_status=ga&availability_types=ca&certifications=tck&page=1&page_size=100`;
141142

142143
await distribution['getAvailableVersions']();
143144

dist/setup/index.js

Lines changed: 52 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114789,33 +114789,45 @@ class ZuluDistribution extends base_installer_1.JavaBase {
114789114789
// Map old API parameters to new metadata API parameters
114790114790
const osParam = this.getOsParam(platform);
114791114791
const archiveType = this.getArchiveType(extension);
114792-
const requestArguments = [
114793-
`os=${osParam}`,
114794-
`arch=${arch}`,
114795-
`archive_type=${archiveType}`,
114796-
`java_package_type=${bundleType}`,
114797-
`javafx_bundled=${javafx}`,
114798-
`crac_supported=${crac}`,
114799-
`release_status=${releaseStatus}`,
114800-
`availability_types=ca`,
114801-
`certifications=tck`,
114802-
`page=1`,
114803-
`page_size=100`
114804-
]
114805-
.filter(Boolean)
114806-
.join('&');
114807-
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
114808-
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
114809-
const availableVersions = (_c = (yield this.http.getJson(availableVersionsUrl))
114810-
.result) !== null && _c !== void 0 ? _c : [];
114792+
const archParam = this.getArchParam(arch, hw_bitness);
114793+
// Fetch all pages to avoid missing packages when there are > 100 results
114794+
let allVersions = [];
114795+
let page = 1;
114796+
const pageSize = 100;
114797+
let hasMore = true;
114798+
while (hasMore) {
114799+
const requestArguments = [
114800+
`os=${osParam}`,
114801+
`arch=${archParam}`,
114802+
`archive_type=${archiveType}`,
114803+
`java_package_type=${bundleType}`,
114804+
`javafx_bundled=${javafx}`,
114805+
`crac_supported=${crac}`,
114806+
`release_status=${releaseStatus}`,
114807+
`availability_types=ca`,
114808+
`certifications=tck`,
114809+
`page=${page}`,
114810+
`page_size=${pageSize}`
114811+
]
114812+
.filter(Boolean)
114813+
.join('&');
114814+
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
114815+
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
114816+
const pageResults = (_c = (yield this.http.getJson(availableVersionsUrl))
114817+
.result) !== null && _c !== void 0 ? _c : [];
114818+
allVersions = allVersions.concat(pageResults);
114819+
// If we got fewer results than page size, we've reached the end
114820+
hasMore = pageResults.length === pageSize;
114821+
page++;
114822+
}
114811114823
if (core.isDebug()) {
114812114824
core.startGroup('Print information about available versions');
114813114825
console.timeEnd('Retrieving available versions for Zulu took'); // eslint-disable-line no-console
114814-
core.debug(`Available versions: [${availableVersions.length}]`);
114815-
core.debug(availableVersions.map(item => item.java_version.join('.')).join(', '));
114826+
core.debug(`Available versions: [${allVersions.length}]`);
114827+
core.debug(allVersions.map(item => item.java_version.join('.')).join(', '));
114816114828
core.endGroup();
114817114829
}
114818-
return availableVersions;
114830+
return allVersions;
114819114831
});
114820114832
}
114821114833
getArchitectureOptions() {
@@ -114857,6 +114869,24 @@ class ZuluDistribution extends base_installer_1.JavaBase {
114857114869
return platform;
114858114870
}
114859114871
}
114872+
getArchParam(arch, hw_bitness) {
114873+
// Map architecture to new metadata API arch parameter
114874+
// The new API uses x64, x86, arm64, arm (not the legacy x86 + hw_bitness pattern)
114875+
if (arch === 'x86' && hw_bitness === '64') {
114876+
return 'x64';
114877+
}
114878+
else if (arch === 'x86' && hw_bitness === '32') {
114879+
return 'x86';
114880+
}
114881+
else if (arch === 'arm' && hw_bitness === '64') {
114882+
return 'arm64';
114883+
}
114884+
else if (arch === 'arm' && hw_bitness === '') {
114885+
return 'arm';
114886+
}
114887+
// Fallback for other architectures
114888+
return arch;
114889+
}
114860114890
getArchiveType(extension) {
114861114891
// Map extension to archive_type parameter for new API
114862114892
switch (extension) {

src/distributions/zulu/installer.ts

Lines changed: 58 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -115,42 +115,57 @@ export class ZuluDistribution extends JavaBase {
115115
// Map old API parameters to new metadata API parameters
116116
const osParam = this.getOsParam(platform);
117117
const archiveType = this.getArchiveType(extension);
118-
119-
const requestArguments = [
120-
`os=${osParam}`,
121-
`arch=${arch}`,
122-
`archive_type=${archiveType}`,
123-
`java_package_type=${bundleType}`,
124-
`javafx_bundled=${javafx}`,
125-
`crac_supported=${crac}`,
126-
`release_status=${releaseStatus}`,
127-
`availability_types=ca`,
128-
`certifications=tck`,
129-
`page=1`,
130-
`page_size=100`
131-
]
132-
.filter(Boolean)
133-
.join('&');
134-
135-
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
136-
137-
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
138-
139-
const availableVersions =
140-
(await this.http.getJson<Array<IZuluVersions>>(availableVersionsUrl))
141-
.result ?? [];
118+
const archParam = this.getArchParam(arch, hw_bitness);
119+
120+
// Fetch all pages to avoid missing packages when there are > 100 results
121+
let allVersions: IZuluVersions[] = [];
122+
let page = 1;
123+
const pageSize = 100;
124+
let hasMore = true;
125+
126+
while (hasMore) {
127+
const requestArguments = [
128+
`os=${osParam}`,
129+
`arch=${archParam}`,
130+
`archive_type=${archiveType}`,
131+
`java_package_type=${bundleType}`,
132+
`javafx_bundled=${javafx}`,
133+
`crac_supported=${crac}`,
134+
`release_status=${releaseStatus}`,
135+
`availability_types=ca`,
136+
`certifications=tck`,
137+
`page=${page}`,
138+
`page_size=${pageSize}`
139+
]
140+
.filter(Boolean)
141+
.join('&');
142+
143+
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
144+
145+
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
146+
147+
const pageResults =
148+
(await this.http.getJson<Array<IZuluVersions>>(availableVersionsUrl))
149+
.result ?? [];
150+
151+
allVersions = allVersions.concat(pageResults);
152+
153+
// If we got fewer results than page size, we've reached the end
154+
hasMore = pageResults.length === pageSize;
155+
page++;
156+
}
142157

143158
if (core.isDebug()) {
144159
core.startGroup('Print information about available versions');
145160
console.timeEnd('Retrieving available versions for Zulu took'); // eslint-disable-line no-console
146-
core.debug(`Available versions: [${availableVersions.length}]`);
161+
core.debug(`Available versions: [${allVersions.length}]`);
147162
core.debug(
148-
availableVersions.map(item => item.java_version.join('.')).join(', ')
163+
allVersions.map(item => item.java_version.join('.')).join(', ')
149164
);
150165
core.endGroup();
151166
}
152167

153-
return availableVersions;
168+
return allVersions;
154169
}
155170

156171
private getArchitectureOptions(): {
@@ -199,6 +214,22 @@ export class ZuluDistribution extends JavaBase {
199214
}
200215
}
201216

217+
private getArchParam(arch: string, hw_bitness: string): string {
218+
// Map architecture to new metadata API arch parameter
219+
// The new API uses x64, x86, arm64, arm (not the legacy x86 + hw_bitness pattern)
220+
if (arch === 'x86' && hw_bitness === '64') {
221+
return 'x64';
222+
} else if (arch === 'x86' && hw_bitness === '32') {
223+
return 'x86';
224+
} else if (arch === 'arm' && hw_bitness === '64') {
225+
return 'arm64';
226+
} else if (arch === 'arm' && hw_bitness === '') {
227+
return 'arm';
228+
}
229+
// Fallback for other architectures
230+
return arch;
231+
}
232+
202233
private getArchiveType(extension: string): string {
203234
// Map extension to archive_type parameter for new API
204235
switch (extension) {

0 commit comments

Comments
 (0)