mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-14 06:54:20 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
69fe46858b | ||
|
|
dcbc29fae9 | ||
|
|
3f53c4ecc2 | ||
|
|
9b993bc63c | ||
|
|
d6a695ac2a |
@@ -113,7 +113,7 @@ jobs:
|
||||
run: gem install sassc
|
||||
|
||||
testLatestRubygemsVersion:
|
||||
name: "Test rubygems input set to latest upgrades the default RubyGems version"
|
||||
name: "Test rubygems: latest upgrades the default RubyGems version"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -124,7 +124,7 @@ jobs:
|
||||
- run: ruby -e "exit(Gem.rubygems_version > Gem::Version.new('3.0.3'))"
|
||||
|
||||
testFixedRubygemsVersionUpgrades:
|
||||
name: "Test rubygems input set to a fixed version upgrades RubyGems to that version if the default is older"
|
||||
name: "Test rubygems: version upgrades RubyGems to that version if the default is older"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -135,7 +135,7 @@ jobs:
|
||||
- run: gem --version | grep -F "3.2.3"
|
||||
|
||||
testFixedRubygemsVersionNoop:
|
||||
name: "Test rubygems input set to a fixed version noops if the default is newer"
|
||||
name: "Test rubygems: version noops if the default is newer"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
@@ -145,6 +145,29 @@ jobs:
|
||||
rubygems: 3.2.3
|
||||
- run: gem --version | grep -F "3.3.3"
|
||||
|
||||
testUseBundlerFromRubyGemsUpdate:
|
||||
name: "Test rubygems: version uses the Bundler installed by the rubygems update"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./
|
||||
with:
|
||||
ruby-version: 2.2
|
||||
rubygems: 2.7.11
|
||||
- run: gem --version | grep -F "2.7.11"
|
||||
- run: bundle --version | grep -F "1.16.6"
|
||||
|
||||
testFixedBundlerVersionForOldRuby:
|
||||
name: "Test bundler: 1.x for old Ruby"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: ./
|
||||
with:
|
||||
ruby-version: 2.2
|
||||
bundler: 1.16.6
|
||||
- run: bundle --version | grep -F "1.16.6" # And not 1.17.x from ~> 1
|
||||
|
||||
testMajorBundlerVersion:
|
||||
name: "Test with a major Bundler version"
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
+2
-11
@@ -7,36 +7,27 @@ branding:
|
||||
inputs:
|
||||
ruby-version:
|
||||
description: 'Engine and version to use, see the syntax in the README. Reads from .ruby-version or .tool-versions if unset.'
|
||||
required: false
|
||||
default: 'default'
|
||||
rubygems:
|
||||
description: |
|
||||
The version of RubyGems to use. Either 'default', 'latest', or a version number (e.g., 3.3.5).
|
||||
The version of RubyGems to use. Either 'default' (the default), 'latest', or a version number (e.g., 3.3.5).
|
||||
For 'default', no action is taken and the version of RubyGems that comes with Ruby by default is used.
|
||||
For 'latest', `gem update --system` is run to update to the latest RubyGems version.
|
||||
Similarly, if a version number is given, `gem update --system <version>` is run to update to that version of RubyGems, as long as that version is newer than the one provided by default.
|
||||
Defaults to 'default'.
|
||||
bundler:
|
||||
description: |
|
||||
The version of Bundler to install. Either 'none', 'latest', 'Gemfile.lock', or a version number (e.g., 1, 2, 2.1, 2.1.4).
|
||||
For 'Gemfile.lock', the version is determined based on the BUNDLED WITH section from the file Gemfile.lock, $BUNDLE_GEMFILE.lock or gems.locked.
|
||||
Defaults to 'Gemfile.lock' if the file exists and 'latest' otherwise.
|
||||
required: false
|
||||
default: 'default'
|
||||
Defaults to 'default', which means 'Gemfile.lock' if the file exists and 'latest' otherwise.
|
||||
bundler-cache:
|
||||
description: 'Run "bundle install", and cache the result automatically. Either true or false.'
|
||||
required: false
|
||||
default: 'false'
|
||||
working-directory:
|
||||
description: 'The working directory to use for resolving paths for .ruby-version, .tool-versions and Gemfile.lock.'
|
||||
required: false
|
||||
default: '.'
|
||||
cache-version:
|
||||
description: |
|
||||
Arbitrary string that will be added to the cache key of the bundler cache. Set or change it if you need
|
||||
to invalidate the cache.
|
||||
required: false
|
||||
default: '0'
|
||||
outputs:
|
||||
ruby-prefix:
|
||||
description: 'The prefix of the installed ruby'
|
||||
|
||||
+18
-10
@@ -50,9 +50,14 @@ async function afterLockFile(lockFile, platform, engine, rubyVersion) {
|
||||
}
|
||||
}
|
||||
|
||||
export async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefix, engine, rubyVersion) {
|
||||
export async function installBundler(bundlerVersionInput, rubygemsInputSet, lockFile, platform, rubyPrefix, engine, rubyVersion) {
|
||||
let bundlerVersion = bundlerVersionInput
|
||||
|
||||
if (rubygemsInputSet && bundlerVersion === 'default') {
|
||||
console.log('Using the Bundler installed by updating RubyGems')
|
||||
return 'unknown'
|
||||
}
|
||||
|
||||
if (bundlerVersion === 'default' || bundlerVersion === 'Gemfile.lock') {
|
||||
bundlerVersion = readBundledWithFromGemfileLock(lockFile)
|
||||
|
||||
@@ -73,15 +78,18 @@ export async function installBundler(bundlerVersionInput, lockFile, platform, ru
|
||||
|
||||
const floatVersion = common.floatVersion(rubyVersion)
|
||||
|
||||
if (engine === 'ruby' && floatVersion <= 2.2) {
|
||||
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) {
|
||||
console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same
|
||||
console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1')
|
||||
bundlerVersion = '1'
|
||||
// Use Bundler 1 when we know Bundler 2 does not work
|
||||
if (bundlerVersion.startsWith('2')) {
|
||||
if (engine === 'ruby' && floatVersion <= 2.2) {
|
||||
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) {
|
||||
console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same
|
||||
console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1')
|
||||
bundlerVersion = '1'
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround for truffleruby 22.0 + latest Bundler, use shipped Bundler instead: https://github.com/oracle/truffleruby/issues/2586
|
||||
|
||||
+23
-14
@@ -64,9 +64,14 @@ async function afterLockFile(lockFile, platform, engine, rubyVersion) {
|
||||
}
|
||||
}
|
||||
|
||||
async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefix, engine, rubyVersion) {
|
||||
async function installBundler(bundlerVersionInput, rubygemsInputSet, lockFile, platform, rubyPrefix, engine, rubyVersion) {
|
||||
let bundlerVersion = bundlerVersionInput
|
||||
|
||||
if (rubygemsInputSet && bundlerVersion === 'default') {
|
||||
console.log('Using the Bundler installed by updating RubyGems')
|
||||
return 'unknown'
|
||||
}
|
||||
|
||||
if (bundlerVersion === 'default' || bundlerVersion === 'Gemfile.lock') {
|
||||
bundlerVersion = readBundledWithFromGemfileLock(lockFile)
|
||||
|
||||
@@ -87,15 +92,18 @@ async function installBundler(bundlerVersionInput, lockFile, platform, rubyPrefi
|
||||
|
||||
const floatVersion = common.floatVersion(rubyVersion)
|
||||
|
||||
if (engine === 'ruby' && floatVersion <= 2.2) {
|
||||
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) {
|
||||
console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same
|
||||
console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1')
|
||||
bundlerVersion = '1'
|
||||
// Use Bundler 1 when we know Bundler 2 does not work
|
||||
if (bundlerVersion.startsWith('2')) {
|
||||
if (engine === 'ruby' && floatVersion <= 2.2) {
|
||||
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) {
|
||||
console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1')
|
||||
bundlerVersion = '1'
|
||||
} else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same
|
||||
console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1')
|
||||
bundlerVersion = '1'
|
||||
}
|
||||
}
|
||||
|
||||
// Workaround for truffleruby 22.0 + latest Bundler, use shipped Bundler instead: https://github.com/oracle/truffleruby/issues/2586
|
||||
@@ -60829,7 +60837,7 @@ const inputDefaults = {
|
||||
'ruby-version': 'default',
|
||||
'rubygems': 'default',
|
||||
'bundler': 'default',
|
||||
'bundler-cache': 'true',
|
||||
'bundler-cache': 'false',
|
||||
'working-directory': '.',
|
||||
'cache-version': bundler.DEFAULT_CACHE_VERSION,
|
||||
}
|
||||
@@ -60882,7 +60890,8 @@ async function setupRuby(options = {}) {
|
||||
await common.measure('Print Ruby version', async () =>
|
||||
await exec.exec('ruby', ['--version']))
|
||||
|
||||
if (inputs['rubygems'] !== 'default') {
|
||||
const rubygemsInputSet = inputs['rubygems'] !== 'default'
|
||||
if (rubygemsInputSet) {
|
||||
await common.measure('Updating RubyGems', async () =>
|
||||
rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix))
|
||||
}
|
||||
@@ -60895,11 +60904,11 @@ async function setupRuby(options = {}) {
|
||||
}
|
||||
|
||||
const [gemfile, lockFile] = bundler.detectGemfiles()
|
||||
let bundlerVersion = "unknown"
|
||||
let bundlerVersion = 'unknown'
|
||||
|
||||
if (inputs['bundler'] !== 'none') {
|
||||
bundlerVersion = await common.measure('Installing Bundler', async () =>
|
||||
bundler.installBundler(inputs['bundler'], lockFile, platform, rubyPrefix, engine, version))
|
||||
bundler.installBundler(inputs['bundler'], rubygemsInputSet, lockFile, platform, rubyPrefix, engine, version))
|
||||
}
|
||||
|
||||
if (inputs['bundler-cache'] === 'true') {
|
||||
|
||||
@@ -13,7 +13,7 @@ const inputDefaults = {
|
||||
'ruby-version': 'default',
|
||||
'rubygems': 'default',
|
||||
'bundler': 'default',
|
||||
'bundler-cache': 'true',
|
||||
'bundler-cache': 'false',
|
||||
'working-directory': '.',
|
||||
'cache-version': bundler.DEFAULT_CACHE_VERSION,
|
||||
}
|
||||
@@ -66,7 +66,8 @@ export async function setupRuby(options = {}) {
|
||||
await common.measure('Print Ruby version', async () =>
|
||||
await exec.exec('ruby', ['--version']))
|
||||
|
||||
if (inputs['rubygems'] !== 'default') {
|
||||
const rubygemsInputSet = inputs['rubygems'] !== 'default'
|
||||
if (rubygemsInputSet) {
|
||||
await common.measure('Updating RubyGems', async () =>
|
||||
rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix))
|
||||
}
|
||||
@@ -79,11 +80,11 @@ export async function setupRuby(options = {}) {
|
||||
}
|
||||
|
||||
const [gemfile, lockFile] = bundler.detectGemfiles()
|
||||
let bundlerVersion = "unknown"
|
||||
let bundlerVersion = 'unknown'
|
||||
|
||||
if (inputs['bundler'] !== 'none') {
|
||||
bundlerVersion = await common.measure('Installing Bundler', async () =>
|
||||
bundler.installBundler(inputs['bundler'], lockFile, platform, rubyPrefix, engine, version))
|
||||
bundler.installBundler(inputs['bundler'], rubygemsInputSet, lockFile, platform, rubyPrefix, engine, version))
|
||||
}
|
||||
|
||||
if (inputs['bundler-cache'] === 'true') {
|
||||
|
||||
Reference in New Issue
Block a user