mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-25 06:51:11 +00:00
0d9888a4f2
* feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * add coverage * fix * fix * fix * code cov * code cov * code cov * refactor(datasource): integrate GraalVM into java-version datasource Merges graalvm-version datasource into java-version as a unified multi-vendor Java distribution datasource. Implements vendor-based modular architecture with routing layer for Adoptium (Eclipse Temurin) and Oracle GraalVM. Architecture: - Vendor-specific handlers (adoptium.ts, graalvm.ts) with routing in index.ts - Vendor-aware system detection with different arch/os mappings per vendor - Custom registry support for GraalVM's mise-java API - Adoptium remains the default registry for backwards compatibility Package names: - New explicit: adoptium-jdk, adoptium-jre, oracle-graalvm-jdk, oracle-graalvm-jre - Legacy (map to Adoptium): java, java-jdk, java-jre Changes: - Created adoptium.ts and graalvm.ts vendor handlers - Enhanced common.ts with vendor detection and vendor-specific system mappings - Updated index.ts with routing layer and custom registry support - Merged test suites with comprehensive coverage for both vendors - Updated mise manager integration to use JavaVersionDatasource - Removed graalvm-version datasource directory All 65 datasource tests and 93 mise manager tests passing. * fix * test(datasource): add coverage for non-HttpError paths in java-version * fix(datasource): remove dead code and add coverage for java-version Remove unreachable HttpError handling from _getReleases catch block since both getAdoptiumReleases and getGraalvmReleases handle HttpError internally. Add test for the graalvmRegistryUrl fallback when registryUrl is undefined. * fix(datasource): address review comments for GraalVM datasource - Remove unused 'datasource-graalvm-version' cache namespace - Convert MiseJavaRelease interface to Zod schema and derive type from it - Use http.getJson() with the Zod schema in getGraalvmReleases instead of getJsonUnchecked, letting the schema handle invalid/empty responses - Update getGraalvmReleases test mock to use getJson * docs: remove unused datasource-graalvm-version from cacheTtlOverride docs * fix(datasource): preserve Adoptium config typing * fix(datasource): harden GraalVM release parsing * fix(datasource): address GraalVM review feedback * test: cover GraalVM mise package mapping * test(datasource): cover default GraalVM registry fallback * test(datasource): cover legacy registry resolution * test(datasource): type legacy datasource mocks * fix(datasource): harden GraalVM defaults and responses * refactor(datasource): use function-only registry accessors * test(datasource): cover registry accessor functions * test: restore coverage exclusions * chore: retrigger CI checks
147 lines
3.7 KiB
TypeScript
147 lines
3.7 KiB
TypeScript
import { logger } from '../../../logger/index.ts';
|
|
import type { Nullish } from '../../../types/index.ts';
|
|
import { trimLeadingSlash } from '../../../util/url.ts';
|
|
import type { JavaVendor, PackageConfig } from './types.ts';
|
|
|
|
// Api page size limit 50
|
|
export const pageSize = 50;
|
|
|
|
export const defaultRegistryUrl = 'https://api.adoptium.net/';
|
|
|
|
export const datasource = 'java-version';
|
|
|
|
export function parsePackage(packageName: string): PackageConfig {
|
|
const u = new URL(packageName, defaultRegistryUrl);
|
|
const pathname = trimLeadingSlash(u.pathname);
|
|
const vendor = getVendor(pathname);
|
|
const useSystem = u.searchParams.get('system') === 'true';
|
|
const useGraalvmDefaults = vendor === 'oracle-graalvm' && !useSystem;
|
|
return {
|
|
vendor,
|
|
imageType: getImageType(pathname),
|
|
architecture:
|
|
u.searchParams.get('architecture') ??
|
|
(useGraalvmDefaults
|
|
? 'x86_64'
|
|
: getSystemArchitecture(useSystem, vendor)),
|
|
os:
|
|
u.searchParams.get('os') ??
|
|
(useGraalvmDefaults ? 'linux' : getSystemOs(useSystem, vendor)),
|
|
releaseType: parseReleaseType(u.searchParams.get('release-type')),
|
|
};
|
|
}
|
|
|
|
function getVendor(name: string): JavaVendor {
|
|
if (name.includes('oracle-graalvm')) {
|
|
return 'oracle-graalvm';
|
|
}
|
|
return 'adoptium'; // Default for backwards compatibility
|
|
}
|
|
|
|
function parseReleaseType(value: string | null): PackageConfig['releaseType'] {
|
|
return value === 'ga' || value === 'ea' ? value : undefined;
|
|
}
|
|
|
|
function getImageType(name: string): string {
|
|
if (name.includes('-jre') || name === 'java-jre') {
|
|
return 'jre';
|
|
}
|
|
return 'jdk';
|
|
}
|
|
|
|
function getSystemArchitecture(
|
|
useSystem: boolean,
|
|
vendor: JavaVendor,
|
|
): Nullish<string> {
|
|
if (!useSystem) {
|
|
return null;
|
|
}
|
|
|
|
return vendor === 'oracle-graalvm'
|
|
? getGraalvmArchitecture()
|
|
: getAdoptiumArchitecture();
|
|
}
|
|
|
|
function getGraalvmArchitecture(): Nullish<string> {
|
|
switch (process.arch) {
|
|
case 'ia32':
|
|
return 'i686';
|
|
case 'arm64':
|
|
return 'aarch64';
|
|
case 'arm':
|
|
return 'arm32';
|
|
case 'x64':
|
|
return 'x86_64';
|
|
default:
|
|
logger.warn(
|
|
{ arch: process.arch, vendor: 'oracle-graalvm' },
|
|
'Unknown system architecture for GraalVM, defaulting to null',
|
|
);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function getAdoptiumArchitecture(): Nullish<string> {
|
|
switch (process.arch) {
|
|
case 'ia32':
|
|
return 'x86';
|
|
case 'arm64':
|
|
return 'aarch64';
|
|
case 'x64':
|
|
return 'x64';
|
|
case 'arm':
|
|
case 'riscv64':
|
|
case 's390x':
|
|
return process.arch;
|
|
default:
|
|
logger.warn(
|
|
{ arch: process.arch, vendor: 'adoptium' },
|
|
'Unknown system architecture for Adoptium, defaulting to null',
|
|
);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function getSystemOs(useSystem: boolean, vendor: JavaVendor): Nullish<string> {
|
|
if (!useSystem) {
|
|
return null;
|
|
}
|
|
|
|
return vendor === 'oracle-graalvm' ? getGraalvmOs() : getAdoptiumOs();
|
|
}
|
|
|
|
function getGraalvmOs(): Nullish<string> {
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return 'macosx';
|
|
case 'win32':
|
|
return 'windows';
|
|
case 'linux':
|
|
return 'linux';
|
|
default:
|
|
logger.warn(
|
|
{ os: process.platform, vendor: 'oracle-graalvm' },
|
|
'Unknown system OS for GraalVM, defaulting to null',
|
|
);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function getAdoptiumOs(): Nullish<string> {
|
|
switch (process.platform) {
|
|
case 'darwin':
|
|
return 'mac';
|
|
case 'win32':
|
|
return 'windows';
|
|
case 'aix':
|
|
case 'linux':
|
|
return process.platform;
|
|
default:
|
|
logger.warn(
|
|
{ os: process.platform, vendor: 'adoptium' },
|
|
'Unknown system OS for Adoptium, defaulting to null',
|
|
);
|
|
return null;
|
|
}
|
|
}
|