diff --git a/common.js b/common.js index 99a7b71e2..f66798e44 100644 --- a/common.js +++ b/common.js @@ -6,6 +6,7 @@ const stream = require('stream') const crypto = require('crypto') const core = require('@actions/core') const tc = require('@actions/tool-cache') +const exec = require('@actions/exec') const { performance } = require('perf_hooks') const linuxOSInfo = require('linux-os-info') @@ -403,3 +404,33 @@ export function setupPath(newPathEntries) { core.addPath(newPath.join(path.delimiter)) return msys2Type } + +export async function setupJavaHome() { + await measure("Modifying JAVA_HOME for JRuby", async () => { + console.log("attempting to run with existing JAVA_HOME") + + let ret = await exec.exec('ruby', ['--version']) + + if (ret === 0) { + console.log("JRuby successfully starts, using existing JAVA_HOME") + } else { + console.log("JRuby failed to start, try Java 21 envs") + + let arch = os.arch() + if (arch === "x64" || os.platform() !== "darwin") { + arch = "X64" + } + + let newHomeVar = `JAVA_HOME_21_${arch}` + let newHome = process.env[newHomeVar] + + if (newHome === "undefined") { + throw new Error(`JAVA_HOME is not Java 21+ needed for JRuby and \$${newHomeVar} is not defined`) + } + + console.log(`Setting JAVA_HOME to ${newHomeVar} path ${newHome}`) + + core.exportVariable("JAVA_HOME", newHome) + } + }) +} diff --git a/dist/index.js b/dist/index.js index 1762cf830..1c0de8e91 100644 --- a/dist/index.js +++ b/dist/index.js @@ -315,7 +315,8 @@ __nccwpck_require__.r(__webpack_exports__); /* harmony export */ "toolCacheCompleteFile": () => (/* binding */ toolCacheCompleteFile), /* harmony export */ "createToolCacheCompleteFile": () => (/* binding */ createToolCacheCompleteFile), /* harmony export */ "win2nix": () => (/* binding */ win2nix), -/* harmony export */ "setupPath": () => (/* binding */ setupPath) +/* harmony export */ "setupPath": () => (/* binding */ setupPath), +/* harmony export */ "setupJavaHome": () => (/* binding */ setupJavaHome) /* harmony export */ }); const os = __nccwpck_require__(2037) const path = __nccwpck_require__(1017) @@ -325,6 +326,7 @@ const stream = __nccwpck_require__(2781) const crypto = __nccwpck_require__(6113) const core = __nccwpck_require__(2186) const tc = __nccwpck_require__(7784) +const exec = __nccwpck_require__(1514) const { performance } = __nccwpck_require__(4074) const linuxOSInfo = __nccwpck_require__(8487) @@ -723,6 +725,36 @@ function setupPath(newPathEntries) { return msys2Type } +async function setupJavaHome() { + await measure("Modifying JAVA_HOME for JRuby", async () => { + console.log("attempting to run with existing JAVA_HOME") + + let ret = await exec.exec('ruby', ['--version']) + + if (ret === 0) { + console.log("JRuby successfully starts, using existing JAVA_HOME") + } else { + console.log("JRuby failed to start, try Java 21 envs") + + let arch = os.arch() + if (arch === "x64" || os.platform() !== "darwin") { + arch = "X64" + } + + let newHomeVar = `JAVA_HOME_21_${arch}` + let newHome = process.env[newHomeVar] + + if (newHome === "undefined") { + throw new Error(`JAVA_HOME is not Java 21+ needed for JRuby and \$${newHomeVar} is not defined`) + } + + console.log(`Setting JAVA_HOME to ${newHomeVar} path ${newHome}`) + + core.exportVariable("JAVA_HOME", newHome) + } + }) +} + /***/ }), @@ -74057,6 +74089,11 @@ async function install(platform, engine, version) { await downloadAndExtract(platform, engine, version, rubyPrefix) } + // Ensure JRuby has minimum Java version to run + if (engine === "jruby") { + await common.setupJavaHome() + } + return rubyPrefix } diff --git a/ruby-builder.js b/ruby-builder.js index 985ad2c86..6ec7e191d 100644 --- a/ruby-builder.js +++ b/ruby-builder.js @@ -54,6 +54,11 @@ export async function install(platform, engine, version) { await downloadAndExtract(platform, engine, version, rubyPrefix) } + // Ensure JRuby has minimum Java version to run + if (engine === "jruby") { + await common.setupJavaHome() + } + return rubyPrefix }