Paginate through all available versions

This commit is contained in:
James Wald 2026-05-28 21:03:20 -04:00
parent f1b4065015
commit d9458f008c
4 changed files with 91 additions and 39 deletions

View File

@ -17,7 +17,7 @@ describe('getAvailableVersions', () => {
spyHttpClient.mockReturnValue({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
result: [] as IZuluVersions[]
});
spyUtilGetDownloadArchiveExtension = jest.spyOn(
@ -45,7 +45,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -54,7 +54,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100'
],
[
{
@ -63,7 +63,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -72,7 +72,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -81,7 +81,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk+fx',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -90,7 +90,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre+fx',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -99,7 +99,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -108,7 +108,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=100'
]
])('build correct url for %s -> %s', async (input, parsedUrl) => {
const distribution = new ZuluDistribution(input);
@ -138,7 +138,7 @@ describe('getAvailableVersions', () => {
checkLatest: false
});
distribution['getPlatformOption'] = () => 'macos';
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=1000`;
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=macos&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=100`;
await distribution['getAvailableVersions']();
@ -148,6 +148,18 @@ describe('getAvailableVersions', () => {
);
it('load available versions', async () => {
spyHttpClient
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
})
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: [] as IZuluVersions[]
});
const distribution = new ZuluDistribution({
version: '11',
architecture: 'x86',

View File

@ -18,7 +18,7 @@ describe('getAvailableVersions', () => {
spyHttpClient.mockReturnValue({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
result: [] as IZuluVersions[]
});
spyUtilGetDownloadArchiveExtension = jest.spyOn(
@ -46,7 +46,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -55,7 +55,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100'
],
[
{
@ -64,7 +64,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -73,7 +73,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -82,7 +82,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk+fx',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -91,7 +91,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre+fx',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -100,7 +100,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -109,7 +109,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=linux&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=100'
]
])('build correct url for %s -> %s', async (input, parsedUrl) => {
const distribution = new ZuluDistribution(input);
@ -141,7 +141,7 @@ describe('getAvailableVersions', () => {
distribution['getPlatformOption'] = () => 'linux';
// Override extension for linux default arch case to match util behavior
spyUtilGetDownloadArchiveExtension.mockReturnValue('tar.gz');
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=linux&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=1000`;
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=linux&archive_type=tar.gz&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=100`;
await distribution['getAvailableVersions']();
@ -151,6 +151,18 @@ describe('getAvailableVersions', () => {
);
it('load available versions', async () => {
spyHttpClient
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
})
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: [] as IZuluVersions[]
});
const distribution = new ZuluDistribution({
version: '11',
architecture: 'x86',

View File

@ -18,7 +18,7 @@ describe('getAvailableVersions', () => {
spyHttpClient.mockReturnValue({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
result: [] as IZuluVersions[]
});
spyUtilGetDownloadArchiveExtension = jest.spyOn(
@ -46,7 +46,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -55,7 +55,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x86&release_status=ea&availability_types=ca&page=1&page_size=100'
],
[
{
@ -64,7 +64,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -73,7 +73,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jre&javafx_bundled=false&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -82,7 +82,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk+fx',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -91,7 +91,7 @@ describe('getAvailableVersions', () => {
packageType: 'jre+fx',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jre&javafx_bundled=true&arch=x64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -100,7 +100,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=aarch64&release_status=ga&availability_types=ca&page=1&page_size=100'
],
[
{
@ -109,7 +109,7 @@ describe('getAvailableVersions', () => {
packageType: 'jdk',
checkLatest: false
},
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=1000'
'?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=arm&release_status=ga&availability_types=ca&page=1&page_size=100'
]
])('build correct url for %s -> %s', async (input, parsedUrl) => {
const distribution = new ZuluDistribution(input);
@ -139,7 +139,7 @@ describe('getAvailableVersions', () => {
checkLatest: false
});
distribution['getPlatformOption'] = () => 'windows';
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=1000`;
const buildUrl = `https://api.azul.com/metadata/v1/zulu/packages/?os=windows&archive_type=zip&java_package_type=jdk&javafx_bundled=false&arch=${distroArch}&release_status=ga&availability_types=ca&page=1&page_size=100`;
await distribution['getAvailableVersions']();
@ -149,6 +149,18 @@ describe('getAvailableVersions', () => {
);
it('load available versions', async () => {
spyHttpClient
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: manifestData as IZuluVersions[]
})
.mockReturnValueOnce({
statusCode: 200,
headers: {},
result: [] as IZuluVersions[]
});
const distribution = new ZuluDistribution({
version: '11',
architecture: 'x86',

View File

@ -106,25 +106,41 @@ export class ZuluDistribution extends JavaBase {
console.time('Retrieving available versions for Zulu took'); // eslint-disable-line no-console
}
const requestArguments = [
const baseRequestArguments = [
`os=${platform}`,
`archive_type=${extension}`,
`java_package_type=${bundleType}`,
`javafx_bundled=${javafx}`,
`arch=${arch}`,
`release_status=${releaseStatus}`,
`availability_types=ca`,
`page=1`,
`page_size=1000`
`availability_types=ca`
].join('&');
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
// need to iterate through all pages to retrieve the list of all versions
// Azul API doesn't provide a way to retrieve the count of pages so use an infinity loop
let page_index = 1;
const availableVersions: IZuluVersions[] = [];
while (true) {
const requestArguments = `${baseRequestArguments}&page=${page_index}&page_size=100`;
const availableVersionsUrl = `https://api.azul.com/metadata/v1/zulu/packages/?${requestArguments}`;
if (core.isDebug() && page_index === 1) {
// url is identical except page_index so print it once for debug
core.debug(
`Gathering available versions from '${availableVersionsUrl}'`
);
}
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
const paginationPage = (
await this.http.getJson<IZuluVersions[]>(availableVersionsUrl)
).result;
if (paginationPage === null || paginationPage.length === 0) {
// break infinity loop because we have reached end of pagination
break;
}
const availableVersions =
(await this.http.getJson<Array<IZuluVersions>>(availableVersionsUrl))
.result ?? [];
availableVersions.push(...paginationPage);
page_index++;
}
if (core.isDebug()) {
core.startGroup('Print information about available versions');