mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 14:34:21 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9669f3ee51 | ||
|
|
31a7f6d628 | ||
|
|
59b5745c73 | ||
|
|
d03a71de6e | ||
|
|
ddde3938f5 | ||
|
|
5a73aa9f67 | ||
|
|
d01c52ad8b | ||
|
|
377a94bc68 | ||
|
|
66dc012cc3 | ||
|
|
2789f85824 | ||
|
|
fbb865d04d | ||
|
|
96ac949ea0 | ||
|
|
92aece5fc9 | ||
|
|
db791aad7b | ||
|
|
d3c9825d67 | ||
|
|
f60ef1e808 | ||
|
|
bc4e585e26 | ||
|
|
2cf593d66b | ||
|
|
a26e1fb6b3 | ||
|
|
4d060a10e6 | ||
|
|
77fe3b48b7 |
@@ -3,7 +3,12 @@ description: Create a report to help us improve
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: Please note we will close your issue without comment if you do not fill out the requested information.
|
||||
value: |
|
||||
First, take some time to think whether this is really an issue of ruby/setup-ruby and whether it is fixable in this action.
|
||||
This action basically just downloads a prebuilt Ruby and adds it to `PATH`, so it is unlikely the bug is in this action.
|
||||
Give some thoughts whether it could be an issue in your workflow, in the gems you use, in GitHub Actions, in Ruby, RubyGems, Bundler, etc.
|
||||
This is NOT the place to ask help about your workflow failing (ask that on [GitHub Community](https://github.com/orgs/community/discussions/categories/actions) or [Discussions](https://github.com/ruby/setup-ruby/discussions) instead), it is only to report issues about ruby/setup-ruby.
|
||||
Please note we will close your issue without comment if you do not fill out the requested information.
|
||||
- type: checkboxes
|
||||
attributes:
|
||||
label: Ensure the following before filing this issue
|
||||
|
||||
@@ -17,7 +17,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ ubuntu-18.04, ubuntu-20.04, ubuntu-22.04, macos-10.15, macos-11, macos-12, windows-2019, windows-2022 ]
|
||||
os: [ ubuntu-20.04, ubuntu-22.04, macos-11, macos-12, 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', '3.2', ruby-head,
|
||||
jruby, jruby-head,
|
||||
|
||||
@@ -15,8 +15,8 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby:
|
||||
|
||||
| Interpreter | Versions |
|
||||
| ----------- | -------- |
|
||||
| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.2.0, head, debug, mingw, mswin, ucrt |
|
||||
| `jruby` | 9.1.17.0 - 9.4.0.0, head |
|
||||
| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.2.1, head, debug, mingw, mswin, ucrt |
|
||||
| `jruby` | 9.1.17.0 - 9.4.2.0, head |
|
||||
| `truffleruby` | 19.3.0 - 22.3.1, head |
|
||||
| `truffleruby+graalvm` | 21.2.0 - 22.3.1, head |
|
||||
|
||||
@@ -42,8 +42,8 @@ The action works on these [GitHub-hosted runners](https://docs.github.com/en/act
|
||||
|
||||
| Operating System | Supported |
|
||||
| ---------------- | --------- |
|
||||
| Ubuntu | `ubuntu-18.04`, `ubuntu-20.04`, `ubuntu-22.04` |
|
||||
| macOS | `macos-10.15`, `macos-11`, `macos-12` |
|
||||
| Ubuntu | `ubuntu-20.04`, `ubuntu-22.04` |
|
||||
| macOS | `macos-11`, `macos-12` |
|
||||
| Windows | `windows-2019`, `windows-2022` |
|
||||
|
||||
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
|
||||
@@ -252,7 +252,6 @@ This action might work with [self-hosted runners](https://docs.github.com/en/act
|
||||
if the [Runner Image](https://github.com/actions/runner-images) is very similar to the ones used by GitHub runners. Notably:
|
||||
|
||||
* Make sure to use the same operating system and version.
|
||||
* Set the environment variable `ImageOS` on the runner to the corresponding value on GitHub-hosted runners (e.g. `ubuntu18`/`macos1015`/`win19`). This is necessary to detect the operating system and version.
|
||||
* Make sure to use the same version of libssl.
|
||||
* Make sure that the operating system has `libyaml-0` and [`libgmp`](https://stackoverflow.com/questions/26555902/ruby-v-dyld-library-not-loaded-usr-local-lib-libgmp-10-dylib) installed
|
||||
* The default tool cache directory (`/opt/hostedtoolcache` on Linux, `/Users/runner/hostedtoolcache` on macOS,
|
||||
@@ -260,9 +259,9 @@ if the [Runner Image](https://github.com/actions/runner-images) is very similar
|
||||
This is necessary since the Ruby builds embed the install path when built and cannot be moved around.
|
||||
* `/home/runner` must be writable by the `runner` user.
|
||||
|
||||
In other cases, please use a system Ruby or [install Ruby manually](https://github.com/postmodern/chruby/wiki#installing-rubies) instead.
|
||||
|
||||
On a self-hosted runner you need to define the `ImageOs` as an evironment variable on the host, you can do this in the `~/actions-runner/.env` file (See [#230](https://github.com/ruby/setup-ruby/issues/230)).
|
||||
In other cases, you will need to install Ruby in the runner tool cache as shown by the action when it detects that case
|
||||
(run it so it will show you where to install Ruby).
|
||||
You could of course also not use this action and e.g. use Ruby from a system package or use a Docker image instead.
|
||||
|
||||
## History
|
||||
|
||||
|
||||
@@ -30,6 +30,11 @@ inputs:
|
||||
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.
|
||||
self-hosted:
|
||||
description: |
|
||||
Consider the runner as a self-hosted runner, which means not using prebuilt Ruby binaries which only work
|
||||
on GitHub-hosted runners or self-hosted runners with a very similar image to the ones used by GitHub runners.
|
||||
The default is to detect this automatically based on the OS, OS version and $RUNNER_TOOL_CACHE.
|
||||
outputs:
|
||||
ruby-prefix:
|
||||
description: 'The prefix of the installed ruby'
|
||||
|
||||
+8
-2
@@ -232,8 +232,14 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer
|
||||
}
|
||||
|
||||
async function computeBaseKey(platform, engine, version, lockFile, cacheVersion) {
|
||||
const cacheVersionSuffix = DEFAULT_CACHE_VERSION === cacheVersion ? '' : `-cachever:${cacheVersion}`
|
||||
let key = `setup-ruby-bundler-cache-v4-${platform}-${engine}-${version}${cacheVersionSuffix}`
|
||||
const cwd = process.cwd()
|
||||
const bundleWith = process.env['BUNDLE_WITH'] || ''
|
||||
const bundleWithout = process.env['BUNDLE_WITHOUT'] || ''
|
||||
let key = `setup-ruby-bundler-cache-v5-${common.getOSNameVersionArch()}-${engine}-${version}-wd-${cwd}-with-${bundleWith}-without-${bundleWithout}`
|
||||
|
||||
if (cacheVersion !== DEFAULT_CACHE_VERSION) {
|
||||
key += `-v-${cacheVersion}`
|
||||
}
|
||||
|
||||
if (common.isHeadVersion(version)) {
|
||||
if (engine !== 'jruby') {
|
||||
|
||||
@@ -5,12 +5,19 @@ const util = require('util')
|
||||
const stream = require('stream')
|
||||
const crypto = require('crypto')
|
||||
const core = require('@actions/core')
|
||||
const tc = require('@actions/tool-cache')
|
||||
const { performance } = require('perf_hooks')
|
||||
const linuxOSInfo = require('linux-os-info')
|
||||
import macosRelease from 'macos-release'
|
||||
|
||||
export const windows = (os.platform() === 'win32')
|
||||
// Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14
|
||||
export const drive = (windows ? (process.env['GITHUB_WORKSPACE'] || 'C')[0] : undefined)
|
||||
|
||||
export const inputs = {
|
||||
selfHosted: undefined
|
||||
}
|
||||
|
||||
export function partition(string, separator) {
|
||||
const i = string.indexOf(separator)
|
||||
if (i === -1) {
|
||||
@@ -47,6 +54,18 @@ export async function measure(name, block) {
|
||||
}
|
||||
}
|
||||
|
||||
// Same as mesaure() but without the group, and no time shown on error
|
||||
export async function time(name, block) {
|
||||
console.log(`> ${name}`)
|
||||
const start = performance.now()
|
||||
const value = await block()
|
||||
const end = performance.now()
|
||||
|
||||
const duration = (end - start) / 1000.0
|
||||
console.log(`Took ${duration.toFixed(2).padStart(6)} seconds`)
|
||||
return value
|
||||
}
|
||||
|
||||
export function isHeadVersion(rubyVersion) {
|
||||
return ['head', 'debug', 'mingw', 'mswin', 'ucrt'].includes(rubyVersion)
|
||||
}
|
||||
@@ -139,75 +158,144 @@ export async function hashFile(file) {
|
||||
return hash.digest('hex')
|
||||
}
|
||||
|
||||
function getImageOS() {
|
||||
const imageOS = process.env['ImageOS']
|
||||
if (!imageOS) {
|
||||
throw new Error('The environment variable ImageOS must be set')
|
||||
}
|
||||
return imageOS
|
||||
}
|
||||
|
||||
export const supportedPlatforms = [
|
||||
'ubuntu-18.04',
|
||||
'ubuntu-20.04',
|
||||
'ubuntu-22.04',
|
||||
'macos-10.15',
|
||||
'macos-11',
|
||||
'macos-12',
|
||||
'windows-2019',
|
||||
'windows-2022',
|
||||
const GitHubHostedPlatforms = [
|
||||
'ubuntu-20.04-x64',
|
||||
'ubuntu-22.04-x64',
|
||||
'macos-11-x64',
|
||||
'macos-12-x64',
|
||||
'windows-2019-x64',
|
||||
'windows-2022-x64',
|
||||
]
|
||||
|
||||
// Actually a self-hosted runner for which the OS and OS version does not correspond to a GitHub-hosted runner image,
|
||||
export function isSelfHostedRunner() {
|
||||
if (inputs.selfHosted === undefined) {
|
||||
throw new Error('inputs.selfHosted should have been already set')
|
||||
}
|
||||
|
||||
return inputs.selfHosted === 'true' ||
|
||||
!GitHubHostedPlatforms.includes(getOSNameVersionArch())
|
||||
}
|
||||
|
||||
export function selfHostedRunnerReason() {
|
||||
if (inputs.selfHosted === 'true') {
|
||||
return 'the self-hosted input was set'
|
||||
} else if (!GitHubHostedPlatforms.includes(getOSNameVersionArch())) {
|
||||
return 'the platform does not match a GitHub-hosted runner image (or that image is deprecated and no longer supported)'
|
||||
} else {
|
||||
return 'unknown reason'
|
||||
}
|
||||
}
|
||||
|
||||
let virtualEnvironmentName = undefined
|
||||
|
||||
export function getVirtualEnvironmentName() {
|
||||
const imageOS = getImageOS()
|
||||
|
||||
let match = imageOS.match(/^ubuntu(\d+)/) // e.g. ubuntu18
|
||||
if (match) {
|
||||
return `ubuntu-${match[1]}.04`
|
||||
if (virtualEnvironmentName !== undefined) {
|
||||
return virtualEnvironmentName
|
||||
}
|
||||
|
||||
match = imageOS.match(/^macos(\d{2})(\d+)?/) // e.g. macos1015, macos11
|
||||
if (match) {
|
||||
if (match[2]) {
|
||||
return `macos-${match[1]}.${match[2]}`
|
||||
} else {
|
||||
return `macos-${match[1]}`
|
||||
}
|
||||
const platform = os.platform()
|
||||
let osName
|
||||
let osVersion
|
||||
if (platform === 'linux') {
|
||||
const info = linuxOSInfo({mode: 'sync'})
|
||||
osName = info.id
|
||||
osVersion = info.version_id
|
||||
} else if (platform === 'darwin') {
|
||||
osName = 'macos'
|
||||
osVersion = macosRelease().version
|
||||
} else if (platform === 'win32') {
|
||||
osName = 'windows'
|
||||
osVersion = findWindowsVersion()
|
||||
} else {
|
||||
throw new Error(`Unknown platform ${platform}`)
|
||||
}
|
||||
|
||||
match = imageOS.match(/^win(\d+)/) // e.g. win19
|
||||
if (match) {
|
||||
return `windows-20${match[1]}`
|
||||
}
|
||||
virtualEnvironmentName = `${osName}-${osVersion}`
|
||||
return virtualEnvironmentName
|
||||
}
|
||||
|
||||
throw new Error(`Unknown ImageOS ${imageOS}`)
|
||||
export function getOSNameVersionArch() {
|
||||
return `${getVirtualEnvironmentName()}-${os.arch()}`
|
||||
}
|
||||
|
||||
function findWindowsVersion() {
|
||||
const version = os.version();
|
||||
const match = version.match(/^Windows Server (\d+) Datacenter/)
|
||||
if (match) {
|
||||
return match[1]
|
||||
} else {
|
||||
throw new Error('Could not find Windows version')
|
||||
}
|
||||
}
|
||||
|
||||
export function shouldUseToolCache(engine, version) {
|
||||
return engine === 'ruby' && !isHeadVersion(version)
|
||||
return (engine === 'ruby' && !isHeadVersion(version)) || isSelfHostedRunner()
|
||||
}
|
||||
|
||||
function getPlatformToolCache(platform) {
|
||||
// Hardcode paths rather than using $RUNNER_TOOL_CACHE because the prebuilt Rubies cannot be moved anyway
|
||||
export function getToolCachePath() {
|
||||
if (isSelfHostedRunner()) {
|
||||
return getRunnerToolCache()
|
||||
} else {
|
||||
// Rubies prebuilt by this action embed this path rather than using $RUNNER_TOOL_CACHE
|
||||
// so use that path is not isSelfHostedRunner()
|
||||
return getDefaultToolCachePath()
|
||||
}
|
||||
}
|
||||
|
||||
export function getRunnerToolCache() {
|
||||
const runnerToolCache = process.env['RUNNER_TOOL_CACHE']
|
||||
if (!runnerToolCache) {
|
||||
throw new Error('$RUNNER_TOOL_CACHE must be set')
|
||||
}
|
||||
return runnerToolCache
|
||||
}
|
||||
|
||||
// Rubies prebuilt by this action embed this path rather than using $RUNNER_TOOL_CACHE
|
||||
function getDefaultToolCachePath() {
|
||||
const platform = getVirtualEnvironmentName()
|
||||
if (platform.startsWith('ubuntu-')) {
|
||||
return '/opt/hostedtoolcache'
|
||||
} else if (platform.startsWith('macos-')) {
|
||||
return '/Users/runner/hostedtoolcache'
|
||||
} else if (platform.startsWith('windows-')) {
|
||||
return 'C:/hostedtoolcache/windows'
|
||||
return 'C:\\hostedtoolcache\\windows'
|
||||
} else {
|
||||
throw new Error('Unknown platform')
|
||||
}
|
||||
}
|
||||
|
||||
export function getToolCacheRubyPrefix(platform, version) {
|
||||
const toolCache = getPlatformToolCache(platform)
|
||||
return path.join(toolCache, 'Ruby', version, 'x64')
|
||||
// tc.find() but using RUNNER_TOOL_CACHE=getToolCachePath()
|
||||
export function toolCacheFind(engine, version) {
|
||||
const originalToolCache = getToolCachePath()
|
||||
process.env['RUNNER_TOOL_CACHE'] = getToolCachePath()
|
||||
try {
|
||||
return tc.find(engineToToolCacheName(engine), version)
|
||||
} finally {
|
||||
process.env['RUNNER_TOOL_CACHE'] = originalToolCache
|
||||
}
|
||||
}
|
||||
|
||||
function engineToToolCacheName(engine) {
|
||||
return {
|
||||
ruby: 'Ruby',
|
||||
jruby: 'JRuby',
|
||||
truffleruby: 'TruffleRuby',
|
||||
"truffleruby+graalvm": 'TruffleRubyGraalVM'
|
||||
}[engine]
|
||||
}
|
||||
|
||||
export function getToolCacheRubyPrefix(platform, engine, version) {
|
||||
const toolCache = getToolCachePath()
|
||||
return path.join(toolCache, engineToToolCacheName(engine), version, os.arch())
|
||||
}
|
||||
|
||||
export function toolCacheCompleteFile(toolCacheRubyPrefix) {
|
||||
return `${toolCacheRubyPrefix}.complete`
|
||||
}
|
||||
|
||||
export function createToolCacheCompleteFile(toolCacheRubyPrefix) {
|
||||
const completeFile = `${toolCacheRubyPrefix}.complete`
|
||||
fs.writeFileSync(completeFile, '')
|
||||
fs.writeFileSync(toolCacheCompleteFile(toolCacheRubyPrefix), '')
|
||||
}
|
||||
|
||||
// convert windows path like C:\Users\runneradmin to /c/Users/runneradmin
|
||||
|
||||
+422
-105
File diff suppressed because one or more lines are too long
@@ -16,6 +16,7 @@ const inputDefaults = {
|
||||
'bundler-cache': 'false',
|
||||
'working-directory': '.',
|
||||
'cache-version': bundler.DEFAULT_CACHE_VERSION,
|
||||
'self-hosted': 'false',
|
||||
}
|
||||
|
||||
// entry point when this action is run on its own
|
||||
@@ -23,7 +24,11 @@ export async function run() {
|
||||
try {
|
||||
await setupRuby()
|
||||
} catch (error) {
|
||||
core.setFailed(error.stack)
|
||||
if (/\bprocess\b.+\bfailed\b/.test(error.message)) {
|
||||
core.setFailed(error.message)
|
||||
} else {
|
||||
core.setFailed(error.stack)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +40,7 @@ export async function setupRuby(options = {}) {
|
||||
inputs[key] = core.getInput(key) || inputDefaults[key]
|
||||
}
|
||||
}
|
||||
common.inputs.selfHosted = inputs['self-hosted']
|
||||
|
||||
process.chdir(inputs['working-directory'])
|
||||
|
||||
@@ -42,7 +48,7 @@ export async function setupRuby(options = {}) {
|
||||
const [engine, parsedVersion] = parseRubyEngineAndVersion(inputs['ruby-version'])
|
||||
|
||||
let installer
|
||||
if (platform.startsWith('windows-') && engine === 'ruby') {
|
||||
if (platform.startsWith('windows-') && engine === 'ruby' && !common.isSelfHostedRunner()) {
|
||||
installer = require('./windows')
|
||||
} else {
|
||||
installer = require('./ruby-builder')
|
||||
@@ -56,7 +62,7 @@ export async function setupRuby(options = {}) {
|
||||
|
||||
// JRuby can use compiled extension code, so make sure gcc exists.
|
||||
// As of Jan-2022, JRuby compiles against msvcrt.
|
||||
if (platform.startsWith('windows') && (engine === 'jruby') &&
|
||||
if (platform.startsWith('windows') && engine === 'jruby' &&
|
||||
!fs.existsSync('C:\\msys64\\mingw64\\bin\\gcc.exe')) {
|
||||
await require('./windows').installJRubyTools()
|
||||
}
|
||||
@@ -88,7 +94,7 @@ export async function setupRuby(options = {}) {
|
||||
}
|
||||
|
||||
if (inputs['bundler-cache'] === 'true') {
|
||||
await common.measure('bundle install', async () =>
|
||||
await common.time('bundle install', async () =>
|
||||
bundler.bundleInstall(gemfile, lockFile, platform, engine, version, bundlerVersion, inputs['cache-version']))
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
"@actions/exec": "^1.1.1",
|
||||
"@actions/io": "^1.1.2",
|
||||
"@actions/tool-cache": "^2",
|
||||
"linux-os-info": "^2.0.0",
|
||||
"macos-release": "^3.1.0",
|
||||
"semver": "^7.3.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
"2.7.0", "2.7.1", "2.7.2", "2.7.3", "2.7.4", "2.7.5", "2.7.6", "2.7.7",
|
||||
"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.1.0-preview1", "3.1.0", "3.1.1", "3.1.2", "3.1.3",
|
||||
"3.2.0-preview1", "3.2.0-preview2", "3.2.0-preview3", "3.2.0-rc1", "3.2.0",
|
||||
"3.2.0-preview1", "3.2.0-preview2", "3.2.0-preview3", "3.2.0-rc1", "3.2.0", "3.2.1",
|
||||
"head", "debug"
|
||||
],
|
||||
"jruby": [
|
||||
"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.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.4.0.0",
|
||||
"9.4.0.0", "9.4.1.0", "9.4.2.0",
|
||||
"head"
|
||||
],
|
||||
"truffleruby": [
|
||||
|
||||
+18
-16
@@ -1,6 +1,7 @@
|
||||
const os = require('os')
|
||||
const fs = require('fs')
|
||||
const path = require('path')
|
||||
const core = require('@actions/core')
|
||||
const exec = require('@actions/exec')
|
||||
const io = require('@actions/io')
|
||||
const tc = require('@actions/tool-cache')
|
||||
@@ -13,21 +14,31 @@ const releasesURL = 'https://github.com/ruby/ruby-builder/releases'
|
||||
const windows = common.windows
|
||||
|
||||
export function getAvailableVersions(platform, engine) {
|
||||
if (!common.supportedPlatforms.includes(platform)) {
|
||||
throw new Error(`Unsupported platform ${platform}`)
|
||||
}
|
||||
|
||||
return rubyBuilderVersions[engine]
|
||||
}
|
||||
|
||||
export async function install(platform, engine, version) {
|
||||
let rubyPrefix, inToolCache
|
||||
if (common.shouldUseToolCache(engine, version)) {
|
||||
inToolCache = tc.find('Ruby', version)
|
||||
inToolCache = common.toolCacheFind(engine, version)
|
||||
if (inToolCache) {
|
||||
rubyPrefix = inToolCache
|
||||
} else {
|
||||
rubyPrefix = common.getToolCacheRubyPrefix(platform, version)
|
||||
const toolCacheRubyPrefix = common.getToolCacheRubyPrefix(platform, engine, version)
|
||||
if (common.isSelfHostedRunner()) {
|
||||
const rubyBuildDefinition = engine === 'ruby' ? version : `${engine}-${version}`
|
||||
core.error(
|
||||
`The current runner (${common.getOSNameVersionArch()}) was detected as self-hosted because ${common.selfHostedRunnerReason()}.\n` +
|
||||
`In such a case, you should install Ruby in the $RUNNER_TOOL_CACHE yourself, for example using https://github.com/rbenv/ruby-build\n` +
|
||||
`You can take inspiration from this workflow for more details: https://github.com/ruby/ruby-builder/blob/master/.github/workflows/build.yml\n` +
|
||||
`$ ruby-build ${rubyBuildDefinition} ${toolCacheRubyPrefix}\n` +
|
||||
`Once that completes successfully, mark it as complete with:\n` +
|
||||
`$ touch ${common.toolCacheCompleteFile(toolCacheRubyPrefix)}\n` +
|
||||
`It is your responsibility to ensure installing Ruby like that is not done in parallel.\n`)
|
||||
process.exit(1)
|
||||
} else {
|
||||
rubyPrefix = toolCacheRubyPrefix
|
||||
}
|
||||
}
|
||||
} else if (windows) {
|
||||
rubyPrefix = path.join(`${common.drive}:`, `${engine}-${version}`)
|
||||
@@ -39,7 +50,7 @@ export async function install(platform, engine, version) {
|
||||
common.setupPath([path.join(rubyPrefix, 'bin')])
|
||||
|
||||
if (!inToolCache) {
|
||||
await preparePrefix(rubyPrefix)
|
||||
await io.mkdirP(rubyPrefix)
|
||||
if (engine === 'truffleruby+graalvm') {
|
||||
await installWithRubyBuild(engine, version, rubyPrefix)
|
||||
} else {
|
||||
@@ -50,15 +61,6 @@ export async function install(platform, engine, version) {
|
||||
return rubyPrefix
|
||||
}
|
||||
|
||||
async function preparePrefix(rubyPrefix) {
|
||||
const parentDir = path.dirname(rubyPrefix)
|
||||
|
||||
await io.rmRF(rubyPrefix)
|
||||
if (!(fs.existsSync(parentDir) && fs.statSync(parentDir).isDirectory())) {
|
||||
await io.mkdirP(parentDir)
|
||||
}
|
||||
}
|
||||
|
||||
async function installWithRubyBuild(engine, version, rubyPrefix) {
|
||||
const tmp = process.env['RUNNER_TEMP'] || os.tmpdir()
|
||||
const rubyBuildDir = path.join(tmp, 'ruby-build-for-setup-ruby')
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
"3.1.2": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.2-1/rubyinstaller-3.1.2-1-x64.7z",
|
||||
"3.1.3": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.3-1/rubyinstaller-3.1.3-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",
|
||||
"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",
|
||||
"mswin": "https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-mswin.7z",
|
||||
|
||||
+3
-9
@@ -27,13 +27,7 @@ const certFile = 'C:\\Program Files\\Git\\mingw64\\ssl\\cert.pem'
|
||||
const msys1 = `${drive}:\\DevKit64`
|
||||
const msysPathEntries = [`${msys1}\\mingw\\x86_64-w64-mingw32\\bin`, `${msys1}\\mingw\\bin`, `${msys1}\\bin`]
|
||||
|
||||
const virtualEnv = common.getVirtualEnvironmentName()
|
||||
|
||||
export function getAvailableVersions(platform, engine) {
|
||||
if (!common.supportedPlatforms.includes(platform)) {
|
||||
throw new Error(`Unsupported platform ${platform}`)
|
||||
}
|
||||
|
||||
if (engine === 'ruby') {
|
||||
return Object.keys(rubyInstallerVersions)
|
||||
} else {
|
||||
@@ -46,7 +40,7 @@ export async function install(platform, engine, version) {
|
||||
|
||||
// The windows-2016 and windows-2019 images have MSYS2 build tools (C:/msys64/usr)
|
||||
// and MinGW build tools installed. The windows-2022 image has neither.
|
||||
const hasMSYS2PreInstalled = ['windows-2019', 'windows-2016'].includes(virtualEnv)
|
||||
const hasMSYS2PreInstalled = ['windows-2019', 'windows-2016'].includes(platform)
|
||||
|
||||
if (!url.endsWith('.7z')) {
|
||||
throw new Error(`URL should end in .7z: ${url}`)
|
||||
@@ -55,11 +49,11 @@ export async function install(platform, engine, version) {
|
||||
|
||||
let rubyPrefix, inToolCache
|
||||
if (common.shouldUseToolCache(engine, version)) {
|
||||
inToolCache = tc.find('Ruby', version)
|
||||
inToolCache = common.toolCacheFind(engine, version)
|
||||
if (inToolCache) {
|
||||
rubyPrefix = inToolCache
|
||||
} else {
|
||||
rubyPrefix = common.getToolCacheRubyPrefix(platform, version)
|
||||
rubyPrefix = common.getToolCacheRubyPrefix(platform, engine, version)
|
||||
}
|
||||
} else {
|
||||
rubyPrefix = `${drive}:\\${base}`
|
||||
|
||||
@@ -283,6 +283,11 @@ ip-regex@^2.1.0:
|
||||
resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
|
||||
integrity sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==
|
||||
|
||||
linux-os-info@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/linux-os-info/-/linux-os-info-2.0.0.tgz#32a251077c13af1a69dbcb36a168901208e32776"
|
||||
integrity sha512-ZopyH4kT2Ehnmix8iUgS/41pfv7fSlUV1JukIn3DB3qD3byvhBNtgCbUApoAtiqcHRLKXCY3zakXlJgiExm2Qg==
|
||||
|
||||
lru-cache@^6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
|
||||
@@ -290,6 +295,11 @@ lru-cache@^6.0.0:
|
||||
dependencies:
|
||||
yallist "^4.0.0"
|
||||
|
||||
macos-release@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-3.1.0.tgz#6165bb0736ae567ed6649e36ce6a24d87cbb7aca"
|
||||
integrity sha512-/M/R0gCDgM+Cv1IuBG1XGdfTFnMEG6PZeT+KGWHO/OG+imqmaD9CH5vHBTycEM3+Kc4uG2Il+tFAuUWLqQOeUA==
|
||||
|
||||
mime-db@1.52.0:
|
||||
version "1.52.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||
|
||||
Reference in New Issue
Block a user