mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 22:44:20 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e5a267414f | ||
|
|
cadade3366 | ||
|
|
d3562e70d9 |
@@ -14,9 +14,9 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby:
|
||||
|
||||
| Interpreter | Versions |
|
||||
| ----------- | -------- |
|
||||
| Ruby | 2.1.9, 2.2, 2.3.0 - 2.3.8, 2.4.0 - 2.4.10, 2.5.0 - 2.5.8, 2.6.0 - 2.6.6, 2.7.2, head, debug, mingw, mswin |
|
||||
| JRuby | 9.1.17.0, 9.2.9.0 - 9.2.13.0, head |
|
||||
| TruffleRuby | 19.3.0 - 20.3.0, head |
|
||||
| `ruby` | 2.1.9, 2.2, 2.3.0 - 2.3.8, 2.4.0 - 2.4.10, 2.5.0 - 2.5.8, 2.6.0 - 2.6.6, 2.7.2, head, debug, mingw, mswin |
|
||||
| `jruby` | 9.1.17.0, 9.2.9.0 - 9.2.13.0, head |
|
||||
| `truffleruby` | 19.3.0 - 20.3.0, head |
|
||||
|
||||
`ruby-debug` is the same as `ruby-head` but with assertions enabled (`-DRUBY_DEBUG=1`).
|
||||
On Windows, `mingw` and `mswin` are `ruby-head` builds using the MSYS2/MinGW and the MSVC toolchains respectively.
|
||||
|
||||
+12
-9
@@ -27744,7 +27744,7 @@ async function downloadAndExtract(engine, version, url, base, rubyPrefix) {
|
||||
})
|
||||
|
||||
await common.measure('Extracting Ruby', async () =>
|
||||
exec.exec('7z', ['x', downloadPath, `-xr!${base}\\share\\doc`, `-o${parentDir}`], {silent: true}))
|
||||
exec.exec('7z', ['x', downloadPath, `-xr!${base}\\share\\doc`, `-o${parentDir}`], { silent: true }))
|
||||
|
||||
if (base !== path.basename(rubyPrefix)) {
|
||||
await io.mv(path.join(parentDir, base), rubyPrefix)
|
||||
@@ -51257,12 +51257,12 @@ async function setupRuby(options = {}) {
|
||||
if (inputs['bundler'] !== 'none') {
|
||||
const [gemfile, lockFile] = detectGemfiles()
|
||||
|
||||
await common.measure('Installing Bundler', async () =>
|
||||
const bundlerVersion = await common.measure('Installing Bundler', async () =>
|
||||
installBundler(inputs['bundler'], lockFile, platform, rubyPrefix, engine, version))
|
||||
|
||||
if (inputs['bundler-cache'] === 'true') {
|
||||
await common.measure('bundle install', async () =>
|
||||
bundleInstall(gemfile, lockFile, platform, engine, version))
|
||||
bundleInstall(gemfile, lockFile, platform, engine, version, bundlerVersion))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51425,31 +51425,34 @@ async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefi
|
||||
await exec.exec(gem, ['install', 'bundler', '-v', `~> ${bundlerVersion}`, '--no-document'])
|
||||
}
|
||||
|
||||
core.exportVariable('BUNDLER_VERSION', bundlerVersion)
|
||||
return bundlerVersion
|
||||
}
|
||||
|
||||
async function bundleInstall(gemfile, lockFile, platform, engine, version) {
|
||||
async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, bundlerVersion) {
|
||||
if (gemfile === null) {
|
||||
console.log('Could not determine gemfile path, skipping "bundle install" and caching')
|
||||
return false
|
||||
}
|
||||
|
||||
// Before the lockfile exists, we need to specify which Bundler version to use explicitly
|
||||
const optionsWithBundlerVersion = { env: { ...process.env, BUNDLER_VERSION: bundlerVersion } }
|
||||
|
||||
// config
|
||||
const path = 'vendor/bundle'
|
||||
|
||||
await exec.exec('bundle', ['config', '--local', 'path', path])
|
||||
await exec.exec('bundle', ['config', '--local', 'path', path], optionsWithBundlerVersion)
|
||||
|
||||
if (fs.existsSync(lockFile)) {
|
||||
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'])
|
||||
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], optionsWithBundlerVersion)
|
||||
} else {
|
||||
// Generate the lockfile so we can use it to compute the cache key.
|
||||
// This will also automatically pick up the latest gem versions compatible with the Gemfile.
|
||||
await exec.exec('bundle', ['lock'])
|
||||
await exec.exec('bundle', ['lock'], optionsWithBundlerVersion)
|
||||
}
|
||||
|
||||
// cache key
|
||||
const paths = [path]
|
||||
const baseKey = await computeBaseKey(platform, engine, version, lockFile)
|
||||
const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile)
|
||||
const key = `${baseKey}-${await common.hashFile(lockFile)}`
|
||||
// If only Gemfile.lock changes we can reuse part of the cache, and clean old gem versions below
|
||||
const restoreKeys = [`${baseKey}-`]
|
||||
|
||||
@@ -63,12 +63,12 @@ export async function setupRuby(options = {}) {
|
||||
if (inputs['bundler'] !== 'none') {
|
||||
const [gemfile, lockFile] = detectGemfiles()
|
||||
|
||||
await common.measure('Installing Bundler', async () =>
|
||||
const bundlerVersion = await common.measure('Installing Bundler', async () =>
|
||||
installBundler(inputs['bundler'], lockFile, platform, rubyPrefix, engine, version))
|
||||
|
||||
if (inputs['bundler-cache'] === 'true') {
|
||||
await common.measure('bundle install', async () =>
|
||||
bundleInstall(gemfile, lockFile, platform, engine, version))
|
||||
bundleInstall(gemfile, lockFile, platform, engine, version, bundlerVersion))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,31 +231,34 @@ async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefi
|
||||
await exec.exec(gem, ['install', 'bundler', '-v', `~> ${bundlerVersion}`, '--no-document'])
|
||||
}
|
||||
|
||||
core.exportVariable('BUNDLER_VERSION', bundlerVersion)
|
||||
return bundlerVersion
|
||||
}
|
||||
|
||||
async function bundleInstall(gemfile, lockFile, platform, engine, version) {
|
||||
async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, bundlerVersion) {
|
||||
if (gemfile === null) {
|
||||
console.log('Could not determine gemfile path, skipping "bundle install" and caching')
|
||||
return false
|
||||
}
|
||||
|
||||
// Before the lockfile exists, we need to specify which Bundler version to use explicitly
|
||||
const optionsWithBundlerVersion = { env: { ...process.env, BUNDLER_VERSION: bundlerVersion } }
|
||||
|
||||
// config
|
||||
const path = 'vendor/bundle'
|
||||
|
||||
await exec.exec('bundle', ['config', '--local', 'path', path])
|
||||
await exec.exec('bundle', ['config', '--local', 'path', path], optionsWithBundlerVersion)
|
||||
|
||||
if (fs.existsSync(lockFile)) {
|
||||
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'])
|
||||
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], optionsWithBundlerVersion)
|
||||
} else {
|
||||
// Generate the lockfile so we can use it to compute the cache key.
|
||||
// This will also automatically pick up the latest gem versions compatible with the Gemfile.
|
||||
await exec.exec('bundle', ['lock'])
|
||||
await exec.exec('bundle', ['lock'], optionsWithBundlerVersion)
|
||||
}
|
||||
|
||||
// cache key
|
||||
const paths = [path]
|
||||
const baseKey = await computeBaseKey(platform, engine, version, lockFile)
|
||||
const baseKey = await computeBaseKey(platform, engine, rubyVersion, lockFile)
|
||||
const key = `${baseKey}-${await common.hashFile(lockFile)}`
|
||||
// If only Gemfile.lock changes we can reuse part of the cache, and clean old gem versions below
|
||||
const restoreKeys = [`${baseKey}-`]
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ async function downloadAndExtract(engine, version, url, base, rubyPrefix) {
|
||||
})
|
||||
|
||||
await common.measure('Extracting Ruby', async () =>
|
||||
exec.exec('7z', ['x', downloadPath, `-xr!${base}\\share\\doc`, `-o${parentDir}`], {silent: true}))
|
||||
exec.exec('7z', ['x', downloadPath, `-xr!${base}\\share\\doc`, `-o${parentDir}`], { silent: true }))
|
||||
|
||||
if (base !== path.basename(rubyPrefix)) {
|
||||
await io.mv(path.join(parentDir, base), rubyPrefix)
|
||||
|
||||
Reference in New Issue
Block a user