Compare commits

..
14 Commits
9 changed files with 112 additions and 25 deletions
+14 -3
View File
@@ -169,15 +169,26 @@ jobs:
- run: ruby -v - run: ruby -v
testLatestRubygemsVersion: testLatestRubygemsVersion:
name: "Test rubygems: latest upgrades the default RubyGems version" name: "Test rubygems: latest on ${{ matrix.ruby }}"
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- { ruby: '3.2', expected_rubygems_version: '3.5.3' }
- { ruby: '3.0', expected_rubygems_version: '3.5.3' }
- { ruby: '2.7', expected_rubygems_version: '3.4.22' }
- { ruby: '2.6', expected_rubygems_version: '3.4.22' }
- { ruby: '2.5', expected_rubygems_version: '3.3.27' }
- { ruby: '2.3', expected_rubygems_version: '3.3.27' }
- { ruby: '2.0', expected_rubygems_version: '2.7.11' }
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: ${{ matrix.ruby }}
rubygems: latest rubygems: latest
- run: ruby -e "exit(Gem.rubygems_version > Gem::Version.new('3.0.3'))" - run: ruby -e 'puts Gem::VERSION; exit(Gem.rubygems_version >= Gem::Version.new("${{ matrix.expected_rubygems_version }}"))'
testFixedRubygemsVersionUpgrades: testFixedRubygemsVersionUpgrades:
name: "Test rubygems: 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"
+7 -7
View File
@@ -15,10 +15,10 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby:
| Interpreter | Versions | | Interpreter | Versions |
| ----------- | -------- | | ----------- | -------- |
| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.3.0-preview2, head, debug, mingw, mswin, ucrt | | `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.3.0, head, debug, mingw, mswin, ucrt |
| `jruby` | 9.1.17.0 - 9.4.4.0, head | | `jruby` | 9.1.17.0 - 9.4.5.0, head |
| `truffleruby` | 19.3.0 - 23.1.1, head | | `truffleruby` | 19.3.0 - 23.1.2, head |
| `truffleruby+graalvm` | 21.2.0 - 23.1.1, head | | `truffleruby+graalvm` | 21.2.0 - 23.1.2, head |
`ruby-debug` is the same as `ruby-head` but with assertions enabled (`-DRUBY_DEBUG=1`). `ruby-debug` is the same as `ruby-head` but with assertions enabled (`-DRUBY_DEBUG=1`).
@@ -70,7 +70,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: '3.2' # Not needed with a .ruby-version file ruby-version: '3.3' # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- run: bundle exec rake - run: bundle exec rake
``` ```
@@ -89,7 +89,7 @@ jobs:
matrix: matrix:
os: [ubuntu-latest, macos-latest] os: [ubuntu-latest, macos-latest]
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0' # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
ruby: ['2.7', '3.0', '3.1', '3.2', head, jruby, jruby-head, truffleruby, truffleruby-head] ruby: ['2.7', '3.0', '3.1', '3.2', '3.3', head, jruby, jruby-head, truffleruby, truffleruby-head]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
@@ -118,7 +118,7 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1
with: with:
ruby-version: '3.2' ruby-version: '3.3'
bundler-cache: true # runs 'bundle install' and caches installed gems automatically bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- run: bundle exec rake - run: bundle exec rake
``` ```
+2 -1
View File
@@ -12,7 +12,8 @@ inputs:
description: | description: |
The version of RubyGems to use. Either 'default' (the 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 '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. For 'latest', `gem update --system` is run to update to the latest compatible RubyGems version.
Ruby head/master builds will not be updated.
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. 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.
bundler: bundler:
description: | description: |
Generated Vendored
+42 -5
View File
File diff suppressed because one or more lines are too long
+4 -1
View File
@@ -30,6 +30,9 @@ export async function run() {
core.setFailed(error.stack) core.setFailed(error.stack)
} }
} }
// Explicit process.exit() to not wait hanging promises,
// see https://github.com/ruby/setup-ruby/issues/543
process.exit()
} }
// entry point when this action is run from other actions // entry point when this action is run from other actions
@@ -75,7 +78,7 @@ export async function setupRuby(options = {}) {
const rubygemsInputSet = inputs['rubygems'] !== 'default' const rubygemsInputSet = inputs['rubygems'] !== 'default'
if (rubygemsInputSet) { if (rubygemsInputSet) {
await common.measure('Updating RubyGems', async () => await common.measure('Updating RubyGems', async () =>
rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix)) rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix, platform, engine, version))
} }
// When setup-ruby is used by other actions, this allows code in them to run // When setup-ruby is used by other actions, this allows code in them to run
+6 -6
View File
@@ -11,15 +11,15 @@
"2.7.0", "2.7.1", "2.7.2", "2.7.3", "2.7.4", "2.7.5", "2.7.6", "2.7.7", "2.7.8", "2.7.0", "2.7.1", "2.7.2", "2.7.3", "2.7.4", "2.7.5", "2.7.6", "2.7.7", "2.7.8",
"3.0.0-preview1", "3.0.0-preview2", "3.0.0-rc1", "3.0.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6", "3.0.0-preview1", "3.0.0-preview2", "3.0.0-rc1", "3.0.0", "3.0.1", "3.0.2", "3.0.3", "3.0.4", "3.0.5", "3.0.6",
"3.1.0-preview1", "3.1.0", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.0-preview1", "3.1.0", "3.1.1", "3.1.2", "3.1.3", "3.1.4",
"3.2.0-preview1", "3.2.0-preview2", "3.2.0-preview3", "3.2.0-rc1", "3.2.0", "3.2.1", "3.2.2", "3.2.0-preview1", "3.2.0-preview2", "3.2.0-preview3", "3.2.0-rc1", "3.2.0", "3.2.1", "3.2.2", "3.2.3",
"3.3.0-preview1", "3.3.0-preview2", "3.3.0-preview1", "3.3.0-preview2", "3.3.0-preview3", "3.3.0-rc1", "3.3.0",
"head", "debug" "head", "debug"
], ],
"jruby": [ "jruby": [
"9.1.17.0", "9.1.17.0",
"9.2.9.0", "9.2.10.0", "9.2.11.0", "9.2.11.1", "9.2.12.0", "9.2.13.0", "9.2.14.0", "9.2.15.0", "9.2.16.0", "9.2.17.0", "9.2.18.0", "9.2.19.0", "9.2.20.0", "9.2.20.1", "9.2.21.0", "9.2.9.0", "9.2.10.0", "9.2.11.0", "9.2.11.1", "9.2.12.0", "9.2.13.0", "9.2.14.0", "9.2.15.0", "9.2.16.0", "9.2.17.0", "9.2.18.0", "9.2.19.0", "9.2.20.0", "9.2.20.1", "9.2.21.0",
"9.3.0.0", "9.3.1.0", "9.3.2.0", "9.3.3.0", "9.3.4.0", "9.3.6.0", "9.3.7.0", "9.3.8.0", "9.3.9.0", "9.3.10.0", "9.3.11.0", "9.3.0.0", "9.3.1.0", "9.3.2.0", "9.3.3.0", "9.3.4.0", "9.3.6.0", "9.3.7.0", "9.3.8.0", "9.3.9.0", "9.3.10.0", "9.3.11.0", "9.3.13.0",
"9.4.0.0", "9.4.1.0", "9.4.2.0", "9.4.3.0", "9.4.4.0", "9.4.0.0", "9.4.1.0", "9.4.2.0", "9.4.3.0", "9.4.4.0", "9.4.5.0",
"head" "head"
], ],
"truffleruby": [ "truffleruby": [
@@ -27,13 +27,13 @@
"20.0.0", "20.1.0", "20.2.0", "20.3.0", "20.0.0", "20.1.0", "20.2.0", "20.3.0",
"21.0.0", "21.1.0", "21.2.0", "21.2.0.1", "21.3.0", "21.0.0", "21.1.0", "21.2.0", "21.2.0.1", "21.3.0",
"22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1", "22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1",
"23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.1.2",
"head" "head"
], ],
"truffleruby+graalvm": [ "truffleruby+graalvm": [
"21.2.0", "21.3.0", "21.2.0", "21.3.0",
"22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1", "22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1",
"23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.1.2",
"head" "head"
] ]
} }
+6
View File
@@ -58,6 +58,12 @@ export async function install(platform, engine, version) {
} }
} }
// https://github.com/oracle/truffleruby/issues/3390
if (engine.startsWith('truffleruby') && common.floatVersion(version) >= 24.0 && !common.isSelfHostedRunner() && common.getOSNameVersionArch() === 'macos-12-x64') {
console.log('Setting MACOSX_DEPLOYMENT_TARGET=11.0 to workaround bug in XCode 14.2 linker not respecting RTLD_LAZY, see https://github.com/oracle/truffleruby/issues/3390')
core.exportVariable('MACOSX_DEPLOYMENT_TARGET', '11.0')
}
return rubyPrefix return rubyPrefix
} }
+30 -2
View File
@@ -1,8 +1,9 @@
const common = require('./common')
const path = require('path') const path = require('path')
const exec = require('@actions/exec') const exec = require('@actions/exec')
const semver = require('semver') const semver = require('semver')
export async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix) { export async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix, platform, engine, rubyVersion) {
const gem = path.join(rubyPrefix, 'bin', 'gem') const gem = path.join(rubyPrefix, 'bin', 'gem')
let gemVersion = '' let gemVersion = ''
@@ -18,7 +19,7 @@ export async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix) {
if (rubygemsVersionInput === 'latest') { if (rubygemsVersionInput === 'latest') {
console.log('Updating RubyGems to latest version') console.log('Updating RubyGems to latest version')
await exec.exec(gem, ['update', '--system']) await rubygemsLatest(gem, platform, engine, rubyVersion)
} else if (semver.gt(rubygemsVersionInput, gemVersion)) { } else if (semver.gt(rubygemsVersionInput, gemVersion)) {
console.log(`Updating RubyGems to ${rubygemsVersionInput}`) console.log(`Updating RubyGems to ${rubygemsVersionInput}`)
await exec.exec(gem, ['update', '--system', rubygemsVersionInput]) await exec.exec(gem, ['update', '--system', rubygemsVersionInput])
@@ -28,3 +29,30 @@ export async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix) {
return true return true
} }
// Older RubyGems versions do not account for 'required_ruby_version' when
// running 'gem update --system', so we have to force a compatible version of
// rubygems-update. See https://github.com/ruby/setup-ruby/pull/551 and
// https://github.com/rubygems/rubygems/issues/7329
async function rubygemsLatest(gem, platform, engine, rubyVersion) {
if (engine === 'ruby') {
const floatVersion = common.floatVersion(rubyVersion)
if (common.isHeadVersion(rubyVersion)) {
console.log('Ruby master builds use included RubyGems')
} else if (floatVersion >= 3.0) {
await exec.exec(gem, ['update', '--system'])
} else if (floatVersion >= 2.6) {
await exec.exec(gem, ['update', '--system', '3.4.22'])
} else if (floatVersion >= 2.3) {
await exec.exec(gem, ['update', '--system', '3.3.27'])
} else if (floatVersion >= 1.9) {
await exec.exec(`${gem} install rubygems-update -v 2.7.11 --no-document`)
await exec.exec('update_rubygems')
} else {
console.log(`Cannot update RubyGems for Ruby version ${rubyVersion}`)
}
} else {
// non MRI Rubies (TruffleRuby and JRuby)
await exec.exec(gem, ['update', '--system'])
}
}
+1
View File
@@ -57,6 +57,7 @@
"3.2.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.0-1/rubyinstaller-3.2.0-1-x64.7z", "3.2.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.0-1/rubyinstaller-3.2.0-1-x64.7z",
"3.2.1": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.1-1/rubyinstaller-3.2.1-1-x64.7z", "3.2.1": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.1-1/rubyinstaller-3.2.1-1-x64.7z",
"3.2.2": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z", "3.2.2": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z",
"3.3.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.0-1/rubyinstaller-3.3.0-1-x64.7z",
"head": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z", "head": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z",
"mingw": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z", "mingw": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mingw.7z",
"mswin": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z", "mswin": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z",