mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-25 15:01:49 +00:00
a53aaf4141
* refactor(java-version): extract adoptium HTTP logic from datasource class Move getPageReleases and the Adoptium fetch logic out of the JavaVersionDatasource class into a standalone adoptium.ts module. This makes the code easier to test in isolation and decouples Adoptium-specific logic from the datasource class. No behavior change — customRegistrySupport remains false, and the hardcoded adoptiumRegistryUrl replaces the previously injected defaultRegistryUrl (which was always the same value). * fix(java-version): remove unused adoptiumRegistryUrl import from test * test(java-version): use partial helper in spec * refactor(java-version): extract adoptium HTTP logic from datasource class * fix(java-version): pass Adoptium schema to HTTP client * test(java-version): move Adoptium test to module spec * chore(ci): retrigger failed checks
82 lines
2.2 KiB
TypeScript
82 lines
2.2 KiB
TypeScript
import { logger } from '../../../logger/index.ts';
|
|
import { ExternalHostError } from '../../../types/errors/external-host-error.ts';
|
|
import { type Http, HttpError } from '../../../util/http/index.ts';
|
|
import type { Release, ReleaseResult } from '../types.ts';
|
|
import { pageSize } from './common.ts';
|
|
import { AdoptiumJavaResponse } from './schema.ts';
|
|
import type { PackageConfig } from './types.ts';
|
|
|
|
export const adoptiumRegistryUrl = 'https://api.adoptium.net/';
|
|
|
|
async function getPageReleases(
|
|
http: Http,
|
|
url: string,
|
|
page: number,
|
|
): Promise<Release[] | null> {
|
|
const pgUrl = `${url}&page=${page}`;
|
|
try {
|
|
const pgRes = await http.getJson(pgUrl, AdoptiumJavaResponse);
|
|
return (
|
|
pgRes?.body?.versions?.map(({ semver }) => ({
|
|
version: semver,
|
|
})) ?? null
|
|
);
|
|
} catch (err) {
|
|
if (
|
|
page !== 0 &&
|
|
err instanceof HttpError &&
|
|
err.response?.statusCode === 404
|
|
) {
|
|
// No more pages
|
|
return null;
|
|
}
|
|
|
|
throw err;
|
|
}
|
|
}
|
|
|
|
export async function getAdoptiumReleases(
|
|
http: Http,
|
|
pkgConfig: PackageConfig,
|
|
): Promise<ReleaseResult | null> {
|
|
logger.trace({ pkgConfig }, 'fetching Adoptium releases');
|
|
|
|
let url = `${adoptiumRegistryUrl}v3/info/release_versions?page_size=${pageSize}&image_type=${pkgConfig.imageType}&project=jdk&release_type=ga&sort_method=DATE&sort_order=DESC`;
|
|
|
|
if (pkgConfig.architecture) {
|
|
url += `&architecture=${pkgConfig.architecture}`;
|
|
}
|
|
if (pkgConfig.os) {
|
|
url += `&os=${pkgConfig.os}`;
|
|
}
|
|
|
|
const result: ReleaseResult = {
|
|
homepage: 'https://adoptium.net',
|
|
releases: [],
|
|
};
|
|
|
|
try {
|
|
let page = 0;
|
|
let releases = await getPageReleases(http, url, page);
|
|
while (releases) {
|
|
result.releases.push(...releases);
|
|
if (releases.length !== pageSize || page >= 50) {
|
|
break;
|
|
}
|
|
page += 1;
|
|
releases = await getPageReleases(http, url, page);
|
|
}
|
|
} catch (err) {
|
|
if (err instanceof HttpError) {
|
|
if (err.response?.statusCode !== 404) {
|
|
throw new ExternalHostError(err);
|
|
}
|
|
// 404 is handled by getPageReleases, so if we get here it's an unexpected 404
|
|
return null;
|
|
}
|
|
throw err;
|
|
}
|
|
|
|
return result.releases.length ? result : null;
|
|
}
|