Compare commits

...
7 Commits
Author SHA1 Message Date
Benoit Daloze 922ebc4c52 Use $JAVA_HOME/bin/java for the check 2025-03-15 12:36:12 +01:00
Charles Oliver Nutter 6c79f721fa Test successful JRuby start without using launcher
Native launcher appears to hang on GHA when the JDK version is too
old for JRuby 10. This bypasses it and should be a bit lighter. It
will also avoid any variability in the launcher used, since Unixes
and Windows already use different executables.
2025-03-13 20:32:49 +01:00
Charles Oliver Nutter e17c5ea7eb Handle exec error
Apparently this exec errors when the subprocess fails rather than
returning an error code. This causes the whole setup process to
terminate. This patch catches the error and uses that to indicate
failure to launch.
2025-03-13 20:32:49 +01:00
Charles Oliver Nutter f0a4d6bddd Switch JAVA_HOME to 21 for JRuby (#721)
* JRuby 10 requires Java 21. Since the previous default was 17 and all JRuby releases should work fine on 21, we do this for all JRuby installs.
* Implements #718
2025-03-12 21:19:38 +01:00
Benoit Daloze bbda85882f Fix .tool-versions and mise.toml tests 2025-03-11 12:24:54 +01:00
Benoit Daloze 30755d8bf4 Cleanup matching for .tool-versions and mise and add tests for .ruby-version and .tool-versions 2025-03-11 12:16:17 +01:00
Karibash 28233a011b bugfix: Fix bug that version cannot be parsed in .tool-versions 2025-03-11 11:59:59 +01:00
5 changed files with 117 additions and 9 deletions
+27
View File
@@ -190,6 +190,33 @@ jobs:
if: startsWith(matrix.os, 'windows') && matrix.ruby == 'jruby'
run: gem install sassc
testDotRubyVersion:
name: "Test .ruby-version"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "ruby-3.4.0" > .ruby-version
- uses: ./
- run: ruby -v | grep -F "ruby 3.4.0"
testToolVersions:
name: "Test .tool-versions"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo -e "nodejs 16.0.0\nruby 3.4.0" > .tool-versions
- uses: ./
- run: ruby -v | grep -F "ruby 3.4.0"
testMise:
name: "Test mise.toml"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo -e "[tools]\nnode = '18'\nruby = '3.4.0'" > mise.toml
- uses: ./
- run: ruby -v | grep -F "ruby 3.4.0"
testNoGemfile:
name: "Test with no Gemfile"
runs-on: ubuntu-latest
+33
View File
@@ -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,35 @@ export function setupPath(newPathEntries) {
core.addPath(newPath.join(path.delimiter))
return msys2Type
}
export async function setupJavaHome(rubyPrefix) {
await measure("Modifying JAVA_HOME for JRuby", async () => {
console.log("attempting to run with existing JAVA_HOME")
const javaHome = process.env['JAVA_HOME']
let java = javaHome ? path.join(javaHome, 'bin/java') : 'java'
let ret = await exec.exec(java, ['-jar', path.join(rubyPrefix, 'lib/jruby.jar'), '--version'], {ignoreReturnCode: true})
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)
}
})
}
Generated Vendored
+46 -5
View File
@@ -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,38 @@ function setupPath(newPathEntries) {
return msys2Type
}
async function setupJavaHome(rubyPrefix) {
await measure("Modifying JAVA_HOME for JRuby", async () => {
console.log("attempting to run with existing JAVA_HOME")
const javaHome = process.env['JAVA_HOME']
let java = javaHome ? path.join(javaHome, 'bin/java') : 'java'
let ret = await exec.exec(java, ['-jar', path.join(rubyPrefix, 'lib/jruby.jar'), '--version'], {ignoreReturnCode: true})
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 +74091,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(rubyPrefix)
}
return rubyPrefix
}
@@ -74932,13 +74971,15 @@ function parseRubyEngineAndVersion(rubyVersion) {
console.log(`Using ${rubyVersion} as input from file .ruby-version`)
} else if (rubyVersion === '.tool-versions') { // Read from .tool-versions
const toolVersions = fs.readFileSync('.tool-versions', 'utf8').trim()
const rubyLine = toolVersions.split(/\r?\n/).filter(e => /^ruby\s/.test(e))[0]
rubyVersion = rubyLine.split(/\s/)[1]
const regexp = /^ruby\s+(\S+)/
const rubyLine = toolVersions.split(/\r?\n/).filter(e => regexp.test(e))[0]
rubyVersion = rubyLine.match(regexp)[1]
console.log(`Using ${rubyVersion} as input from file .tool-versions`)
} else if (rubyVersion === 'mise.toml') { // Read from mise.toml
const toolVersions = fs.readFileSync('mise.toml', 'utf8').trim()
const rubyLine = toolVersions.split(/\r?\n/).filter(e => /^ruby\s*=\s*/.test(e))[0]
rubyVersion = rubyLine.match(/^ruby\s*=\s*['"](.+)['"]$/)[1]
const regexp = /^ruby\s*=\s*['"](.+)['"]$/
const rubyLine = toolVersions.split(/\r?\n/).filter(e => regexp.test(e))[0]
rubyVersion = rubyLine.match(regexp)[1]
console.log(`Using ${rubyVersion} as input from file mise.toml`)
}
+6 -4
View File
@@ -129,13 +129,15 @@ function parseRubyEngineAndVersion(rubyVersion) {
console.log(`Using ${rubyVersion} as input from file .ruby-version`)
} else if (rubyVersion === '.tool-versions') { // Read from .tool-versions
const toolVersions = fs.readFileSync('.tool-versions', 'utf8').trim()
const rubyLine = toolVersions.split(/\r?\n/).filter(e => /^ruby\s/.test(e))[0]
rubyVersion = rubyLine.split(/\s/)[1]
const regexp = /^ruby\s+(\S+)/
const rubyLine = toolVersions.split(/\r?\n/).filter(e => regexp.test(e))[0]
rubyVersion = rubyLine.match(regexp)[1]
console.log(`Using ${rubyVersion} as input from file .tool-versions`)
} else if (rubyVersion === 'mise.toml') { // Read from mise.toml
const toolVersions = fs.readFileSync('mise.toml', 'utf8').trim()
const rubyLine = toolVersions.split(/\r?\n/).filter(e => /^ruby\s*=\s*/.test(e))[0]
rubyVersion = rubyLine.match(/^ruby\s*=\s*['"](.+)['"]$/)[1]
const regexp = /^ruby\s*=\s*['"](.+)['"]$/
const rubyLine = toolVersions.split(/\r?\n/).filter(e => regexp.test(e))[0]
rubyVersion = rubyLine.match(regexp)[1]
console.log(`Using ${rubyVersion} as input from file mise.toml`)
}
+5
View File
@@ -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(rubyPrefix)
}
return rubyPrefix
}