mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 14:34:21 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d359377deb | ||
|
|
4a1b0853ab | ||
|
|
c36d5afe85 | ||
|
|
8781aa98b4 | ||
|
|
578365d08b | ||
|
|
c3f0cb18af | ||
|
|
180e1d1f1c | ||
|
|
238b81ee64 |
@@ -15,21 +15,14 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0, windows-2016, windows-2019, windows-2022 ]
|
os: [ ubuntu-18.04, ubuntu-20.04, macos-10.15, macos-11.0, windows-2019, windows-2022 ]
|
||||||
ruby: [ 1.9, '2.0', 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, '3.0', 3.1, ruby-head, jruby, jruby-head, truffleruby, truffleruby-head, truffleruby+graalvm, truffleruby+graalvm-head ]
|
ruby: [ 1.9, '2.0', 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, '3.0', 3.1, ruby-head, jruby, jruby-head, truffleruby, truffleruby-head, truffleruby+graalvm, truffleruby+graalvm-head ]
|
||||||
include:
|
include:
|
||||||
- { os: windows-2016, ruby: mingw }
|
|
||||||
- { os: windows-2019, ruby: mingw }
|
- { os: windows-2019, ruby: mingw }
|
||||||
- { os: windows-2019, ruby: mswin }
|
- { os: windows-2019, ruby: mswin }
|
||||||
- { os: windows-2022, ruby: mingw }
|
- { os: windows-2022, ruby: mingw }
|
||||||
- { os: windows-2022, ruby: ucrt }
|
- { os: windows-2022, ruby: ucrt }
|
||||||
exclude:
|
exclude:
|
||||||
- { os: windows-2016, ruby: 1.9 }
|
|
||||||
- { os: windows-2016, ruby: debug }
|
|
||||||
- { os: windows-2016, ruby: truffleruby }
|
|
||||||
- { os: windows-2016, ruby: truffleruby-head }
|
|
||||||
- { os: windows-2016, ruby: truffleruby+graalvm }
|
|
||||||
- { os: windows-2016, ruby: truffleruby+graalvm-head }
|
|
||||||
- { os: windows-2019, ruby: 1.9 }
|
- { os: windows-2019, ruby: 1.9 }
|
||||||
- { os: windows-2019, ruby: debug }
|
- { os: windows-2019, ruby: debug }
|
||||||
- { os: windows-2019, ruby: truffleruby }
|
- { os: windows-2019, ruby: truffleruby }
|
||||||
@@ -119,6 +112,39 @@ jobs:
|
|||||||
if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby')
|
if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby')
|
||||||
run: gem install sassc
|
run: gem install sassc
|
||||||
|
|
||||||
|
testLatestRubygemsVersion:
|
||||||
|
name: "Test rubygems input set to latest upgrades the default RubyGems version"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: ./
|
||||||
|
with:
|
||||||
|
ruby-version: 2.6
|
||||||
|
rubygems: latest
|
||||||
|
- 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"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: ./
|
||||||
|
with:
|
||||||
|
ruby-version: 2.6
|
||||||
|
rubygems: 3.2.3
|
||||||
|
- run: gem --version | grep -F "3.2.3"
|
||||||
|
|
||||||
|
testFixedRubygemsVersionNoop:
|
||||||
|
name: "Test rubygems input set to a fixed version noops if the default is newer"
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: ./
|
||||||
|
with:
|
||||||
|
ruby-version: 3.1
|
||||||
|
rubygems: 3.2.3
|
||||||
|
- run: gem --version | grep -F "3.3.3"
|
||||||
|
|
||||||
testExactBundlerVersion:
|
testExactBundlerVersion:
|
||||||
name: "Test with an exact Bundler version"
|
name: "Test with an exact Bundler version"
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ The action works for all [GitHub-hosted runners](https://help.github.com/en/acti
|
|||||||
| ----------- | -------- | -------- |
|
| ----------- | -------- | -------- |
|
||||||
| Ubuntu | `ubuntu-latest` (= `ubuntu-20.04`) | `ubuntu-18.04`, `ubuntu-16.04` |
|
| Ubuntu | `ubuntu-latest` (= `ubuntu-20.04`) | `ubuntu-18.04`, `ubuntu-16.04` |
|
||||||
| macOS | `macos-latest` (= `macos-10.15`) | `macos-11.0` |
|
| macOS | `macos-latest` (= `macos-10.15`) | `macos-11.0` |
|
||||||
| Windows | `windows-latest` (= `windows-2019`) | `windows-2016` |
|
| Windows | `windows-latest` (= `windows-2019`) | `windows-2022` |
|
||||||
|
|
||||||
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
|
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
|
||||||
and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2).
|
and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2).
|
||||||
@@ -139,6 +139,18 @@ and the [condition and expression syntax](https://help.github.com/en/actions/ref
|
|||||||
The `working-directory` input can be set to resolve `.ruby-version`, `.tool-versions` and `Gemfile.lock`
|
The `working-directory` input can be set to resolve `.ruby-version`, `.tool-versions` and `Gemfile.lock`
|
||||||
if they are not at the root of the repository, see [action.yml](action.yml) for details.
|
if they are not at the root of the repository, see [action.yml](action.yml) for details.
|
||||||
|
|
||||||
|
### RubyGems
|
||||||
|
|
||||||
|
By default, the default RubyGems version that comes with each Ruby is used.
|
||||||
|
However, users can optionally customize the RubyGems version that they want by
|
||||||
|
setting the `rubygems` input.
|
||||||
|
|
||||||
|
See [action.yml](action.yml) for more details about the `rubygems` input.
|
||||||
|
|
||||||
|
If you're running into `ArgumentError: wrong number of arguments (given 4,
|
||||||
|
expected 1)` errors with a stacktrace including Psych and RubyGems entries, you
|
||||||
|
should be able to fix them by setting `rubygems: 3.0.0` or higher.
|
||||||
|
|
||||||
### Bundler
|
### Bundler
|
||||||
|
|
||||||
By default, if there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` or `gems.locked`) with a `BUNDLED WITH` section,
|
By default, if there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` or `gems.locked`) with a `BUNDLED WITH` section,
|
||||||
|
|||||||
@@ -9,6 +9,13 @@ inputs:
|
|||||||
description: 'Engine and version to use, see the syntax in the README. Reads from .ruby-version or .tool-versions if unset.'
|
description: 'Engine and version to use, see the syntax in the README. Reads from .ruby-version or .tool-versions if unset.'
|
||||||
required: false
|
required: false
|
||||||
default: 'default'
|
default: 'default'
|
||||||
|
rubygems:
|
||||||
|
description: |
|
||||||
|
The version of RubyGems to use. Either '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:
|
bundler:
|
||||||
description: |
|
description: |
|
||||||
The version of Bundler to install. Either 'none', 'latest', 'Gemfile.lock', or a version number (e.g., 1, 2, 2.1.4).
|
The version of Bundler to install. Either 'none', 'latest', 'Gemfile.lock', or a version number (e.g., 1, 2, 2.1.4).
|
||||||
|
|||||||
+53
-2
@@ -58953,6 +58953,48 @@ function getLatestHeadBuildURL(platform, engine, version) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 160:
|
||||||
|
/***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
__nccwpck_require__.r(__webpack_exports__);
|
||||||
|
/* harmony export */ __nccwpck_require__.d(__webpack_exports__, {
|
||||||
|
/* harmony export */ "rubygemsUpdate": () => (/* binding */ rubygemsUpdate)
|
||||||
|
/* harmony export */ });
|
||||||
|
const path = __nccwpck_require__(5622)
|
||||||
|
const exec = __nccwpck_require__(1514)
|
||||||
|
const semver = __nccwpck_require__(5911)
|
||||||
|
|
||||||
|
async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix) {
|
||||||
|
const gem = path.join(rubyPrefix, 'bin', 'gem')
|
||||||
|
|
||||||
|
let gemVersion = ''
|
||||||
|
|
||||||
|
await exec.exec(gem, ['--version'], {
|
||||||
|
listeners: {
|
||||||
|
stdout: (data) => (gemVersion += data.toString()),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
gemVersion = semver.coerce(gemVersion.trim())
|
||||||
|
console.log(`Default RubyGems version is ${gemVersion}`)
|
||||||
|
|
||||||
|
if (rubygemsVersionInput === 'latest') {
|
||||||
|
console.log('Updating RubyGems to latest version')
|
||||||
|
await exec.exec(gem, ['update', '--system'])
|
||||||
|
} else if (semver.gt(rubygemsVersionInput, gemVersion)) {
|
||||||
|
console.log(`Updating RubyGems to ${rubygemsVersionInput}`)
|
||||||
|
await exec.exec(gem, ['update', '--system', rubygemsVersionInput])
|
||||||
|
} else {
|
||||||
|
console.log(`Skipping RubyGems update because the given version (${rubygemsVersionInput}) is not newer than the default version (${gemVersion})`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
/***/ }),
|
||||||
|
|
||||||
/***/ 7223:
|
/***/ 7223:
|
||||||
@@ -59272,8 +59314,10 @@ function renameSystem32Dlls() {
|
|||||||
const sys32 = 'C:\\Windows\\System32\\'
|
const sys32 = 'C:\\Windows\\System32\\'
|
||||||
const badFiles = [`${sys32}libcrypto-1_1-x64.dll`, `${sys32}libssl-1_1-x64.dll`]
|
const badFiles = [`${sys32}libcrypto-1_1-x64.dll`, `${sys32}libssl-1_1-x64.dll`]
|
||||||
const existing = badFiles.filter((dll) => fs.existsSync(dll))
|
const existing = badFiles.filter((dll) => fs.existsSync(dll))
|
||||||
console.log(`Renaming ${existing.join(' and ')} to avoid dll resolution conflicts on Ruby <= 2.4`)
|
if (existing.length > 0) {
|
||||||
existing.forEach(dll => fs.renameSync(dll, `${dll}_`))
|
console.log(`Renaming ${existing.join(' and ')} to avoid dll resolution conflicts on Ruby <= 2.4`)
|
||||||
|
existing.forEach(dll => fs.renameSync(dll, `${dll}_`))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets MSYS2 ENV variables set from running `ridk enable`
|
// Sets MSYS2 ENV variables set from running `ridk enable`
|
||||||
@@ -59564,12 +59608,14 @@ const fs = __nccwpck_require__(5747)
|
|||||||
const path = __nccwpck_require__(5622)
|
const path = __nccwpck_require__(5622)
|
||||||
const core = __nccwpck_require__(2186)
|
const core = __nccwpck_require__(2186)
|
||||||
const common = __nccwpck_require__(4717)
|
const common = __nccwpck_require__(4717)
|
||||||
|
const rubygems = __nccwpck_require__(160)
|
||||||
const bundler = __nccwpck_require__(1641)
|
const bundler = __nccwpck_require__(1641)
|
||||||
|
|
||||||
const windows = common.windows
|
const windows = common.windows
|
||||||
|
|
||||||
const inputDefaults = {
|
const inputDefaults = {
|
||||||
'ruby-version': 'default',
|
'ruby-version': 'default',
|
||||||
|
'rubygems': 'default',
|
||||||
'bundler': 'default',
|
'bundler': 'default',
|
||||||
'bundler-cache': 'true',
|
'bundler-cache': 'true',
|
||||||
'working-directory': '.',
|
'working-directory': '.',
|
||||||
@@ -59621,6 +59667,11 @@ async function setupRuby(options = {}) {
|
|||||||
|
|
||||||
const rubyPrefix = await installer.install(platform, engine, version)
|
const rubyPrefix = await installer.install(platform, engine, version)
|
||||||
|
|
||||||
|
if (inputs['rubygems'] !== 'default') {
|
||||||
|
await common.measure('Updating RubyGems', async () =>
|
||||||
|
rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix))
|
||||||
|
}
|
||||||
|
|
||||||
// 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
|
||||||
// before 'bundle install'. Installed dependencies may require additional
|
// before 'bundle install'. Installed dependencies may require additional
|
||||||
// libraries & headers, build tools, etc.
|
// libraries & headers, build tools, etc.
|
||||||
|
|||||||
@@ -3,12 +3,14 @@ const fs = require('fs')
|
|||||||
const path = require('path')
|
const path = require('path')
|
||||||
const core = require('@actions/core')
|
const core = require('@actions/core')
|
||||||
const common = require('./common')
|
const common = require('./common')
|
||||||
|
const rubygems = require('./rubygems')
|
||||||
const bundler = require('./bundler')
|
const bundler = require('./bundler')
|
||||||
|
|
||||||
const windows = common.windows
|
const windows = common.windows
|
||||||
|
|
||||||
const inputDefaults = {
|
const inputDefaults = {
|
||||||
'ruby-version': 'default',
|
'ruby-version': 'default',
|
||||||
|
'rubygems': 'default',
|
||||||
'bundler': 'default',
|
'bundler': 'default',
|
||||||
'bundler-cache': 'true',
|
'bundler-cache': 'true',
|
||||||
'working-directory': '.',
|
'working-directory': '.',
|
||||||
@@ -60,6 +62,11 @@ export async function setupRuby(options = {}) {
|
|||||||
|
|
||||||
const rubyPrefix = await installer.install(platform, engine, version)
|
const rubyPrefix = await installer.install(platform, engine, version)
|
||||||
|
|
||||||
|
if (inputs['rubygems'] !== 'default') {
|
||||||
|
await common.measure('Updating RubyGems', async () =>
|
||||||
|
rubygems.rubygemsUpdate(inputs['rubygems'], rubyPrefix))
|
||||||
|
}
|
||||||
|
|
||||||
// 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
|
||||||
// before 'bundle install'. Installed dependencies may require additional
|
// before 'bundle install'. Installed dependencies may require additional
|
||||||
// libraries & headers, build tools, etc.
|
// libraries & headers, build tools, etc.
|
||||||
|
|||||||
+2
-1
@@ -26,7 +26,8 @@
|
|||||||
"@actions/core": "^1.4.0",
|
"@actions/core": "^1.4.0",
|
||||||
"@actions/exec": "^1.1.0",
|
"@actions/exec": "^1.1.0",
|
||||||
"@actions/io": "^1.1.1",
|
"@actions/io": "^1.1.1",
|
||||||
"@actions/tool-cache": "^1.7.1"
|
"@actions/tool-cache": "^1.7.1",
|
||||||
|
"semver": "^6.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@vercel/ncc": "^0.31.1"
|
"@vercel/ncc": "^0.31.1"
|
||||||
|
|||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
const path = require('path')
|
||||||
|
const exec = require('@actions/exec')
|
||||||
|
const semver = require('semver')
|
||||||
|
|
||||||
|
export async function rubygemsUpdate(rubygemsVersionInput, rubyPrefix) {
|
||||||
|
const gem = path.join(rubyPrefix, 'bin', 'gem')
|
||||||
|
|
||||||
|
let gemVersion = ''
|
||||||
|
|
||||||
|
await exec.exec(gem, ['--version'], {
|
||||||
|
listeners: {
|
||||||
|
stdout: (data) => (gemVersion += data.toString()),
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
gemVersion = semver.coerce(gemVersion.trim())
|
||||||
|
console.log(`Default RubyGems version is ${gemVersion}`)
|
||||||
|
|
||||||
|
if (rubygemsVersionInput === 'latest') {
|
||||||
|
console.log('Updating RubyGems to latest version')
|
||||||
|
await exec.exec(gem, ['update', '--system'])
|
||||||
|
} else if (semver.gt(rubygemsVersionInput, gemVersion)) {
|
||||||
|
console.log(`Updating RubyGems to ${rubygemsVersionInput}`)
|
||||||
|
await exec.exec(gem, ['update', '--system', rubygemsVersionInput])
|
||||||
|
} else {
|
||||||
|
console.log(`Skipping RubyGems update because the given version (${rubygemsVersionInput}) is not newer than the default version (${gemVersion})`)
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
+4
-2
@@ -243,8 +243,10 @@ function renameSystem32Dlls() {
|
|||||||
const sys32 = 'C:\\Windows\\System32\\'
|
const sys32 = 'C:\\Windows\\System32\\'
|
||||||
const badFiles = [`${sys32}libcrypto-1_1-x64.dll`, `${sys32}libssl-1_1-x64.dll`]
|
const badFiles = [`${sys32}libcrypto-1_1-x64.dll`, `${sys32}libssl-1_1-x64.dll`]
|
||||||
const existing = badFiles.filter((dll) => fs.existsSync(dll))
|
const existing = badFiles.filter((dll) => fs.existsSync(dll))
|
||||||
console.log(`Renaming ${existing.join(' and ')} to avoid dll resolution conflicts on Ruby <= 2.4`)
|
if (existing.length > 0) {
|
||||||
existing.forEach(dll => fs.renameSync(dll, `${dll}_`))
|
console.log(`Renaming ${existing.join(' and ')} to avoid dll resolution conflicts on Ruby <= 2.4`)
|
||||||
|
existing.forEach(dll => fs.renameSync(dll, `${dll}_`))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sets MSYS2 ENV variables set from running `ridk enable`
|
// Sets MSYS2 ENV variables set from running `ridk enable`
|
||||||
|
|||||||
Reference in New Issue
Block a user