mirror of
				https://github.com/actions/setup-java.git
				synced 2025-11-04 08:20:54 +00:00 
			
		
		
		
	Merge bcde537b63 into de5a937a1d
		
	This commit is contained in:
		
				commit
				
					
						9dd17970a1
					
				
			
		
					 6 changed files with 1249 additions and 354 deletions
				
			
		
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										4
									
								
								dist/cleanup/index.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								dist/cleanup/index.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -94747,8 +94747,8 @@ function convertVersionToSemver(version) {
 | 
			
		|||
}
 | 
			
		||||
exports.convertVersionToSemver = convertVersionToSemver;
 | 
			
		||||
function getGitHubHttpHeaders() {
 | 
			
		||||
    const token = core.getInput('token');
 | 
			
		||||
    const auth = !token ? undefined : `token ${token}`;
 | 
			
		||||
    const resolvedToken = core.getInput('token') || process.env.GITHUB_TOKEN;
 | 
			
		||||
    const auth = !resolvedToken ? undefined : `token ${resolvedToken}`;
 | 
			
		||||
    const headers = {
 | 
			
		||||
        accept: 'application/vnd.github.VERSION.raw'
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										162
									
								
								dist/setup/index.js
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										162
									
								
								dist/setup/index.js
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -130525,37 +130525,56 @@ const tc = __importStar(__nccwpck_require__(27784));
 | 
			
		|||
const fs_1 = __importDefault(__nccwpck_require__(57147));
 | 
			
		||||
const path_1 = __importDefault(__nccwpck_require__(71017));
 | 
			
		||||
const base_installer_1 = __nccwpck_require__(59741);
 | 
			
		||||
const util_1 = __nccwpck_require__(92629);
 | 
			
		||||
const http_client_1 = __nccwpck_require__(96255);
 | 
			
		||||
const util_1 = __nccwpck_require__(92629);
 | 
			
		||||
const GRAALVM_DL_BASE = 'https://download.oracle.com/graalvm';
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
 | 
			
		||||
const GRAALVM_MIN_VERSION = 17;
 | 
			
		||||
const SUPPORTED_ARCHITECTURES = ['x64', 'aarch64'];
 | 
			
		||||
class GraalVMDistribution extends base_installer_1.JavaBase {
 | 
			
		||||
    constructor(installerOptions) {
 | 
			
		||||
        super('GraalVM', installerOptions);
 | 
			
		||||
    }
 | 
			
		||||
    downloadTool(javaRelease) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
 | 
			
		||||
            let javaArchivePath = yield tc.downloadTool(javaRelease.url);
 | 
			
		||||
            core.info(`Extracting Java archive...`);
 | 
			
		||||
            const extension = (0, util_1.getDownloadArchiveExtension)();
 | 
			
		||||
            if (process.platform === 'win32') {
 | 
			
		||||
                javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath);
 | 
			
		||||
            try {
 | 
			
		||||
                core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
 | 
			
		||||
                let javaArchivePath = yield tc.downloadTool(javaRelease.url);
 | 
			
		||||
                core.info(`Extracting Java archive...`);
 | 
			
		||||
                const extension = (0, util_1.getDownloadArchiveExtension)();
 | 
			
		||||
                if (IS_WINDOWS) {
 | 
			
		||||
                    javaArchivePath = (0, util_1.renameWinArchive)(javaArchivePath);
 | 
			
		||||
                }
 | 
			
		||||
                const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension);
 | 
			
		||||
                // Add validation for extracted path
 | 
			
		||||
                if (!fs_1.default.existsSync(extractedJavaPath)) {
 | 
			
		||||
                    throw new Error(`Extraction failed: path ${extractedJavaPath} does not exist`);
 | 
			
		||||
                }
 | 
			
		||||
                const dirContents = fs_1.default.readdirSync(extractedJavaPath);
 | 
			
		||||
                if (dirContents.length === 0) {
 | 
			
		||||
                    throw new Error('Extraction failed: no files found in extracted directory');
 | 
			
		||||
                }
 | 
			
		||||
                const archivePath = path_1.default.join(extractedJavaPath, dirContents[0]);
 | 
			
		||||
                const version = this.getToolcacheVersionName(javaRelease.version);
 | 
			
		||||
                const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
 | 
			
		||||
                return { version: javaRelease.version, path: javaPath };
 | 
			
		||||
            }
 | 
			
		||||
            catch (error) {
 | 
			
		||||
                core.error(`Failed to download and extract GraalVM: ${error}`);
 | 
			
		||||
                throw error;
 | 
			
		||||
            }
 | 
			
		||||
            const extractedJavaPath = yield (0, util_1.extractJdkFile)(javaArchivePath, extension);
 | 
			
		||||
            const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0];
 | 
			
		||||
            const archivePath = path_1.default.join(extractedJavaPath, archiveName);
 | 
			
		||||
            const version = this.getToolcacheVersionName(javaRelease.version);
 | 
			
		||||
            const javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
 | 
			
		||||
            return { version: javaRelease.version, path: javaPath };
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    findPackageForDownload(range) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            // Add input validation
 | 
			
		||||
            if (!range || typeof range !== 'string') {
 | 
			
		||||
                throw new Error('Version range is required and must be a string');
 | 
			
		||||
            }
 | 
			
		||||
            const arch = this.distributionArchitecture();
 | 
			
		||||
            if (arch !== 'x64' && arch !== 'aarch64') {
 | 
			
		||||
                throw new Error(`Unsupported architecture: ${this.architecture}`);
 | 
			
		||||
            if (!SUPPORTED_ARCHITECTURES.includes(arch)) {
 | 
			
		||||
                throw new Error(`Unsupported architecture: ${this.architecture}. Supported architectures are: ${SUPPORTED_ARCHITECTURES.join(', ')}`);
 | 
			
		||||
            }
 | 
			
		||||
            if (!this.stable) {
 | 
			
		||||
                return this.findEABuildDownloadUrl(`${range}-ea`);
 | 
			
		||||
| 
						 | 
				
			
			@ -130565,81 +130584,104 @@ class GraalVMDistribution extends base_installer_1.JavaBase {
 | 
			
		|||
            }
 | 
			
		||||
            const platform = this.getPlatform();
 | 
			
		||||
            const extension = (0, util_1.getDownloadArchiveExtension)();
 | 
			
		||||
            let major;
 | 
			
		||||
            let fileUrl;
 | 
			
		||||
            if (range.includes('.')) {
 | 
			
		||||
                major = range.split('.')[0];
 | 
			
		||||
                fileUrl = `${GRAALVM_DL_BASE}/${major}/archive/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
            const major = range.includes('.') ? range.split('.')[0] : range;
 | 
			
		||||
            const majorVersion = parseInt(major);
 | 
			
		||||
            if (isNaN(majorVersion)) {
 | 
			
		||||
                throw new Error(`Invalid version format: ${range}`);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                major = range;
 | 
			
		||||
                fileUrl = `${GRAALVM_DL_BASE}/${range}/latest/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
            }
 | 
			
		||||
            if (parseInt(major) < 17) {
 | 
			
		||||
                throw new Error('GraalVM is only supported for JDK 17 and later');
 | 
			
		||||
            if (majorVersion < GRAALVM_MIN_VERSION) {
 | 
			
		||||
                throw new Error(`GraalVM is only supported for JDK ${GRAALVM_MIN_VERSION} and later. Requested version: ${major}`);
 | 
			
		||||
            }
 | 
			
		||||
            const fileUrl = this.constructFileUrl(range, major, platform, arch, extension);
 | 
			
		||||
            const response = yield this.http.head(fileUrl);
 | 
			
		||||
            if (response.message.statusCode === http_client_1.HttpCodes.NotFound) {
 | 
			
		||||
                throw new Error(`Could not find GraalVM for SemVer ${range}`);
 | 
			
		||||
            }
 | 
			
		||||
            if (response.message.statusCode !== http_client_1.HttpCodes.OK) {
 | 
			
		||||
                throw new Error(`Http request for GraalVM failed with status code: ${response.message.statusCode}`);
 | 
			
		||||
            }
 | 
			
		||||
            this.handleHttpResponse(response, range);
 | 
			
		||||
            return { url: fileUrl, version: range };
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    constructFileUrl(range, major, platform, arch, extension) {
 | 
			
		||||
        return range.includes('.')
 | 
			
		||||
            ? `${GRAALVM_DL_BASE}/${major}/archive/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`
 | 
			
		||||
            : `${GRAALVM_DL_BASE}/${range}/latest/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
    }
 | 
			
		||||
    handleHttpResponse(response, range) {
 | 
			
		||||
        const statusCode = response.message.statusCode;
 | 
			
		||||
        if (statusCode === http_client_1.HttpCodes.NotFound) {
 | 
			
		||||
            throw new Error(`Could not find GraalVM for SemVer ${range}. Please check if this version is available at ${GRAALVM_DL_BASE}`);
 | 
			
		||||
        }
 | 
			
		||||
        if (statusCode === http_client_1.HttpCodes.Unauthorized ||
 | 
			
		||||
            statusCode === http_client_1.HttpCodes.Forbidden) {
 | 
			
		||||
            throw new Error(`Access denied when downloading GraalVM. Status code: ${statusCode}. Please check your credentials or permissions.`);
 | 
			
		||||
        }
 | 
			
		||||
        if (statusCode !== http_client_1.HttpCodes.OK) {
 | 
			
		||||
            throw new Error(`HTTP request for GraalVM failed with status code: ${statusCode} (${response.message.statusMessage || 'Unknown error'})`);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    findEABuildDownloadUrl(javaEaVersion) {
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            core.debug(`Searching for EA build: ${javaEaVersion}`);
 | 
			
		||||
            const versions = yield this.fetchEAJson(javaEaVersion);
 | 
			
		||||
            core.debug(`Found ${versions.length} EA versions`);
 | 
			
		||||
            const latestVersion = versions.find(v => v.latest);
 | 
			
		||||
            if (!latestVersion) {
 | 
			
		||||
                core.error(`Available versions: ${versions.map(v => v.version).join(', ')}`);
 | 
			
		||||
                throw new Error(`Unable to find latest version for '${javaEaVersion}'`);
 | 
			
		||||
            }
 | 
			
		||||
            core.debug(`Latest version found: ${latestVersion.version}`);
 | 
			
		||||
            const arch = this.distributionArchitecture();
 | 
			
		||||
            const file = latestVersion.files.find(f => f.arch === arch && f.platform === GRAALVM_PLATFORM);
 | 
			
		||||
            if (!file || !file.filename.startsWith('graalvm-jdk-')) {
 | 
			
		||||
                throw new Error(`Unable to find file metadata for '${javaEaVersion}'`);
 | 
			
		||||
            if (!file) {
 | 
			
		||||
                core.error(`Available files for architecture ${arch}: ${JSON.stringify(latestVersion.files)}`);
 | 
			
		||||
                throw new Error(`Unable to find file for architecture '${arch}' and platform '${GRAALVM_PLATFORM}'`);
 | 
			
		||||
            }
 | 
			
		||||
            if (!file.filename.startsWith('graalvm-jdk-')) {
 | 
			
		||||
                throw new Error(`Invalid filename format: ${file.filename}. Expected to start with 'graalvm-jdk-'`);
 | 
			
		||||
            }
 | 
			
		||||
            const downloadUrl = `${latestVersion.download_base_url}${file.filename}`;
 | 
			
		||||
            core.debug(`Download URL: ${downloadUrl}`);
 | 
			
		||||
            return {
 | 
			
		||||
                url: `${latestVersion.download_base_url}${file.filename}`,
 | 
			
		||||
                url: downloadUrl,
 | 
			
		||||
                version: latestVersion.version
 | 
			
		||||
            };
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    fetchEAJson(javaEaVersion) {
 | 
			
		||||
        var _a;
 | 
			
		||||
        return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
            const owner = 'graalvm';
 | 
			
		||||
            const repository = 'oracle-graalvm-ea-builds';
 | 
			
		||||
            const branch = 'main';
 | 
			
		||||
            const filePath = `versions/${javaEaVersion}.json`;
 | 
			
		||||
            const url = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`;
 | 
			
		||||
            const url = `https://api.github.com/repos/graalvm/oracle-graalvm-ea-builds/contents/versions/${javaEaVersion}.json?ref=main`;
 | 
			
		||||
            const headers = (0, util_1.getGitHubHttpHeaders)();
 | 
			
		||||
            core.debug(`Trying to fetch available version info for GraalVM EA builds from '${url}'`);
 | 
			
		||||
            let fetchedJson;
 | 
			
		||||
            try {
 | 
			
		||||
                fetchedJson = (yield this.http.getJson(url, headers))
 | 
			
		||||
                    .result;
 | 
			
		||||
                const response = yield this.http.getJson(url, headers);
 | 
			
		||||
                if (!response.result) {
 | 
			
		||||
                    throw new Error(`No GraalVM EA build found for version '${javaEaVersion}'. Please check if the version is correct.`);
 | 
			
		||||
                }
 | 
			
		||||
                return response.result;
 | 
			
		||||
            }
 | 
			
		||||
            catch (err) {
 | 
			
		||||
                throw Error(`Fetching version info for GraalVM EA builds from '${url}' failed with the error: ${err.message}`);
 | 
			
		||||
            catch (error) {
 | 
			
		||||
                if (error instanceof Error) {
 | 
			
		||||
                    // Check if it's a 404 error (file not found)
 | 
			
		||||
                    if ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('404')) {
 | 
			
		||||
                        throw new Error(`GraalVM EA version '${javaEaVersion}' not found. Please verify the version exists in the EA builds repository.`);
 | 
			
		||||
                    }
 | 
			
		||||
                    // Re-throw with more context
 | 
			
		||||
                    throw new Error(`Failed to fetch GraalVM EA version information for '${javaEaVersion}': ${error.message}`);
 | 
			
		||||
                }
 | 
			
		||||
                // If it's not an Error instance, throw a generic error
 | 
			
		||||
                throw new Error(`Failed to fetch GraalVM EA version information for '${javaEaVersion}'`);
 | 
			
		||||
            }
 | 
			
		||||
            if (fetchedJson === null) {
 | 
			
		||||
                throw Error(`No GraalVM EA build found. Are you sure java-version: '${javaEaVersion}' is correct?`);
 | 
			
		||||
            }
 | 
			
		||||
            return fetchedJson;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    getPlatform(platform = process.platform) {
 | 
			
		||||
        switch (platform) {
 | 
			
		||||
            case 'darwin':
 | 
			
		||||
                return 'macos';
 | 
			
		||||
            case 'win32':
 | 
			
		||||
                return 'windows';
 | 
			
		||||
            case 'linux':
 | 
			
		||||
                return 'linux';
 | 
			
		||||
            default:
 | 
			
		||||
                throw new Error(`Platform '${platform}' is not supported. Supported platforms: 'linux', 'macos', 'windows'`);
 | 
			
		||||
        const platformMap = {
 | 
			
		||||
            darwin: 'macos',
 | 
			
		||||
            win32: 'windows',
 | 
			
		||||
            linux: 'linux'
 | 
			
		||||
        };
 | 
			
		||||
        const result = platformMap[platform];
 | 
			
		||||
        if (!result) {
 | 
			
		||||
            throw new Error(`Platform '${platform}' is not supported. Supported platforms: 'linux', 'macos', 'windows'`);
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
exports.GraalVMDistribution = GraalVMDistribution;
 | 
			
		||||
| 
						 | 
				
			
			@ -132782,8 +132824,8 @@ function convertVersionToSemver(version) {
 | 
			
		|||
}
 | 
			
		||||
exports.convertVersionToSemver = convertVersionToSemver;
 | 
			
		||||
function getGitHubHttpHeaders() {
 | 
			
		||||
    const token = core.getInput('token');
 | 
			
		||||
    const auth = !token ? undefined : `token ${token}`;
 | 
			
		||||
    const resolvedToken = core.getInput('token') || process.env.GITHUB_TOKEN;
 | 
			
		||||
    const auth = !resolvedToken ? undefined : `token ${resolvedToken}`;
 | 
			
		||||
    const headers = {
 | 
			
		||||
        accept: 'application/vnd.github.VERSION.raw'
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										145
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										145
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -841,9 +841,9 @@
 | 
			
		|||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@eslint-community/eslint-utils": {
 | 
			
		||||
      "version": "4.7.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
 | 
			
		||||
      "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
 | 
			
		||||
      "version": "4.9.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "eslint-visitor-keys": "^3.4.3"
 | 
			
		||||
| 
						 | 
				
			
			@ -1716,17 +1716,16 @@
 | 
			
		|||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/eslint-plugin": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@eslint-community/regexpp": "^4.10.0",
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/type-utils": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/utils": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/type-utils": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/utils": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.43.0",
 | 
			
		||||
        "graphemer": "^1.4.0",
 | 
			
		||||
        "ignore": "^7.0.0",
 | 
			
		||||
        "natural-compare": "^1.4.0",
 | 
			
		||||
| 
						 | 
				
			
			@ -1740,9 +1739,9 @@
 | 
			
		|||
        "url": "https://opencollective.com/typescript-eslint"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "@typescript-eslint/parser": "^8.35.1",
 | 
			
		||||
        "@typescript-eslint/parser": "^8.43.0",
 | 
			
		||||
        "eslint": "^8.57.0 || ^9.0.0",
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1750,22 +1749,20 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/parser": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.43.0",
 | 
			
		||||
        "debug": "^4.3.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1777,18 +1774,17 @@
 | 
			
		|||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "eslint": "^8.57.0 || ^9.0.0",
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/project-service": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/tsconfig-utils": "^8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "^8.35.1",
 | 
			
		||||
        "@typescript-eslint/tsconfig-utils": "^8.43.0",
 | 
			
		||||
        "@typescript-eslint/types": "^8.43.0",
 | 
			
		||||
        "debug": "^4.3.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1799,18 +1795,17 @@
 | 
			
		|||
        "url": "https://opencollective.com/typescript-eslint"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/scope-manager": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/types": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.35.1"
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.43.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -1821,11 +1816,10 @@
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/tsconfig-utils": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -1834,18 +1828,18 @@
 | 
			
		|||
        "url": "https://opencollective.com/typescript-eslint"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/type-utils": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/utils": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/utils": "8.43.0",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "ts-api-utils": "^2.1.0"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -1858,15 +1852,14 @@
 | 
			
		|||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "eslint": "^8.57.0 || ^9.0.0",
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/types": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -1876,16 +1869,15 @@
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/typescript-estree": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/project-service": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/tsconfig-utils": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/project-service": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/tsconfig-utils": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/visitor-keys": "8.43.0",
 | 
			
		||||
        "debug": "^4.3.4",
 | 
			
		||||
        "fast-glob": "^3.3.2",
 | 
			
		||||
        "is-glob": "^4.0.3",
 | 
			
		||||
| 
						 | 
				
			
			@ -1901,7 +1893,7 @@
 | 
			
		|||
        "url": "https://opencollective.com/typescript-eslint"
 | 
			
		||||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1909,7 +1901,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
 | 
			
		||||
      "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "balanced-match": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -1919,7 +1910,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "brace-expansion": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -1931,16 +1921,15 @@
 | 
			
		|||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/utils": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@eslint-community/eslint-utils": "^4.7.0",
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.35.1"
 | 
			
		||||
        "@typescript-eslint/scope-manager": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "@typescript-eslint/typescript-estree": "8.43.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -1951,17 +1940,16 @@
 | 
			
		|||
      },
 | 
			
		||||
      "peerDependencies": {
 | 
			
		||||
        "eslint": "^8.57.0 || ^9.0.0",
 | 
			
		||||
        "typescript": ">=4.8.4 <5.9.0"
 | 
			
		||||
        "typescript": ">=4.8.4 <6.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@typescript-eslint/visitor-keys": {
 | 
			
		||||
      "version": "8.35.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz",
 | 
			
		||||
      "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==",
 | 
			
		||||
      "version": "8.43.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz",
 | 
			
		||||
      "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@typescript-eslint/types": "8.35.1",
 | 
			
		||||
        "@typescript-eslint/types": "8.43.0",
 | 
			
		||||
        "eslint-visitor-keys": "^4.2.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
| 
						 | 
				
			
			@ -1977,7 +1965,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
 | 
			
		||||
      "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -3097,7 +3084,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
 | 
			
		||||
      "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@nodelib/fs.stat": "^2.0.2",
 | 
			
		||||
        "@nodelib/fs.walk": "^1.2.3",
 | 
			
		||||
| 
						 | 
				
			
			@ -3114,7 +3100,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "ISC",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-glob": "^4.0.1"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			@ -4492,7 +4477,6 @@
 | 
			
		|||
      "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
 | 
			
		||||
      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
| 
						 | 
				
			
			@ -5507,7 +5491,6 @@
 | 
			
		|||
      "version": "5.29.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
 | 
			
		||||
      "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@fastify/busboy": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,10 @@
 | 
			
		|||
import * as core from '@actions/core';
 | 
			
		||||
import * as tc from '@actions/tool-cache';
 | 
			
		||||
 | 
			
		||||
import fs from 'fs';
 | 
			
		||||
import path from 'path';
 | 
			
		||||
 | 
			
		||||
import {JavaBase} from '../base-installer';
 | 
			
		||||
import {HttpCodes} from '@actions/http-client';
 | 
			
		||||
import {GraalVMEAVersion} from './models';
 | 
			
		||||
import {
 | 
			
		||||
  JavaDownloadRelease,
 | 
			
		||||
  JavaInstallerOptions,
 | 
			
		||||
| 
						 | 
				
			
			@ -16,12 +16,14 @@ import {
 | 
			
		|||
  getGitHubHttpHeaders,
 | 
			
		||||
  renameWinArchive
 | 
			
		||||
} from '../../util';
 | 
			
		||||
import {HttpCodes} from '@actions/http-client';
 | 
			
		||||
import {GraalVMEAVersion} from './models';
 | 
			
		||||
 | 
			
		||||
const GRAALVM_DL_BASE = 'https://download.oracle.com/graalvm';
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
const GRAALVM_PLATFORM = IS_WINDOWS ? 'windows' : process.platform;
 | 
			
		||||
const GRAALVM_MIN_VERSION = 17;
 | 
			
		||||
const SUPPORTED_ARCHITECTURES = ['x64', 'aarch64'] as const;
 | 
			
		||||
type SupportedArchitecture = (typeof SUPPORTED_ARCHITECTURES)[number];
 | 
			
		||||
type OsVersions = 'linux' | 'macos' | 'windows';
 | 
			
		||||
 | 
			
		||||
export class GraalVMDistribution extends JavaBase {
 | 
			
		||||
  constructor(installerOptions: JavaInstallerOptions) {
 | 
			
		||||
| 
						 | 
				
			
			@ -31,38 +33,67 @@ export class GraalVMDistribution extends JavaBase {
 | 
			
		|||
  protected async downloadTool(
 | 
			
		||||
    javaRelease: JavaDownloadRelease
 | 
			
		||||
  ): Promise<JavaInstallerResults> {
 | 
			
		||||
    core.info(
 | 
			
		||||
      `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
 | 
			
		||||
    );
 | 
			
		||||
    let javaArchivePath = await tc.downloadTool(javaRelease.url);
 | 
			
		||||
    try {
 | 
			
		||||
      core.info(
 | 
			
		||||
        `Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
 | 
			
		||||
      );
 | 
			
		||||
      let javaArchivePath = await tc.downloadTool(javaRelease.url);
 | 
			
		||||
 | 
			
		||||
    core.info(`Extracting Java archive...`);
 | 
			
		||||
    const extension = getDownloadArchiveExtension();
 | 
			
		||||
    if (process.platform === 'win32') {
 | 
			
		||||
      javaArchivePath = renameWinArchive(javaArchivePath);
 | 
			
		||||
      core.info(`Extracting Java archive...`);
 | 
			
		||||
      const extension = getDownloadArchiveExtension();
 | 
			
		||||
      if (IS_WINDOWS) {
 | 
			
		||||
        javaArchivePath = renameWinArchive(javaArchivePath);
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const extractedJavaPath = await extractJdkFile(
 | 
			
		||||
        javaArchivePath,
 | 
			
		||||
        extension
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      // Add validation for extracted path
 | 
			
		||||
      if (!fs.existsSync(extractedJavaPath)) {
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          `Extraction failed: path ${extractedJavaPath} does not exist`
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const dirContents = fs.readdirSync(extractedJavaPath);
 | 
			
		||||
      if (dirContents.length === 0) {
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          'Extraction failed: no files found in extracted directory'
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      const archivePath = path.join(extractedJavaPath, dirContents[0]);
 | 
			
		||||
      const version = this.getToolcacheVersionName(javaRelease.version);
 | 
			
		||||
 | 
			
		||||
      const javaPath = await tc.cacheDir(
 | 
			
		||||
        archivePath,
 | 
			
		||||
        this.toolcacheFolderName,
 | 
			
		||||
        version,
 | 
			
		||||
        this.architecture
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      return {version: javaRelease.version, path: javaPath};
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      core.error(`Failed to download and extract GraalVM: ${error}`);
 | 
			
		||||
      throw error;
 | 
			
		||||
    }
 | 
			
		||||
    const extractedJavaPath = await extractJdkFile(javaArchivePath, extension);
 | 
			
		||||
 | 
			
		||||
    const archiveName = fs.readdirSync(extractedJavaPath)[0];
 | 
			
		||||
    const archivePath = path.join(extractedJavaPath, archiveName);
 | 
			
		||||
    const version = this.getToolcacheVersionName(javaRelease.version);
 | 
			
		||||
 | 
			
		||||
    const javaPath = await tc.cacheDir(
 | 
			
		||||
      archivePath,
 | 
			
		||||
      this.toolcacheFolderName,
 | 
			
		||||
      version,
 | 
			
		||||
      this.architecture
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return {version: javaRelease.version, path: javaPath};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  protected async findPackageForDownload(
 | 
			
		||||
    range: string
 | 
			
		||||
  ): Promise<JavaDownloadRelease> {
 | 
			
		||||
    // Add input validation
 | 
			
		||||
    if (!range || typeof range !== 'string') {
 | 
			
		||||
      throw new Error('Version range is required and must be a string');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const arch = this.distributionArchitecture();
 | 
			
		||||
    if (arch !== 'x64' && arch !== 'aarch64') {
 | 
			
		||||
      throw new Error(`Unsupported architecture: ${this.architecture}`);
 | 
			
		||||
    if (!SUPPORTED_ARCHITECTURES.includes(arch as SupportedArchitecture)) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Unsupported architecture: ${this.architecture}. Supported architectures are: ${SUPPORTED_ARCHITECTURES.join(', ')}`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!this.stable) {
 | 
			
		||||
| 
						 | 
				
			
			@ -75,52 +106,113 @@ export class GraalVMDistribution extends JavaBase {
 | 
			
		|||
 | 
			
		||||
    const platform = this.getPlatform();
 | 
			
		||||
    const extension = getDownloadArchiveExtension();
 | 
			
		||||
    let major;
 | 
			
		||||
    let fileUrl;
 | 
			
		||||
    if (range.includes('.')) {
 | 
			
		||||
      major = range.split('.')[0];
 | 
			
		||||
      fileUrl = `${GRAALVM_DL_BASE}/${major}/archive/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
    } else {
 | 
			
		||||
      major = range;
 | 
			
		||||
      fileUrl = `${GRAALVM_DL_BASE}/${range}/latest/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
    const major = range.includes('.') ? range.split('.')[0] : range;
 | 
			
		||||
    const majorVersion = parseInt(major);
 | 
			
		||||
 | 
			
		||||
    if (isNaN(majorVersion)) {
 | 
			
		||||
      throw new Error(`Invalid version format: ${range}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (parseInt(major) < 17) {
 | 
			
		||||
      throw new Error('GraalVM is only supported for JDK 17 and later');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const response = await this.http.head(fileUrl);
 | 
			
		||||
 | 
			
		||||
    if (response.message.statusCode === HttpCodes.NotFound) {
 | 
			
		||||
      throw new Error(`Could not find GraalVM for SemVer ${range}`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (response.message.statusCode !== HttpCodes.OK) {
 | 
			
		||||
    if (majorVersion < GRAALVM_MIN_VERSION) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Http request for GraalVM failed with status code: ${response.message.statusCode}`
 | 
			
		||||
        `GraalVM is only supported for JDK ${GRAALVM_MIN_VERSION} and later. Requested version: ${major}`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const fileUrl = this.constructFileUrl(
 | 
			
		||||
      range,
 | 
			
		||||
      major,
 | 
			
		||||
      platform,
 | 
			
		||||
      arch,
 | 
			
		||||
      extension
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    const response = await this.http.head(fileUrl);
 | 
			
		||||
    this.handleHttpResponse(response, range);
 | 
			
		||||
 | 
			
		||||
    return {url: fileUrl, version: range};
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private constructFileUrl(
 | 
			
		||||
    range: string,
 | 
			
		||||
    major: string,
 | 
			
		||||
    platform: string,
 | 
			
		||||
    arch: string,
 | 
			
		||||
    extension: string
 | 
			
		||||
  ): string {
 | 
			
		||||
    return range.includes('.')
 | 
			
		||||
      ? `${GRAALVM_DL_BASE}/${major}/archive/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`
 | 
			
		||||
      : `${GRAALVM_DL_BASE}/${range}/latest/graalvm-jdk-${range}_${platform}-${arch}_bin.${extension}`;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private handleHttpResponse(response: any, range: string): void {
 | 
			
		||||
    const statusCode = response.message.statusCode;
 | 
			
		||||
 | 
			
		||||
    if (statusCode === HttpCodes.NotFound) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Could not find GraalVM for SemVer ${range}. Please check if this version is available at ${GRAALVM_DL_BASE}`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (
 | 
			
		||||
      statusCode === HttpCodes.Unauthorized ||
 | 
			
		||||
      statusCode === HttpCodes.Forbidden
 | 
			
		||||
    ) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Access denied when downloading GraalVM. Status code: ${statusCode}. Please check your credentials or permissions.`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (statusCode !== HttpCodes.OK) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `HTTP request for GraalVM failed with status code: ${statusCode} (${response.message.statusMessage || 'Unknown error'})`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  private async findEABuildDownloadUrl(
 | 
			
		||||
    javaEaVersion: string
 | 
			
		||||
  ): Promise<JavaDownloadRelease> {
 | 
			
		||||
    core.debug(`Searching for EA build: ${javaEaVersion}`);
 | 
			
		||||
 | 
			
		||||
    const versions = await this.fetchEAJson(javaEaVersion);
 | 
			
		||||
    core.debug(`Found ${versions.length} EA versions`);
 | 
			
		||||
 | 
			
		||||
    const latestVersion = versions.find(v => v.latest);
 | 
			
		||||
    if (!latestVersion) {
 | 
			
		||||
      core.error(
 | 
			
		||||
        `Available versions: ${versions.map(v => v.version).join(', ')}`
 | 
			
		||||
      );
 | 
			
		||||
      throw new Error(`Unable to find latest version for '${javaEaVersion}'`);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    core.debug(`Latest version found: ${latestVersion.version}`);
 | 
			
		||||
 | 
			
		||||
    const arch = this.distributionArchitecture();
 | 
			
		||||
    const file = latestVersion.files.find(
 | 
			
		||||
      f => f.arch === arch && f.platform === GRAALVM_PLATFORM
 | 
			
		||||
    );
 | 
			
		||||
    if (!file || !file.filename.startsWith('graalvm-jdk-')) {
 | 
			
		||||
      throw new Error(`Unable to find file metadata for '${javaEaVersion}'`);
 | 
			
		||||
 | 
			
		||||
    if (!file) {
 | 
			
		||||
      core.error(
 | 
			
		||||
        `Available files for architecture ${arch}: ${JSON.stringify(latestVersion.files)}`
 | 
			
		||||
      );
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Unable to find file for architecture '${arch}' and platform '${GRAALVM_PLATFORM}'`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (!file.filename.startsWith('graalvm-jdk-')) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Invalid filename format: ${file.filename}. Expected to start with 'graalvm-jdk-'`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const downloadUrl = `${latestVersion.download_base_url}${file.filename}`;
 | 
			
		||||
    core.debug(`Download URL: ${downloadUrl}`);
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      url: `${latestVersion.download_base_url}${file.filename}`,
 | 
			
		||||
      url: downloadUrl,
 | 
			
		||||
      version: latestVersion.version
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -128,49 +220,59 @@ export class GraalVMDistribution extends JavaBase {
 | 
			
		|||
  private async fetchEAJson(
 | 
			
		||||
    javaEaVersion: string
 | 
			
		||||
  ): Promise<GraalVMEAVersion[]> {
 | 
			
		||||
    const owner = 'graalvm';
 | 
			
		||||
    const repository = 'oracle-graalvm-ea-builds';
 | 
			
		||||
    const branch = 'main';
 | 
			
		||||
    const filePath = `versions/${javaEaVersion}.json`;
 | 
			
		||||
 | 
			
		||||
    const url = `https://api.github.com/repos/${owner}/${repository}/contents/${filePath}?ref=${branch}`;
 | 
			
		||||
 | 
			
		||||
    const url = `https://api.github.com/repos/graalvm/oracle-graalvm-ea-builds/contents/versions/${javaEaVersion}.json?ref=main`;
 | 
			
		||||
    const headers = getGitHubHttpHeaders();
 | 
			
		||||
 | 
			
		||||
    core.debug(
 | 
			
		||||
      `Trying to fetch available version info for GraalVM EA builds from '${url}'`
 | 
			
		||||
    );
 | 
			
		||||
    let fetchedJson;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      fetchedJson = (await this.http.getJson<GraalVMEAVersion[]>(url, headers))
 | 
			
		||||
        .result;
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      throw Error(
 | 
			
		||||
        `Fetching version info for GraalVM EA builds from '${url}' failed with the error: ${
 | 
			
		||||
          (err as Error).message
 | 
			
		||||
        }`
 | 
			
		||||
      const response = await this.http.getJson<GraalVMEAVersion[]>(
 | 
			
		||||
        url,
 | 
			
		||||
        headers
 | 
			
		||||
      );
 | 
			
		||||
 | 
			
		||||
      if (!response.result) {
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          `No GraalVM EA build found for version '${javaEaVersion}'. Please check if the version is correct.`
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      return response.result;
 | 
			
		||||
    } catch (error) {
 | 
			
		||||
      if (error instanceof Error) {
 | 
			
		||||
        // Check if it's a 404 error (file not found)
 | 
			
		||||
        if (error.message?.includes('404')) {
 | 
			
		||||
          throw new Error(
 | 
			
		||||
            `GraalVM EA version '${javaEaVersion}' not found. Please verify the version exists in the EA builds repository.`
 | 
			
		||||
          );
 | 
			
		||||
        }
 | 
			
		||||
        // Re-throw with more context
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          `Failed to fetch GraalVM EA version information for '${javaEaVersion}': ${error.message}`
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
      // If it's not an Error instance, throw a generic error
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Failed to fetch GraalVM EA version information for '${javaEaVersion}'`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    if (fetchedJson === null) {
 | 
			
		||||
      throw Error(
 | 
			
		||||
        `No GraalVM EA build found. Are you sure java-version: '${javaEaVersion}' is correct?`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return fetchedJson;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  public getPlatform(platform: NodeJS.Platform = process.platform): OsVersions {
 | 
			
		||||
    switch (platform) {
 | 
			
		||||
      case 'darwin':
 | 
			
		||||
        return 'macos';
 | 
			
		||||
      case 'win32':
 | 
			
		||||
        return 'windows';
 | 
			
		||||
      case 'linux':
 | 
			
		||||
        return 'linux';
 | 
			
		||||
      default:
 | 
			
		||||
        throw new Error(
 | 
			
		||||
          `Platform '${platform}' is not supported. Supported platforms: 'linux', 'macos', 'windows'`
 | 
			
		||||
        );
 | 
			
		||||
    const platformMap: Record<string, OsVersions> = {
 | 
			
		||||
      darwin: 'macos',
 | 
			
		||||
      win32: 'windows',
 | 
			
		||||
      linux: 'linux'
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    const result = platformMap[platform];
 | 
			
		||||
    if (!result) {
 | 
			
		||||
      throw new Error(
 | 
			
		||||
        `Platform '${platform}' is not supported. Supported platforms: 'linux', 'macos', 'windows'`
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    return result;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -184,8 +184,8 @@ export function convertVersionToSemver(version: number[] | string) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
export function getGitHubHttpHeaders(): OutgoingHttpHeaders {
 | 
			
		||||
  const token = core.getInput('token');
 | 
			
		||||
  const auth = !token ? undefined : `token ${token}`;
 | 
			
		||||
  const resolvedToken = core.getInput('token') || process.env.GITHUB_TOKEN;
 | 
			
		||||
  const auth = !resolvedToken ? undefined : `token ${resolvedToken}`;
 | 
			
		||||
 | 
			
		||||
  const headers: OutgoingHttpHeaders = {
 | 
			
		||||
    accept: 'application/vnd.github.VERSION.raw'
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue