diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8c5de1e67..a74a6a3df 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,17 +1,24 @@ -name: Update the v1 branch when a release is published +name: Create a Release on: - release: - types: [published] + workflow_dispatch: permissions: - contents: read + contents: write # for creating release jobs: release: runs-on: ubuntu-latest - permissions: - contents: write # for git push + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 + - uses: ./ + with: + ruby-version: '3.3' + - run: ruby release.rb + # The same as the update-v1-branch.yml workflow. + # That workflow is not triggered by the release created above because of + # https://docs.github.com/en/actions/security-guides/automatic-token-authentication#using-the-github_token-in-a-workflow - run: git push origin HEAD:v1 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2ea9b0995..d22092b3f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -17,9 +17,9 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-20.04, ubuntu-22.04, macos-11, macos-12, macos-13, macos-14, macos-arm-oss, windows-2019, windows-2022 ] + os: [ ubuntu-20.04, ubuntu-22.04, ubuntu-24.04, macos-13, macos-14, macos-15, 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', '3.3', ruby-head, + '1.9', '2.0', '2.1', '2.2', '2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3', '3.4', ruby-head, jruby, jruby-head, truffleruby, truffleruby-head, truffleruby+graalvm, truffleruby+graalvm-head @@ -30,10 +30,13 @@ jobs: - { os: windows-2022, ruby: mingw } - { os: windows-2022, ruby: mswin } - { os: windows-2022, ruby: ucrt } + - { os: ubuntu-24.04, ruby: asan } exclude: # https://github.com/ruby/setup-ruby/issues/496 - { os: ubuntu-22.04, ruby: '2.2' } - # These old Rubies fail to compile on macos-arm-oss (macOS 13, arm64), which is used for ruby/ruby-builder + - { os: ubuntu-24.04, ruby: '1.9' } + - { os: ubuntu-24.04, ruby: '2.2' } + # These old Rubies fail to compile on macOS arm64 - { os: macos-14, ruby: '1.9' } - { os: macos-14, ruby: '2.0' } - { os: macos-14, ruby: '2.1' } @@ -41,25 +44,27 @@ jobs: - { os: macos-14, ruby: '2.3' } - { os: macos-14, ruby: '2.4' } - { os: macos-14, ruby: '2.5' } - - { os: macos-arm-oss, ruby: '1.9' } - - { os: macos-arm-oss, ruby: '2.0' } - - { os: macos-arm-oss, ruby: '2.1' } - - { os: macos-arm-oss, ruby: '2.2' } - - { os: macos-arm-oss, ruby: '2.3' } - - { os: macos-arm-oss, ruby: '2.4' } - - { os: macos-arm-oss, ruby: '2.5' } - # Windows + - { os: macos-15, ruby: '1.9' } + - { os: macos-15, ruby: '2.0' } + - { os: macos-15, ruby: '2.1' } + - { os: macos-15, ruby: '2.2' } + - { os: macos-15, ruby: '2.3' } + - { os: macos-15, ruby: '2.4' } + - { os: macos-15, ruby: '2.5' } + # Windows (note: previews are not available on Windows) - { os: windows-2019, ruby: '1.9' } - - { os: windows-2019, ruby: debug } - - { os: windows-2019, ruby: truffleruby } - - { os: windows-2019, ruby: truffleruby-head } - - { os: windows-2019, ruby: truffleruby+graalvm } - - { os: windows-2019, ruby: truffleruby+graalvm-head } - { os: windows-2022, ruby: '1.9' } + - { os: windows-2019, ruby: '3.4' } # 3.4.0-preview2 + - { os: windows-2022, ruby: '3.4' } # 3.4.0-preview2 + - { os: windows-2019, ruby: debug } - { os: windows-2022, ruby: debug } + - { os: windows-2019, ruby: truffleruby } - { os: windows-2022, ruby: truffleruby } + - { os: windows-2019, ruby: truffleruby-head } - { os: windows-2022, ruby: truffleruby-head } + - { os: windows-2019, ruby: truffleruby+graalvm } - { os: windows-2022, ruby: truffleruby+graalvm } + - { os: windows-2019, ruby: truffleruby+graalvm-head } - { os: windows-2022, ruby: truffleruby+graalvm-head } name: ${{ matrix.os }} ${{ matrix.ruby }} @@ -138,9 +143,14 @@ jobs: env: BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/gem_from_github.gemfile - - name: which ruby, bundle + - name: which ruby + shell: bash + run: which -a ruby + - name: which bundle shell: bash - run: which -a ruby bundle + run: which -a bundle + # https://github.com/ruby/setup-ruby/issues/658 + if: "matrix.ruby != 'mingw' && matrix.ruby != 'mswin' && matrix.ruby != 'ucrt'" - name: which rake run: which -a rake if: "!startsWith(matrix.os, 'windows')" @@ -180,8 +190,8 @@ jobs: fail-fast: false matrix: include: - - { ruby: '3.2', expected_rubygems_version: '3.5.3' } - - { ruby: '3.0', expected_rubygems_version: '3.5.3' } + - { ruby: '3.2', expected_rubygems_version: '3.6.1' } + - { ruby: '3.0', expected_rubygems_version: '3.5.23' } - { 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' } diff --git a/.github/workflows/update-v1-branch.yml b/.github/workflows/update-v1-branch.yml new file mode 100644 index 000000000..6382676df --- /dev/null +++ b/.github/workflows/update-v1-branch.yml @@ -0,0 +1,15 @@ +name: Update the v1 branch when a release is published manually +on: + release: + types: [published] +permissions: + contents: write # for git push + +jobs: + update_branch: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - run: git push origin HEAD:v1 diff --git a/.ruby-version b/.ruby-version deleted file mode 100644 index d7edb5686..000000000 --- a/.ruby-version +++ /dev/null @@ -1 +0,0 @@ -ruby-2.6.5 diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 20e3745aa..000000000 --- a/.tool-versions +++ /dev/null @@ -1,2 +0,0 @@ -nodejs 16.0.0 -ruby 2.7.0 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c18791452..19a2d3273 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -24,3 +24,7 @@ $ cp pre-commit .git/hooks/pre-commit This is entirely automated now since [this issue](https://github.com/ruby/setup-ruby/issues/254). If you do not see a new version more than 24 hours after it was released feel free to file an issue. + +## Release + +Maintainers can create a release automatically by running [this workflow](https://github.com/ruby/setup-ruby/actions/workflows/release.yml). diff --git a/README.md b/README.md index 16453ef18..8ac8c0f53 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,16 @@ 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.3.1, head, debug, mingw, mswin, ucrt | -| `jruby` | 9.1.17.0 - 9.4.6.0, head | -| `truffleruby` | 19.3.0 - 24.0.1, head | -| `truffleruby+graalvm` | 21.2.0 - 24.0.1, head | +| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.4.1, head, debug, mingw, mswin, ucrt | +| `jruby` | 9.1.17.0 - 9.4.9.0, head | +| `truffleruby` | 19.3.0 - 24.1.1, head | +| `truffleruby+graalvm` | 21.2.0 - 24.1.1, 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`). + +`ruby-asan` is the same as `ruby-head` but with AddressSanitizer (ASan) enabled, helpful for finding memory issues in native extensions. +Native extensions are automatically compiled with AddressSanitizer when using `ruby-asan`. +`ruby-asan` is currently only available on `ubuntu-24.04`. Regarding Windows ruby master builds, `mingw` is a MSYS2/MinGW build, `head` & `ucrt` are MSYS2/UCRT64 builds, and `mswin` is a MSVC/VS 2022 build. @@ -42,8 +46,8 @@ The action works on these [GitHub-hosted runners](https://docs.github.com/en/act | Operating System | Supported | | ---------------- | --------- | -| Ubuntu | `ubuntu-20.04`, `ubuntu-22.04` | -| macOS | `macos-11`, `macos-12`, `macos-13`, `macos-14` | +| Ubuntu | `ubuntu-20.04`, `ubuntu-22.04`, `ubuntu-24.04` | +| macOS | `macos-13` and newer versions | | Windows | `windows-2019`, `windows-2022` | The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder) @@ -51,10 +55,10 @@ and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2). The `mingw`, `ucrt` and `mswin` builds are generated by [ruby-loco](https://github.com/MSP-Greg/ruby-loco). `ruby-head` is generated by [ruby-dev-builder](https://github.com/ruby/ruby-dev-builder), `jruby-head` is generated by [jruby-dev-builder](https://github.com/ruby/jruby-dev-builder), -`truffleruby-head` is generated by [truffleruby-dev-builder](https://github.com/ruby/truffleruby-dev-builder) -and `truffleruby+graalvm` is generated by [graalvm-ce-dev-builds](https://github.com/graalvm/graalvm-ce-dev-builds). -The full list of available Ruby versions can be seen in [ruby-builder-versions.json](ruby-builder-versions.json) -for Ubuntu and macOS and in [windows-versions.json](windows-versions.json) for Windows. +`truffleruby-head` and `truffleruby+graalvm-head` are generated by [truffleruby-dev-builder](https://github.com/ruby/truffleruby-dev-builder). +The full list of available Ruby versions can be seen in [ruby-builder-versions.json](ruby-builder-versions.json) for Ubuntu and macOS +(although some combinations are not available, see [the full list](https://github.com/ruby/ruby-builder/releases/tag/toolcache)) +and in [windows-versions.json](windows-versions.json) for Windows. ## Usage @@ -70,7 +74,7 @@ jobs: - uses: actions/checkout@v4 - uses: ruby/setup-ruby@v1 with: - ruby-version: '3.3' # Not needed with a .ruby-version file + ruby-version: '3.3' # Not needed with a `.ruby-version` or `.tool-versions` bundler-cache: true # runs 'bundle install' and caches installed gems automatically - run: bundle exec rake ``` @@ -233,6 +237,7 @@ It is recommended to first get your build working on Ubuntu and macOS before try * For Ruby < 2.4, the DevKit MSYS tools are installed and prepended to the `Path`. * Use JRuby 9.2.20+ on Windows (older versions have [bugs](https://github.com/ruby/setup-ruby/issues/18#issuecomment-889072695)). * JRuby on Windows has multiple issues ([jruby/jruby#7106](https://github.com/jruby/jruby/issues/7106), [jruby/jruby#7182](https://github.com/jruby/jruby/issues/7182)). +* When compiling extension code, note that the packages required to build Ruby are included when using Windows 2022, but that Windows 2019 does not include all of them, and may require installing package(s). This can be done with [setup-ruby-pkgs](https://github.com/ruby/setup-ruby-pkgs) or via MSYS2's pacman. These packages may be required when installing or updating Ruby std-lib extension gems. ## Versioning diff --git a/common.js b/common.js index f15cf11f5..cb2819d36 100644 --- a/common.js +++ b/common.js @@ -8,7 +8,6 @@ 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 @@ -67,7 +66,7 @@ export async function time(name, block) { } export function isHeadVersion(rubyVersion) { - return ['head', 'debug', 'mingw', 'mswin', 'ucrt'].includes(rubyVersion) + return ['head', 'debug', 'mingw', 'mswin', 'ucrt', 'asan'].includes(rubyVersion) } export function isStableVersion(engine, rubyVersion) { @@ -162,73 +161,105 @@ export async function hashFile(file) { return hash.digest('hex') } +// macos is not listed explicitly, see below const GitHubHostedPlatforms = [ 'ubuntu-20.04-x64', 'ubuntu-22.04-x64', - 'macos-11-x64', - 'macos-12-x64', - 'macos-13-x64', - 'macos-13-arm64', - 'macos-14-x64', - 'macos-14-arm64', + 'ubuntu-24.04-x64', 'windows-2019-x64', 'windows-2022-x64', ] +// Precisely: whether we have builds for that platform and there are GitHub-hosted runners to test it +function isSupportedPlatform() { + const platform = getOSName() + switch (platform) { + case 'ubuntu': + return GitHubHostedPlatforms.includes(getOSNameVersionArch()) + case 'macos': + // See https://github.com/ruby/ruby-builder/blob/master/README.md#naming + // 13 on arm64 because of old macos-arm-oss runners + return (os.arch() === 'x64' && parseInt(getOSVersion()) >= 13) || + (os.arch() === 'arm64' && parseInt(getOSVersion()) >= 13) + case 'windows': + return GitHubHostedPlatforms.includes(getOSNameVersionArch()) + } +} + // 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()) + return inputs.selfHosted === 'true' || !isSupportedPlatform() } export function selfHostedRunnerReason() { if (inputs.selfHosted === 'true') { return 'the self-hosted input was set' - } else if (!GitHubHostedPlatforms.includes(getOSNameVersionArch())) { + } else if (!isSupportedPlatform()) { 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 osNameVersion = undefined +let osName = undefined +let osVersion = undefined -export function getOSNameVersion() { - if (osNameVersion !== undefined) { - return osNameVersion +export function getOSName() { + if (osName !== undefined) { + return osName } 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' + } else { + throw new Error(`Unknown platform ${platform}`) + } + + return osName +} + +export function getOSVersion() { + if (osVersion !== undefined) { + return osVersion + } + + const platform = os.platform() + if (platform === 'linux') { + const info = linuxOSInfo({mode: 'sync'}) + osVersion = info.version_id + } else if (platform === 'darwin') { + // See https://github.com/sindresorhus/macos-release/blob/main/index.js + const darwinVersion = parseInt(os.release().match(/^\d+/)[0]) + osVersion = `${darwinVersion - 9}` + } else if (platform === 'win32') { osVersion = findWindowsVersion() } else { throw new Error(`Unknown platform ${platform}`) } - osNameVersion = `${osName}-${osVersion}` - return osNameVersion + return osVersion +} + +export function getOSNameVersion() { + return `${getOSName()}-${getOSVersion()}` } export function getOSNameVersionArch() { - return `${getOSNameVersion()}-${os.arch()}` + return `${getOSName()}-${getOSVersion()}-${os.arch()}` } function findWindowsVersion() { - const version = os.version(); + const version = os.version() const match = version.match(/^Windows Server (\d+) Datacenter/) if (match) { return match[1] @@ -261,15 +292,14 @@ export function getRunnerToolCache() { // Rubies prebuilt by this action embed this path rather than using $RUNNER_TOOL_CACHE function getDefaultToolCachePath() { - const platform = getOSNameVersion() - 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' - } else { - throw new Error('Unknown platform') + const platform = getOSName() + switch (platform) { + case 'ubuntu': + return '/opt/hostedtoolcache' + case 'macos': + return '/Users/runner/hostedtoolcache' + case 'windows': + return 'C:\\hostedtoolcache\\windows' } } diff --git a/dist/index.js b/dist/index.js index ed2a838ef..bcc311096 100644 --- a/dist/index.js +++ b/dist/index.js @@ -17,7 +17,7 @@ const path = __nccwpck_require__(1017) const core = __nccwpck_require__(2186) const exec = __nccwpck_require__(1514) const cache = __nccwpck_require__(7799) -const common = __nccwpck_require__(3143) +const common = __nccwpck_require__(4717) const DEFAULT_CACHE_VERSION = '0' @@ -280,95 +280,53 @@ async function computeBaseKey(platform, engine, version, lockFile, cacheVersion) /***/ }), -/***/ 3143: +/***/ 4717: /***/ ((__unused_webpack_module, __webpack_exports__, __nccwpck_require__) => { "use strict"; -// ESM COMPAT FLAG __nccwpck_require__.r(__webpack_exports__); - -// EXPORTS -__nccwpck_require__.d(__webpack_exports__, { - "createToolCacheCompleteFile": () => (/* binding */ createToolCacheCompleteFile), - "drive": () => (/* binding */ drive), - "floatVersion": () => (/* binding */ floatVersion), - "getOSNameVersion": () => (/* binding */ getOSNameVersion), - "getOSNameVersionArch": () => (/* binding */ getOSNameVersionArch), - "getRunnerToolCache": () => (/* binding */ getRunnerToolCache), - "getToolCachePath": () => (/* binding */ getToolCachePath), - "getToolCacheRubyPrefix": () => (/* binding */ getToolCacheRubyPrefix), - "hasBundlerDefaultGem": () => (/* binding */ hasBundlerDefaultGem), - "hashFile": () => (/* binding */ hashFile), - "inputs": () => (/* binding */ inputs), - "isBundler1Default": () => (/* binding */ isBundler1Default), - "isBundler2Default": () => (/* binding */ isBundler2Default), - "isBundler2dot2Default": () => (/* binding */ isBundler2dot2Default), - "isHeadVersion": () => (/* binding */ isHeadVersion), - "isSelfHostedRunner": () => (/* binding */ isSelfHostedRunner), - "isStableVersion": () => (/* binding */ isStableVersion), - "measure": () => (/* binding */ measure), - "partition": () => (/* binding */ partition), - "selfHostedRunnerReason": () => (/* binding */ selfHostedRunnerReason), - "setupPath": () => (/* binding */ setupPath), - "shouldUseToolCache": () => (/* binding */ shouldUseToolCache), - "targetRubyVersion": () => (/* binding */ targetRubyVersion), - "time": () => (/* binding */ time), - "toolCacheCompleteFile": () => (/* binding */ toolCacheCompleteFile), - "toolCacheFind": () => (/* binding */ toolCacheFind), - "win2nix": () => (/* binding */ win2nix), - "windows": () => (/* binding */ windows) -}); - -;// CONCATENATED MODULE: external "node:os" -const external_node_os_namespaceObject = require("node:os"); -;// CONCATENATED MODULE: ./node_modules/macos-release/index.js - - -const nameMap = new Map([ - [23, ['Sonoma', '14']], - [22, ['Ventura', '13']], - [21, ['Monterey', '12']], - [20, ['Big Sur', '11']], - [19, ['Catalina', '10.15']], - [18, ['Mojave', '10.14']], - [17, ['High Sierra', '10.13']], - [16, ['Sierra', '10.12']], - [15, ['El Capitan', '10.11']], - [14, ['Yosemite', '10.10']], - [13, ['Mavericks', '10.9']], - [12, ['Mountain Lion', '10.8']], - [11, ['Lion', '10.7']], - [10, ['Snow Leopard', '10.6']], - [9, ['Leopard', '10.5']], - [8, ['Tiger', '10.4']], - [7, ['Panther', '10.3']], - [6, ['Jaguar', '10.2']], - [5, ['Puma', '10.1']], -]); - -function macosRelease(release) { - release = Number((release || external_node_os_namespaceObject.release()).split('.')[0]); - - const [name, version] = nameMap.get(release) || ['Unknown', '']; - - return { - name, - version, - }; -} - -;// CONCATENATED MODULE: ./common.js +/* harmony export */ __nccwpck_require__.d(__webpack_exports__, { +/* harmony export */ "windows": () => (/* binding */ windows), +/* harmony export */ "drive": () => (/* binding */ drive), +/* harmony export */ "inputs": () => (/* binding */ inputs), +/* harmony export */ "partition": () => (/* binding */ partition), +/* harmony export */ "measure": () => (/* binding */ measure), +/* harmony export */ "time": () => (/* binding */ time), +/* harmony export */ "isHeadVersion": () => (/* binding */ isHeadVersion), +/* harmony export */ "isStableVersion": () => (/* binding */ isStableVersion), +/* harmony export */ "hasBundlerDefaultGem": () => (/* binding */ hasBundlerDefaultGem), +/* harmony export */ "isBundler1Default": () => (/* binding */ isBundler1Default), +/* harmony export */ "isBundler2Default": () => (/* binding */ isBundler2Default), +/* harmony export */ "isBundler2dot2Default": () => (/* binding */ isBundler2dot2Default), +/* harmony export */ "targetRubyVersion": () => (/* binding */ targetRubyVersion), +/* harmony export */ "floatVersion": () => (/* binding */ floatVersion), +/* harmony export */ "hashFile": () => (/* binding */ hashFile), +/* harmony export */ "isSelfHostedRunner": () => (/* binding */ isSelfHostedRunner), +/* harmony export */ "selfHostedRunnerReason": () => (/* binding */ selfHostedRunnerReason), +/* harmony export */ "getOSName": () => (/* binding */ getOSName), +/* harmony export */ "getOSVersion": () => (/* binding */ getOSVersion), +/* harmony export */ "getOSNameVersion": () => (/* binding */ getOSNameVersion), +/* harmony export */ "getOSNameVersionArch": () => (/* binding */ getOSNameVersionArch), +/* harmony export */ "shouldUseToolCache": () => (/* binding */ shouldUseToolCache), +/* harmony export */ "getToolCachePath": () => (/* binding */ getToolCachePath), +/* harmony export */ "getRunnerToolCache": () => (/* binding */ getRunnerToolCache), +/* harmony export */ "toolCacheFind": () => (/* binding */ toolCacheFind), +/* harmony export */ "getToolCacheRubyPrefix": () => (/* binding */ getToolCacheRubyPrefix), +/* harmony export */ "toolCacheCompleteFile": () => (/* binding */ toolCacheCompleteFile), +/* harmony export */ "createToolCacheCompleteFile": () => (/* binding */ createToolCacheCompleteFile), +/* harmony export */ "win2nix": () => (/* binding */ win2nix), +/* harmony export */ "setupPath": () => (/* binding */ setupPath) +/* harmony export */ }); const os = __nccwpck_require__(2037) const path = __nccwpck_require__(1017) const fs = __nccwpck_require__(7147) const util = __nccwpck_require__(3837) const stream = __nccwpck_require__(2781) -const common_crypto = __nccwpck_require__(6113) +const crypto = __nccwpck_require__(6113) const core = __nccwpck_require__(2186) const tc = __nccwpck_require__(7784) const { performance } = __nccwpck_require__(4074) const linuxOSInfo = __nccwpck_require__(8487) -; const windows = (os.platform() === 'win32') // Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14 @@ -427,7 +385,7 @@ async function time(name, block) { } function isHeadVersion(rubyVersion) { - return ['head', 'debug', 'mingw', 'mswin', 'ucrt'].includes(rubyVersion) + return ['head', 'debug', 'mingw', 'mswin', 'ucrt', 'asan'].includes(rubyVersion) } function isStableVersion(engine, rubyVersion) { @@ -516,79 +474,111 @@ function floatVersion(rubyVersion) { async function hashFile(file) { // See https://github.com/actions/runner/blob/master/src/Misc/expressionFunc/hashFiles/src/hashFiles.ts - const hash = common_crypto.createHash('sha256') + const hash = crypto.createHash('sha256') const pipeline = util.promisify(stream.pipeline) await pipeline(fs.createReadStream(file), hash) return hash.digest('hex') } +// macos is not listed explicitly, see below const GitHubHostedPlatforms = [ 'ubuntu-20.04-x64', 'ubuntu-22.04-x64', - 'macos-11-x64', - 'macos-12-x64', - 'macos-13-x64', - 'macos-13-arm64', - 'macos-14-x64', - 'macos-14-arm64', + 'ubuntu-24.04-x64', 'windows-2019-x64', 'windows-2022-x64', ] +// Precisely: whether we have builds for that platform and there are GitHub-hosted runners to test it +function isSupportedPlatform() { + const platform = getOSName() + switch (platform) { + case 'ubuntu': + return GitHubHostedPlatforms.includes(getOSNameVersionArch()) + case 'macos': + // See https://github.com/ruby/ruby-builder/blob/master/README.md#naming + // 13 on arm64 because of old macos-arm-oss runners + return (os.arch() === 'x64' && parseInt(getOSVersion()) >= 13) || + (os.arch() === 'arm64' && parseInt(getOSVersion()) >= 13) + case 'windows': + return GitHubHostedPlatforms.includes(getOSNameVersionArch()) + } +} + // Actually a self-hosted runner for which the OS and OS version does not correspond to a GitHub-hosted runner image, function isSelfHostedRunner() { if (inputs.selfHosted === undefined) { throw new Error('inputs.selfHosted should have been already set') } - return inputs.selfHosted === 'true' || - !GitHubHostedPlatforms.includes(getOSNameVersionArch()) + return inputs.selfHosted === 'true' || !isSupportedPlatform() } function selfHostedRunnerReason() { if (inputs.selfHosted === 'true') { return 'the self-hosted input was set' - } else if (!GitHubHostedPlatforms.includes(getOSNameVersionArch())) { + } else if (!isSupportedPlatform()) { 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 osNameVersion = undefined +let osName = undefined +let osVersion = undefined -function getOSNameVersion() { - if (osNameVersion !== undefined) { - return osNameVersion +function getOSName() { + if (osName !== undefined) { + return osName } 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' + } else { + throw new Error(`Unknown platform ${platform}`) + } + + return osName +} + +function getOSVersion() { + if (osVersion !== undefined) { + return osVersion + } + + const platform = os.platform() + if (platform === 'linux') { + const info = linuxOSInfo({mode: 'sync'}) + osVersion = info.version_id + } else if (platform === 'darwin') { + // See https://github.com/sindresorhus/macos-release/blob/main/index.js + const darwinVersion = parseInt(os.release().match(/^\d+/)[0]) + osVersion = `${darwinVersion - 9}` + } else if (platform === 'win32') { osVersion = findWindowsVersion() } else { throw new Error(`Unknown platform ${platform}`) } - osNameVersion = `${osName}-${osVersion}` - return osNameVersion + return osVersion +} + +function getOSNameVersion() { + return `${getOSName()}-${getOSVersion()}` } function getOSNameVersionArch() { - return `${getOSNameVersion()}-${os.arch()}` + return `${getOSName()}-${getOSVersion()}-${os.arch()}` } function findWindowsVersion() { - const version = os.version(); + const version = os.version() const match = version.match(/^Windows Server (\d+) Datacenter/) if (match) { return match[1] @@ -621,15 +611,14 @@ function getRunnerToolCache() { // Rubies prebuilt by this action embed this path rather than using $RUNNER_TOOL_CACHE function getDefaultToolCachePath() { - const platform = getOSNameVersion() - 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' - } else { - throw new Error('Unknown platform') + const platform = getOSName() + switch (platform) { + case 'ubuntu': + return '/opt/hostedtoolcache' + case 'macos': + return '/Users/runner/hostedtoolcache' + case 'windows': + return 'C:\\hostedtoolcache\\windows' } } @@ -64961,7 +64950,7 @@ const core = __nccwpck_require__(2186) const exec = __nccwpck_require__(1514) const io = __nccwpck_require__(7436) const tc = __nccwpck_require__(7784) -const common = __nccwpck_require__(3143) +const common = __nccwpck_require__(4717) const rubyBuilderVersions = __nccwpck_require__(5959) const builderReleaseTag = 'toolcache' @@ -65007,44 +64996,29 @@ async function install(platform, engine, version) { if (!inToolCache) { await io.mkdirP(rubyPrefix) - if (engine === 'truffleruby+graalvm') { - await installWithRubyBuild(engine, version, rubyPrefix) - } else { - await downloadAndExtract(platform, engine, version, rubyPrefix) - } - } - - // 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') + await downloadAndExtract(platform, engine, version, rubyPrefix) } return rubyPrefix } -async function installWithRubyBuild(engine, version, rubyPrefix) { - const tmp = process.env['RUNNER_TEMP'] || os.tmpdir() - const rubyBuildDir = path.join(tmp, 'ruby-build-for-setup-ruby') - await common.measure('Cloning ruby-build', async () => { - await exec.exec('git', ['clone', 'https://github.com/rbenv/ruby-build.git', rubyBuildDir]) - }) - - const rubyName = `${engine}-${version === 'head' ? 'dev' : version}` - await common.measure(`Installing ${engine}-${version} with ruby-build`, async () => { - await exec.exec(`${rubyBuildDir}/bin/ruby-build`, [rubyName, rubyPrefix]) - }) - - await io.rmRF(rubyBuildDir) -} - async function downloadAndExtract(platform, engine, version, rubyPrefix) { const parentDir = path.dirname(rubyPrefix) const downloadPath = await common.measure('Downloading Ruby', async () => { const url = getDownloadURL(platform, engine, version) console.log(url) - return await tc.downloadTool(url) + try { + return await tc.downloadTool(url) + } catch (error) { + if (error.message.includes('404')) { + throw new Error(`Unavailable version ${version} for ${engine} on ${platform} + You can request it at https://github.com/ruby/setup-ruby/issues + Cause: ${error.message}`) + } else { + throw error + } + } }) await common.measure('Extracting Ruby', async () => { @@ -65081,7 +65055,11 @@ function getDownloadURL(platform, engine, version) { } function getLatestHeadBuildURL(platform, engine, version) { - return `https://github.com/ruby/${engine}-dev-builder/releases/latest/download/${engine}-${version}-${platform}.tar.gz` + var repo = `${engine}-dev-builder` + if (engine === 'truffleruby+graalvm') { + repo = 'truffleruby-dev-builder' + } + return `https://github.com/ruby/${repo}/releases/latest/download/${engine}-${version}-${platform}.tar.gz` } @@ -65095,7 +65073,7 @@ __nccwpck_require__.r(__webpack_exports__); /* harmony export */ __nccwpck_require__.d(__webpack_exports__, { /* harmony export */ "rubygemsUpdate": () => (/* binding */ rubygemsUpdate) /* harmony export */ }); -const common = __nccwpck_require__(3143) +const common = __nccwpck_require__(4717) const path = __nccwpck_require__(1017) const exec = __nccwpck_require__(1514) const semver = __nccwpck_require__(1383) @@ -65136,8 +65114,10 @@ async function rubygemsLatest(gem, platform, engine, rubyVersion) { const floatVersion = common.floatVersion(rubyVersion) if (common.isHeadVersion(rubyVersion)) { console.log('Ruby master builds use included RubyGems') - } else if (floatVersion >= 3.0) { + } else if (floatVersion >= 3.1) { await exec.exec(gem, ['update', '--system']) + } else if (floatVersion >= 3.0) { + await exec.exec(gem, ['update', '--system', '3.5.23']) } else if (floatVersion >= 2.6) { await exec.exec(gem, ['update', '--system', '3.4.22']) } else if (floatVersion >= 2.3) { @@ -65180,7 +65160,7 @@ const core = __nccwpck_require__(2186) const exec = __nccwpck_require__(1514) const io = __nccwpck_require__(7436) const tc = __nccwpck_require__(7784) -const common = __nccwpck_require__(3143) +const common = __nccwpck_require__(4717) const rubyInstallerVersions = __nccwpck_require__(6459) const drive = common.drive @@ -65650,7 +65630,7 @@ module.exports = JSON.parse('[[[0,44],"disallowed_STD3_valid"],[[45,46],"valid"] /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"ruby":["1.9.3-p551","2.0.0-p648","2.1.9","2.2.10","2.3.0","2.3.1","2.3.2","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.4.0","2.4.1","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.4.7","2.4.9","2.4.10","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.5.8","2.5.9","2.6.0","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.6.6","2.6.7","2.6.8","2.6.9","2.6.10","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.7","3.1.0-preview1","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","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.2.4","3.3.0-preview1","3.3.0-preview2","3.3.0-preview3","3.3.0-rc1","3.3.0","3.3.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.3.11.0","9.3.13.0","9.3.14.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","9.4.6.0","head"],"truffleruby":["19.3.0","19.3.1","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","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.1.2","24.0.0","24.0.1","head"],"truffleruby+graalvm":["21.2.0","21.3.0","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.1.2","24.0.0","24.0.1","head"]}'); +module.exports = JSON.parse('{"ruby":["1.9.3-p551","2.0.0-p648","2.1.9","2.2.10","2.3.0","2.3.1","2.3.2","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.4.0","2.4.1","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.4.7","2.4.9","2.4.10","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.5.8","2.5.9","2.6.0","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.6.6","2.6.7","2.6.8","2.6.9","2.6.10","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.7","3.1.0-preview1","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","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.2.4","3.2.5","3.2.6","3.3.0-preview1","3.3.0-preview2","3.3.0-preview3","3.3.0-rc1","3.3.0","3.3.1","3.3.2","3.3.3","3.3.4","3.3.5","3.3.6","3.4.0-preview1","3.4.0-preview2","3.4.0-rc1","3.4.0","3.4.1","head","debug","asan"],"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.3.11.0","9.3.13.0","9.3.14.0","9.3.15.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","9.4.6.0","9.4.7.0","9.4.8.0","9.4.9.0","head"],"truffleruby":["19.3.0","19.3.1","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","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.1.2","24.0.0","24.0.1","24.0.2","24.1.0","24.1.1","head"],"truffleruby+graalvm":["21.2.0","21.3.0","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.1.2","24.0.0","24.0.1","24.0.2","24.1.0","24.1.1","head"]}'); /***/ }), @@ -65658,7 +65638,7 @@ module.exports = JSON.parse('{"ruby":["1.9.3-p551","2.0.0-p648","2.1.9","2.2.10" /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"2.0.0":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.0.0-p648/ruby-2.0.0-p648-x64-mingw32.7z","2.1.9":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.1.9/ruby-2.1.9-x64-mingw32.7z","2.2.6":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.2.6/ruby-2.2.6-x64-mingw32.7z","2.3.0":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.0/ruby-2.3.0-x64-mingw32.7z","2.3.1":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.1/ruby-2.3.1-x64-mingw32.7z","2.3.3":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.3/ruby-2.3.3-x64-mingw32.7z","2.4.1":"https://github.com/oneclick/rubyinstaller2/releases/download/2.4.1-2/rubyinstaller-2.4.1-2-x64.7z","2.4.2":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.2-2/rubyinstaller-2.4.2-2-x64.7z","2.4.3":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.3-2/rubyinstaller-2.4.3-2-x64.7z","2.4.4":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.4-2/rubyinstaller-2.4.4-2-x64.7z","2.4.5":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.5-1/rubyinstaller-2.4.5-1-x64.7z","2.4.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.6-1/rubyinstaller-2.4.6-1-x64.7z","2.4.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.7-1/rubyinstaller-2.4.7-1-x64.7z","2.4.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.9-1/rubyinstaller-2.4.9-1-x64.7z","2.4.10":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.10-1/rubyinstaller-2.4.10-1-x64.7z","2.5.0":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.0-2/rubyinstaller-2.5.0-2-x64.7z","2.5.1":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.1-2/rubyinstaller-2.5.1-2-x64.7z","2.5.3":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.3-1/rubyinstaller-2.5.3-1-x64.7z","2.5.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.5-1/rubyinstaller-2.5.5-1-x64.7z","2.5.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.6-1/rubyinstaller-2.5.6-1-x64.7z","2.5.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.7-1/rubyinstaller-2.5.7-1-x64.7z","2.5.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.8-2/rubyinstaller-2.5.8-2-x64.7z","2.5.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.9-1/rubyinstaller-2.5.9-1-x64.7z","2.6.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.0-1/rubyinstaller-2.6.0-1-x64.7z","2.6.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.1-1/rubyinstaller-2.6.1-1-x64.7z","2.6.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.2-1/rubyinstaller-2.6.2-1-x64.7z","2.6.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z","2.6.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z","2.6.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z","2.6.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.6-2/rubyinstaller-2.6.6-2-x64.7z","2.6.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.7-1/rubyinstaller-2.6.7-1-x64.7z","2.6.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.8-1/rubyinstaller-2.6.8-1-x64.7z","2.6.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x64.7z","2.6.10":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.10-1/rubyinstaller-2.6.10-1-x64.7z","2.7.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z","2.7.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.1-1/rubyinstaller-2.7.1-1-x64.7z","2.7.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.2-1/rubyinstaller-2.7.2-1-x64.7z","2.7.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.3-1/rubyinstaller-2.7.3-1-x64.7z","2.7.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.4-1/rubyinstaller-2.7.4-1-x64.7z","2.7.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.5-1/rubyinstaller-2.7.5-1-x64.7z","2.7.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.6-1/rubyinstaller-2.7.6-1-x64.7z","2.7.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.7-1/rubyinstaller-2.7.7-1-x64.7z","2.7.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x64.7z","3.0.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x64.7z","3.0.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.1-1/rubyinstaller-3.0.1-1-x64.7z","3.0.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.2-1/rubyinstaller-3.0.2-1-x64.7z","3.0.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.3-1/rubyinstaller-3.0.3-1-x64.7z","3.0.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.4-1/rubyinstaller-3.0.4-1-x64.7z","3.0.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.5-1/rubyinstaller-3.0.5-1-x64.7z","3.0.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.6-1/rubyinstaller-3.0.6-1-x64.7z","3.1.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.0-1/rubyinstaller-3.1.0-1-x64.7z","3.1.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-3.1.1-1-x64.7z","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.1.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.4-1/rubyinstaller-3.1.4-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.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z","3.2.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.3-1/rubyinstaller-3.2.3-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","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","ucrt":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z"}'); +module.exports = JSON.parse('{"2.0.0":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.0.0-p648/ruby-2.0.0-p648-x64-mingw32.7z","2.1.9":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.1.9/ruby-2.1.9-x64-mingw32.7z","2.2.6":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.2.6/ruby-2.2.6-x64-mingw32.7z","2.3.0":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.0/ruby-2.3.0-x64-mingw32.7z","2.3.1":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.1/ruby-2.3.1-x64-mingw32.7z","2.3.3":"https://github.com/oneclick/rubyinstaller/releases/download/ruby-2.3.3/ruby-2.3.3-x64-mingw32.7z","2.4.1":"https://github.com/oneclick/rubyinstaller2/releases/download/2.4.1-2/rubyinstaller-2.4.1-2-x64.7z","2.4.2":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.2-2/rubyinstaller-2.4.2-2-x64.7z","2.4.3":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.3-2/rubyinstaller-2.4.3-2-x64.7z","2.4.4":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.4-2/rubyinstaller-2.4.4-2-x64.7z","2.4.5":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.4.5-1/rubyinstaller-2.4.5-1-x64.7z","2.4.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.6-1/rubyinstaller-2.4.6-1-x64.7z","2.4.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.7-1/rubyinstaller-2.4.7-1-x64.7z","2.4.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.9-1/rubyinstaller-2.4.9-1-x64.7z","2.4.10":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.4.10-1/rubyinstaller-2.4.10-1-x64.7z","2.5.0":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.0-2/rubyinstaller-2.5.0-2-x64.7z","2.5.1":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.1-2/rubyinstaller-2.5.1-2-x64.7z","2.5.3":"https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-2.5.3-1/rubyinstaller-2.5.3-1-x64.7z","2.5.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.5-1/rubyinstaller-2.5.5-1-x64.7z","2.5.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.6-1/rubyinstaller-2.5.6-1-x64.7z","2.5.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.7-1/rubyinstaller-2.5.7-1-x64.7z","2.5.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.8-2/rubyinstaller-2.5.8-2-x64.7z","2.5.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.5.9-1/rubyinstaller-2.5.9-1-x64.7z","2.6.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.0-1/rubyinstaller-2.6.0-1-x64.7z","2.6.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.1-1/rubyinstaller-2.6.1-1-x64.7z","2.6.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.2-1/rubyinstaller-2.6.2-1-x64.7z","2.6.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.3-1/rubyinstaller-2.6.3-1-x64.7z","2.6.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.4-1/rubyinstaller-2.6.4-1-x64.7z","2.6.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.5-1/rubyinstaller-2.6.5-1-x64.7z","2.6.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.6-2/rubyinstaller-2.6.6-2-x64.7z","2.6.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.7-1/rubyinstaller-2.6.7-1-x64.7z","2.6.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.8-1/rubyinstaller-2.6.8-1-x64.7z","2.6.9":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.9-1/rubyinstaller-2.6.9-1-x64.7z","2.6.10":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.6.10-1/rubyinstaller-2.6.10-1-x64.7z","2.7.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.0-1/rubyinstaller-2.7.0-1-x64.7z","2.7.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.1-1/rubyinstaller-2.7.1-1-x64.7z","2.7.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.2-1/rubyinstaller-2.7.2-1-x64.7z","2.7.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.3-1/rubyinstaller-2.7.3-1-x64.7z","2.7.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.4-1/rubyinstaller-2.7.4-1-x64.7z","2.7.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.5-1/rubyinstaller-2.7.5-1-x64.7z","2.7.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.6-1/rubyinstaller-2.7.6-1-x64.7z","2.7.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.7-1/rubyinstaller-2.7.7-1-x64.7z","2.7.8":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-2.7.8-1/rubyinstaller-2.7.8-1-x64.7z","3.0.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.0-1/rubyinstaller-3.0.0-1-x64.7z","3.0.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.1-1/rubyinstaller-3.0.1-1-x64.7z","3.0.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.2-1/rubyinstaller-3.0.2-1-x64.7z","3.0.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.3-1/rubyinstaller-3.0.3-1-x64.7z","3.0.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.4-1/rubyinstaller-3.0.4-1-x64.7z","3.0.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.5-1/rubyinstaller-3.0.5-1-x64.7z","3.0.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.6-1/rubyinstaller-3.0.6-1-x64.7z","3.0.7":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.7-1/rubyinstaller-3.0.7-1-x64.7z","3.1.0":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.0-1/rubyinstaller-3.1.0-1-x64.7z","3.1.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-3.1.1-1-x64.7z","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.1.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.4-1/rubyinstaller-3.1.4-1-x64.7z","3.1.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.5-1/rubyinstaller-3.1.5-1-x64.7z","3.1.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-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.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z","3.2.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.3-1/rubyinstaller-3.2.3-1-x64.7z","3.2.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.4-1/rubyinstaller-3.2.4-1-x64.7z","3.2.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.5-1/rubyinstaller-3.2.5-1-x64.7z","3.2.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.6-1/rubyinstaller-3.2.6-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","3.3.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.1-1/rubyinstaller-3.3.1-1-x64.7z","3.3.2":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.2-1/rubyinstaller-3.3.2-1-x64.7z","3.3.3":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.3-1/rubyinstaller-3.3.3-1-x64.7z","3.3.4":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.4-1/rubyinstaller-3.3.4-1-x64.7z","3.3.5":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.5-1/rubyinstaller-3.3.5-1-x64.7z","3.3.6":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.6-2/rubyinstaller-3.3.6-2-x64.7z","3.4.1":"https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-1/rubyinstaller-3.4.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","ucrt":"https://github.com/MSP-Greg/ruby-loco/releases/download/ruby-master/ruby-ucrt.7z"}'); /***/ }) @@ -65742,7 +65722,7 @@ const fs = __nccwpck_require__(7147) const path = __nccwpck_require__(1017) const core = __nccwpck_require__(2186) const exec = __nccwpck_require__(1514) -const common = __nccwpck_require__(3143) +const common = __nccwpck_require__(4717) const rubygems = __nccwpck_require__(160) const bundler = __nccwpck_require__(1641) @@ -65797,8 +65777,14 @@ async function setupRuby(options = {}) { installer = __nccwpck_require__(9974) } - const engineVersions = installer.getAvailableVersions(platform, engine) - const version = validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVersion) + let version + if (common.isSelfHostedRunner()) { + // The list of available Rubies in the hostedtoolcache is unrelated to getAvailableVersions() + version = parsedVersion + } else { + const engineVersions = installer.getAvailableVersions(platform, engine) + version = validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVersion) + } createGemRC(engine, version) envPreInstall() @@ -65898,11 +65884,35 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVe version = found } else { throw new Error(`Unknown version ${parsedVersion} for ${engine} on ${platform} - available versions for ${engine} on ${platform}: ${engineVersions.join(', ')} + Available versions for ${engine} on ${platform}: ${engineVersions.join(', ')} Make sure you use the latest version of the action with - uses: ruby/setup-ruby@v1`) } } + // Well known version-platform combinations which do not work: + if (engine === 'ruby' && platform.startsWith('macos') && os.arch() === 'arm64' && common.floatVersion(version) < 2.6) { + throw new Error(`CRuby < 2.6 does not support macos-arm64. + Either use a newer Ruby version or use a macOS image running on amd64, e.g., macos-13. + Note that GitHub changed the meaning of macos-latest from macos-12 (amd64) to macos-14 (arm64): + https://github.blog/changelog/2024-04-01-macos-14-sonoma-is-generally-available-and-the-latest-macos-runner-image/ + + If you are using a matrix of Ruby versions, a good solution is to run only < 2.6 on amd64, like so: + matrix: + ruby: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3'] + os: [ ubuntu-latest, macos-latest ] + # CRuby < 2.6 does not support macos-arm64, so test those on amd64 instead + exclude: + - { os: macos-latest, ruby: '2.4' } + - { os: macos-latest, ruby: '2.5' } + include: + - { os: macos-13, ruby: '2.4' } + - { os: macos-13, ruby: '2.5' } + + But of course you should consider dropping support for these long-EOL Rubies, which cannot even be built on recent macOS machines.`) + } else if (engine === 'truffleruby' && platform.startsWith('windows')) { + throw new Error('TruffleRuby does not currently support Windows.') + } + return version } diff --git a/index.js b/index.js index 743616a5c..eb71b4ed2 100644 --- a/index.js +++ b/index.js @@ -58,8 +58,14 @@ export async function setupRuby(options = {}) { installer = require('./ruby-builder') } - const engineVersions = installer.getAvailableVersions(platform, engine) - const version = validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVersion) + let version + if (common.isSelfHostedRunner()) { + // The list of available Rubies in the hostedtoolcache is unrelated to getAvailableVersions() + version = parsedVersion + } else { + const engineVersions = installer.getAvailableVersions(platform, engine) + version = validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVersion) + } createGemRC(engine, version) envPreInstall() @@ -159,11 +165,35 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVe version = found } else { throw new Error(`Unknown version ${parsedVersion} for ${engine} on ${platform} - available versions for ${engine} on ${platform}: ${engineVersions.join(', ')} + Available versions for ${engine} on ${platform}: ${engineVersions.join(', ')} Make sure you use the latest version of the action with - uses: ruby/setup-ruby@v1`) } } + // Well known version-platform combinations which do not work: + if (engine === 'ruby' && platform.startsWith('macos') && os.arch() === 'arm64' && common.floatVersion(version) < 2.6) { + throw new Error(`CRuby < 2.6 does not support macos-arm64. + Either use a newer Ruby version or use a macOS image running on amd64, e.g., macos-13. + Note that GitHub changed the meaning of macos-latest from macos-12 (amd64) to macos-14 (arm64): + https://github.blog/changelog/2024-04-01-macos-14-sonoma-is-generally-available-and-the-latest-macos-runner-image/ + + If you are using a matrix of Ruby versions, a good solution is to run only < 2.6 on amd64, like so: + matrix: + ruby: ['2.4', '2.5', '2.6', '2.7', '3.0', '3.1', '3.2', '3.3'] + os: [ ubuntu-latest, macos-latest ] + # CRuby < 2.6 does not support macos-arm64, so test those on amd64 instead + exclude: + - { os: macos-latest, ruby: '2.4' } + - { os: macos-latest, ruby: '2.5' } + include: + - { os: macos-13, ruby: '2.4' } + - { os: macos-13, ruby: '2.5' } + + But of course you should consider dropping support for these long-EOL Rubies, which cannot even be built on recent macOS machines.`) + } else if (engine === 'truffleruby' && platform.startsWith('windows')) { + throw new Error('TruffleRuby does not currently support Windows.') + } + return version } diff --git a/package.json b/package.json index 8d3b30a75..016861d3f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,6 @@ "@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": { diff --git a/release.rb b/release.rb new file mode 100644 index 000000000..4bf822ba9 --- /dev/null +++ b/release.rb @@ -0,0 +1,17 @@ +require 'json' + +def run(command_line) + puts "$ #{command_line}" + output = `#{command_line}` + puts output + raise $?.inspect unless $?.success? + output +end + +latest_release_tag = run 'gh release view --json tagName' +latest_release_tag = JSON.load(latest_release_tag).fetch('tagName') + +raise latest_release_tag unless latest_release_tag =~ /\Av(\d+).(\d+).(\d+)\z/ +tag = "v#{$1}.#{Integer($2)+1}.0" + +run "gh release create --generate-notes --latest #{tag}" diff --git a/ruby-builder-versions.json b/ruby-builder-versions.json index 75b5ba837..93a4f61bb 100644 --- a/ruby-builder-versions.json +++ b/ruby-builder-versions.json @@ -10,16 +10,17 @@ "2.6.0", "2.6.1", "2.6.2", "2.6.3", "2.6.4", "2.6.5", "2.6.6", "2.6.7", "2.6.8", "2.6.9", "2.6.10", "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.7", - "3.1.0-preview1", "3.1.0", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", - "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.2.4", - "3.3.0-preview1", "3.3.0-preview2", "3.3.0-preview3", "3.3.0-rc1", "3.3.0", "3.3.1", - "head", "debug" + "3.1.0-preview1", "3.1.0", "3.1.1", "3.1.2", "3.1.3", "3.1.4", "3.1.5", "3.1.6", + "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.2.4", "3.2.5", "3.2.6", + "3.3.0-preview1", "3.3.0-preview2", "3.3.0-preview3", "3.3.0-rc1", "3.3.0", "3.3.1", "3.3.2", "3.3.3", "3.3.4", "3.3.5", "3.3.6", + "3.4.0-preview1", "3.4.0-preview2", "3.4.0-rc1", "3.4.0", "3.4.1", + "head", "debug", "asan" ], "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.3.11.0", "9.3.13.0", "9.3.14.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", "9.4.6.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.3.14.0", "9.3.15.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", "9.4.6.0", "9.4.7.0", "9.4.8.0", "9.4.9.0", "head" ], "truffleruby": [ @@ -28,14 +29,14 @@ "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", "23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.1.2", - "24.0.0", "24.0.1", + "24.0.0", "24.0.1", "24.0.2", "24.1.0", "24.1.1", "head" ], "truffleruby+graalvm": [ "21.2.0", "21.3.0", "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.1.2", - "24.0.0", "24.0.1", + "24.0.0", "24.0.1", "24.0.2", "24.1.0", "24.1.1", "head" ] } diff --git a/ruby-builder.js b/ruby-builder.js index 35148f563..dcafe620c 100644 --- a/ruby-builder.js +++ b/ruby-builder.js @@ -51,44 +51,29 @@ export async function install(platform, engine, version) { if (!inToolCache) { await io.mkdirP(rubyPrefix) - if (engine === 'truffleruby+graalvm') { - await installWithRubyBuild(engine, version, rubyPrefix) - } else { - await downloadAndExtract(platform, engine, version, rubyPrefix) - } - } - - // 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') + await downloadAndExtract(platform, engine, version, rubyPrefix) } return rubyPrefix } -async function installWithRubyBuild(engine, version, rubyPrefix) { - const tmp = process.env['RUNNER_TEMP'] || os.tmpdir() - const rubyBuildDir = path.join(tmp, 'ruby-build-for-setup-ruby') - await common.measure('Cloning ruby-build', async () => { - await exec.exec('git', ['clone', 'https://github.com/rbenv/ruby-build.git', rubyBuildDir]) - }) - - const rubyName = `${engine}-${version === 'head' ? 'dev' : version}` - await common.measure(`Installing ${engine}-${version} with ruby-build`, async () => { - await exec.exec(`${rubyBuildDir}/bin/ruby-build`, [rubyName, rubyPrefix]) - }) - - await io.rmRF(rubyBuildDir) -} - async function downloadAndExtract(platform, engine, version, rubyPrefix) { const parentDir = path.dirname(rubyPrefix) const downloadPath = await common.measure('Downloading Ruby', async () => { const url = getDownloadURL(platform, engine, version) console.log(url) - return await tc.downloadTool(url) + try { + return await tc.downloadTool(url) + } catch (error) { + if (error.message.includes('404')) { + throw new Error(`Unavailable version ${version} for ${engine} on ${platform} + You can request it at https://github.com/ruby/setup-ruby/issues + Cause: ${error.message}`) + } else { + throw error + } + } }) await common.measure('Extracting Ruby', async () => { @@ -125,5 +110,9 @@ function getDownloadURL(platform, engine, version) { } function getLatestHeadBuildURL(platform, engine, version) { - return `https://github.com/ruby/${engine}-dev-builder/releases/latest/download/${engine}-${version}-${platform}.tar.gz` + var repo = `${engine}-dev-builder` + if (engine === 'truffleruby+graalvm') { + repo = 'truffleruby-dev-builder' + } + return `https://github.com/ruby/${repo}/releases/latest/download/${engine}-${version}-${platform}.tar.gz` } diff --git a/rubygems.js b/rubygems.js index 9048b8e1e..f96cfca62 100644 --- a/rubygems.js +++ b/rubygems.js @@ -39,8 +39,10 @@ async function rubygemsLatest(gem, platform, engine, rubyVersion) { const floatVersion = common.floatVersion(rubyVersion) if (common.isHeadVersion(rubyVersion)) { console.log('Ruby master builds use included RubyGems') - } else if (floatVersion >= 3.0) { + } else if (floatVersion >= 3.1) { await exec.exec(gem, ['update', '--system']) + } else if (floatVersion >= 3.0) { + await exec.exec(gem, ['update', '--system', '3.5.23']) } else if (floatVersion >= 2.6) { await exec.exec(gem, ['update', '--system', '3.4.22']) } else if (floatVersion >= 2.3) { diff --git a/windows-versions.json b/windows-versions.json index c5a2952dc..c9c03f004 100644 --- a/windows-versions.json +++ b/windows-versions.json @@ -49,16 +49,29 @@ "3.0.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.4-1/rubyinstaller-3.0.4-1-x64.7z", "3.0.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.5-1/rubyinstaller-3.0.5-1-x64.7z", "3.0.6": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.6-1/rubyinstaller-3.0.6-1-x64.7z", + "3.0.7": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.0.7-1/rubyinstaller-3.0.7-1-x64.7z", "3.1.0": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.0-1/rubyinstaller-3.1.0-1-x64.7z", "3.1.1": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.1-1/rubyinstaller-3.1.1-1-x64.7z", "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.1.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.4-1/rubyinstaller-3.1.4-1-x64.7z", + "3.1.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.5-1/rubyinstaller-3.1.5-1-x64.7z", + "3.1.6": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.1.6-1/rubyinstaller-3.1.6-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.2": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.2-1/rubyinstaller-3.2.2-1-x64.7z", "3.2.3": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.3-1/rubyinstaller-3.2.3-1-x64.7z", + "3.2.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.4-1/rubyinstaller-3.2.4-1-x64.7z", + "3.2.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.5-1/rubyinstaller-3.2.5-1-x64.7z", + "3.2.6": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.2.6-1/rubyinstaller-3.2.6-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", + "3.3.1": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.1-1/rubyinstaller-3.3.1-1-x64.7z", + "3.3.2": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.2-1/rubyinstaller-3.3.2-1-x64.7z", + "3.3.3": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.3-1/rubyinstaller-3.3.3-1-x64.7z", + "3.3.4": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.4-1/rubyinstaller-3.3.4-1-x64.7z", + "3.3.5": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.5-1/rubyinstaller-3.3.5-1-x64.7z", + "3.3.6": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.6-2/rubyinstaller-3.3.6-2-x64.7z", + "3.4.1": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-1/rubyinstaller-3.4.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", diff --git a/yarn.lock b/yarn.lock index c9b970e7f..07a6a4cba 100644 --- a/yarn.lock +++ b/yarn.lock @@ -281,11 +281,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -macos-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-3.2.0.tgz#dcee82b6a4932971b1538dbf6f3aabc4a903b613" - integrity sha512-fSErXALFNsnowREYZ49XCdOHF8wOPWuFOGQrAhP7x5J/BqQv+B02cNsTykGpDgRVx43EKg++6ANmTaGTtW+hUA== - mime-db@1.52.0: version "1.52.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"