mirror of
https://github.com/actions/setup-java.git
synced 2026-06-23 16:20:28 +03:00
refactor: simplify GraalVM Community release resolution
This commit is contained in:
committed by
GitHub
parent
34df7e6dff
commit
651865a8a8
Vendored
+39
-37
@@ -79086,6 +79086,7 @@ const GRAALVM_DOWNLOAD_URL = 'https://www.graalvm.org/downloads/';
|
|||||||
const GRAALVM_COMMUNITY_RELEASES_URL = 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=100';
|
const GRAALVM_COMMUNITY_RELEASES_URL = 'https://api.github.com/repos/graalvm/graalvm-ce-builds/releases?per_page=100';
|
||||||
const GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN = 'https://api.github.com';
|
const GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN = 'https://api.github.com';
|
||||||
const GRAALVM_COMMUNITY_DOWNLOAD_URL = 'https://github.com/graalvm/graalvm-ce-builds/releases';
|
const GRAALVM_COMMUNITY_DOWNLOAD_URL = 'https://github.com/graalvm/graalvm-ce-builds/releases';
|
||||||
|
const GRAALVM_COMMUNITY_ASSET_PREFIX = 'graalvm-community-jdk-';
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
|
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
|
||||||
const GRAALVM_MIN_VERSION = 17;
|
const GRAALVM_MIN_VERSION = 17;
|
||||||
@@ -79275,7 +79276,10 @@ class GraalVMCommunityDistribution extends GraalVMDistribution {
|
|||||||
}
|
}
|
||||||
const arch = this.getSupportedArchitecture();
|
const arch = this.getSupportedArchitecture();
|
||||||
const { platform, extension } = this.validateStableBuildRequest(range);
|
const { platform, extension } = this.validateStableBuildRequest(range);
|
||||||
const availableVersions = yield this.getAvailableVersionsForPlatform(platform, arch, extension);
|
// GraalVM Community asset names embed the platform, architecture and
|
||||||
|
// archive type, e.g. `graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz`.
|
||||||
|
const assetSuffix = `_${platform}-${arch}_bin.${extension}`;
|
||||||
|
const availableVersions = yield this.getAvailableVersions(assetSuffix);
|
||||||
const satisfiedVersion = availableVersions
|
const satisfiedVersion = availableVersions
|
||||||
.filter(item => (0, util_1.isVersionSatisfies)(range, item.version))
|
.filter(item => (0, util_1.isVersionSatisfies)(range, item.version))
|
||||||
.sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0];
|
.sort((a, b) => -semver_1.default.compareBuild(a.version, b.version))[0];
|
||||||
@@ -79287,60 +79291,58 @@ class GraalVMCommunityDistribution extends GraalVMDistribution {
|
|||||||
return satisfiedVersion;
|
return satisfiedVersion;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
getAvailableVersionsForPlatform(platform, arch, extension) {
|
getAvailableVersions(assetSuffix) {
|
||||||
var _a;
|
var _a, _b;
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const headers = (0, util_1.getGitHubHttpHeaders)();
|
const headers = (0, util_1.getGitHubHttpHeaders)();
|
||||||
const availableVersions = new Map();
|
const versions = new Map();
|
||||||
let releasesUrl = GRAALVM_COMMUNITY_RELEASES_URL;
|
let releasesUrl = GRAALVM_COMMUNITY_RELEASES_URL;
|
||||||
let pageCount = 0;
|
for (let page = 0; releasesUrl && page < util_1.MAX_PAGINATION_PAGES; page++) {
|
||||||
while (releasesUrl) {
|
|
||||||
pageCount++;
|
|
||||||
const response = yield this.http.getJson(releasesUrl, headers);
|
const response = yield this.http.getJson(releasesUrl, headers);
|
||||||
const releases = Array.isArray(response.result) ? response.result : [];
|
const releases = (_a = response.result) !== null && _a !== void 0 ? _a : [];
|
||||||
|
if (releases.length === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
for (const release of releases) {
|
for (const release of releases) {
|
||||||
if (release.draft || release.prerelease) {
|
if (release.draft || release.prerelease) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (const asset of (_a = release.assets) !== null && _a !== void 0 ? _a : []) {
|
for (const asset of (_b = release.assets) !== null && _b !== void 0 ? _b : []) {
|
||||||
const releaseForPlatform = this.toCommunityReleaseForPlatform(asset, platform, arch, extension);
|
const version = this.extractAssetVersion(asset.name, assetSuffix);
|
||||||
if (releaseForPlatform) {
|
if (version) {
|
||||||
availableVersions.set(releaseForPlatform.version, releaseForPlatform);
|
versions.set(version, {
|
||||||
|
version,
|
||||||
|
url: asset.browser_download_url
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const nextUrl = (0, util_1.getNextPageUrlFromLinkHeader)(response.headers);
|
releasesUrl = this.getNextReleasesUrl(response.headers);
|
||||||
if (nextUrl &&
|
|
||||||
!(0, util_1.validatePaginationUrl)(nextUrl, GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN)) {
|
|
||||||
core.warning(`Ignoring pagination link with unexpected origin: ${nextUrl}`);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
releasesUrl = nextUrl;
|
|
||||||
if (releases.length === 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (pageCount >= util_1.MAX_PAGINATION_PAGES) {
|
|
||||||
core.warning(`Reached pagination safeguard limit (${util_1.MAX_PAGINATION_PAGES} pages) while listing GraalVM Community releases.`);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return [...availableVersions.values()];
|
return [...versions.values()];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
toCommunityReleaseForPlatform(asset, platform, arch, extension) {
|
// Returns the GraalVM JDK version encoded in a release asset name when it
|
||||||
const match = asset.name.match(/^graalvm-community-jdk-(?<version>\d+(?:\.\d+)+)_(?<platform>linux|macos|windows)-(?<arch>x64|aarch64)_bin\.(?<extension>tar\.gz|zip)$/);
|
// matches the requested platform/architecture/archive suffix, otherwise null.
|
||||||
if (!(match === null || match === void 0 ? void 0 : match.groups)) {
|
extractAssetVersion(assetName, assetSuffix) {
|
||||||
|
if (!assetName.startsWith(GRAALVM_COMMUNITY_ASSET_PREFIX) ||
|
||||||
|
!assetName.endsWith(assetSuffix)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (match.groups.platform !== platform ||
|
const rawVersion = assetName.slice(GRAALVM_COMMUNITY_ASSET_PREFIX.length, -assetSuffix.length);
|
||||||
match.groups.arch !== arch ||
|
if (!/^\d+(?:\.\d+)*$/.test(rawVersion)) {
|
||||||
match.groups.extension !== extension) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return {
|
return (0, util_1.convertVersionToSemver)(rawVersion);
|
||||||
version: (0, util_1.convertVersionToSemver)(match.groups.version),
|
}
|
||||||
url: asset.browser_download_url
|
getNextReleasesUrl(headers) {
|
||||||
};
|
const nextUrl = (0, util_1.getNextPageUrlFromLinkHeader)(headers);
|
||||||
|
if (nextUrl &&
|
||||||
|
!(0, util_1.validatePaginationUrl)(nextUrl, GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN)) {
|
||||||
|
core.warning(`Ignoring pagination link with unexpected origin: ${nextUrl}`);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return nextUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.GraalVMCommunityDistribution = GraalVMCommunityDistribution;
|
exports.GraalVMCommunityDistribution = GraalVMCommunityDistribution;
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ const GRAALVM_COMMUNITY_RELEASES_URL =
|
|||||||
const GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN = 'https://api.github.com';
|
const GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN = 'https://api.github.com';
|
||||||
const GRAALVM_COMMUNITY_DOWNLOAD_URL =
|
const GRAALVM_COMMUNITY_DOWNLOAD_URL =
|
||||||
'https://github.com/graalvm/graalvm-ce-builds/releases';
|
'https://github.com/graalvm/graalvm-ce-builds/releases';
|
||||||
|
const GRAALVM_COMMUNITY_ASSET_PREFIX = 'graalvm-community-jdk-';
|
||||||
const IS_WINDOWS = process.platform === 'win32';
|
const IS_WINDOWS = process.platform === 'win32';
|
||||||
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
|
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
|
||||||
const GRAALVM_MIN_VERSION = 17;
|
const GRAALVM_MIN_VERSION = 17;
|
||||||
@@ -350,11 +351,10 @@ export class GraalVMCommunityDistribution extends GraalVMDistribution {
|
|||||||
|
|
||||||
const arch = this.getSupportedArchitecture();
|
const arch = this.getSupportedArchitecture();
|
||||||
const {platform, extension} = this.validateStableBuildRequest(range);
|
const {platform, extension} = this.validateStableBuildRequest(range);
|
||||||
const availableVersions = await this.getAvailableVersionsForPlatform(
|
// GraalVM Community asset names embed the platform, architecture and
|
||||||
platform,
|
// archive type, e.g. `graalvm-community-jdk-21.0.2_linux-x64_bin.tar.gz`.
|
||||||
arch,
|
const assetSuffix = `_${platform}-${arch}_bin.${extension}`;
|
||||||
extension
|
const availableVersions = await this.getAvailableVersions(assetSuffix);
|
||||||
);
|
|
||||||
|
|
||||||
const satisfiedVersion = availableVersions
|
const satisfiedVersion = availableVersions
|
||||||
.filter(item => isVersionSatisfies(range, item.version))
|
.filter(item => isVersionSatisfies(range, item.version))
|
||||||
@@ -373,24 +373,23 @@ export class GraalVMCommunityDistribution extends GraalVMDistribution {
|
|||||||
return satisfiedVersion;
|
return satisfiedVersion;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getAvailableVersionsForPlatform(
|
private async getAvailableVersions(
|
||||||
platform: OsVersions,
|
assetSuffix: string
|
||||||
arch: SupportedArchitecture,
|
|
||||||
extension: string
|
|
||||||
): Promise<JavaDownloadRelease[]> {
|
): Promise<JavaDownloadRelease[]> {
|
||||||
const headers = getGitHubHttpHeaders();
|
const headers = getGitHubHttpHeaders();
|
||||||
const availableVersions = new Map<string, JavaDownloadRelease>();
|
const versions = new Map<string, JavaDownloadRelease>();
|
||||||
let releasesUrl: string | null = GRAALVM_COMMUNITY_RELEASES_URL;
|
let releasesUrl: string | null = GRAALVM_COMMUNITY_RELEASES_URL;
|
||||||
let pageCount = 0;
|
|
||||||
|
|
||||||
while (releasesUrl) {
|
for (let page = 0; releasesUrl && page < MAX_PAGINATION_PAGES; page++) {
|
||||||
pageCount++;
|
|
||||||
const response = await this.http.getJson<GraalVMCommunityRelease[]>(
|
const response = await this.http.getJson<GraalVMCommunityRelease[]>(
|
||||||
releasesUrl,
|
releasesUrl,
|
||||||
headers
|
headers
|
||||||
);
|
);
|
||||||
|
|
||||||
const releases = Array.isArray(response.result) ? response.result : [];
|
const releases = response.result ?? [];
|
||||||
|
if (releases.length === 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for (const release of releases) {
|
for (const release of releases) {
|
||||||
if (release.draft || release.prerelease) {
|
if (release.draft || release.prerelease) {
|
||||||
@@ -398,74 +397,60 @@ export class GraalVMCommunityDistribution extends GraalVMDistribution {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const asset of release.assets ?? []) {
|
for (const asset of release.assets ?? []) {
|
||||||
const releaseForPlatform = this.toCommunityReleaseForPlatform(
|
const version = this.extractAssetVersion(asset.name, assetSuffix);
|
||||||
asset,
|
if (version) {
|
||||||
platform,
|
versions.set(version, {
|
||||||
arch,
|
version,
|
||||||
extension
|
url: asset.browser_download_url
|
||||||
);
|
});
|
||||||
if (releaseForPlatform) {
|
|
||||||
availableVersions.set(
|
|
||||||
releaseForPlatform.version,
|
|
||||||
releaseForPlatform
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const nextUrl = getNextPageUrlFromLinkHeader(response.headers);
|
releasesUrl = this.getNextReleasesUrl(response.headers);
|
||||||
if (
|
|
||||||
nextUrl &&
|
|
||||||
!validatePaginationUrl(nextUrl, GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN)
|
|
||||||
) {
|
|
||||||
core.warning(
|
|
||||||
`Ignoring pagination link with unexpected origin: ${nextUrl}`
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
releasesUrl = nextUrl;
|
|
||||||
|
|
||||||
if (releases.length === 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pageCount >= MAX_PAGINATION_PAGES) {
|
|
||||||
core.warning(
|
|
||||||
`Reached pagination safeguard limit (${MAX_PAGINATION_PAGES} pages) while listing GraalVM Community releases.`
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return [...availableVersions.values()];
|
return [...versions.values()];
|
||||||
}
|
}
|
||||||
|
|
||||||
private toCommunityReleaseForPlatform(
|
// Returns the GraalVM JDK version encoded in a release asset name when it
|
||||||
asset: GraalVMCommunityAsset,
|
// matches the requested platform/architecture/archive suffix, otherwise null.
|
||||||
platform: OsVersions,
|
private extractAssetVersion(
|
||||||
arch: SupportedArchitecture,
|
assetName: string,
|
||||||
extension: string
|
assetSuffix: string
|
||||||
): JavaDownloadRelease | null {
|
): string | null {
|
||||||
const match = asset.name.match(
|
|
||||||
/^graalvm-community-jdk-(?<version>\d+(?:\.\d+)+)_(?<platform>linux|macos|windows)-(?<arch>x64|aarch64)_bin\.(?<extension>tar\.gz|zip)$/
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!match?.groups) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
match.groups.platform !== platform ||
|
!assetName.startsWith(GRAALVM_COMMUNITY_ASSET_PREFIX) ||
|
||||||
match.groups.arch !== arch ||
|
!assetName.endsWith(assetSuffix)
|
||||||
match.groups.extension !== extension
|
|
||||||
) {
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
const rawVersion = assetName.slice(
|
||||||
version: convertVersionToSemver(match.groups.version),
|
GRAALVM_COMMUNITY_ASSET_PREFIX.length,
|
||||||
url: asset.browser_download_url
|
-assetSuffix.length
|
||||||
};
|
);
|
||||||
|
|
||||||
|
if (!/^\d+(?:\.\d+)*$/.test(rawVersion)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return convertVersionToSemver(rawVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
private getNextReleasesUrl(
|
||||||
|
headers: Record<string, string | string[] | undefined>
|
||||||
|
): string | null {
|
||||||
|
const nextUrl = getNextPageUrlFromLinkHeader(headers);
|
||||||
|
if (
|
||||||
|
nextUrl &&
|
||||||
|
!validatePaginationUrl(nextUrl, GRAALVM_COMMUNITY_RELEASES_PAGE_ORIGIN)
|
||||||
|
) {
|
||||||
|
core.warning(
|
||||||
|
`Ignoring pagination link with unexpected origin: ${nextUrl}`
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return nextUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user