Compare commits

...
27 Commits
Author SHA1 Message Date
ruby-builder-bot 211ffaaa5f Add ruby-4.0.0-preview3 2025-12-18 10:32:52 +01:00
ruby-builder-bot f8d7259c7a Add ruby-3.4.8 2025-12-17 14:26:51 +01:00
Benoit Daloze ac793fdd38 When setting $JAVA_HOME also add $JAVA_HOME/bin to PATH
* See discussion in https://github.com/rake-compiler/rake-compiler/pull/247
  it is messy if that's not the case and also creates inconsistencies
  based on which Java tool/executable is used.
2025-12-13 21:06:12 +01:00
Benoit Daloze 5f8a775744 macos-13 is gone 2025-12-11 22:51:44 +01:00
dependabot[bot] 30a6546035 Bump actions/checkout from 5 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-11 22:47:42 +01:00
Benoit Daloze d697be2f83 Account for Bundler 4
* Fixes https://github.com/ruby/setup-ruby/issues/827
2025-12-05 20:42:13 +01:00
Benoit Daloze 8aeb6ff803 Test Ruby 4.0 previews 2025-11-17 15:27:57 +01:00
ruby-builder-bot 09e84e3b9d Add ruby-4.0.0-preview2 2025-11-17 15:27:57 +01:00
Benoit Daloze d5126b9b35 exec.exec() only accepts strings 2025-10-27 12:32:05 +01:00
Benoit Daloze 274049f8cf Use os.availableParallelism() instead of os.cpus().length
* As https://nodejs.org/api/os.html#oscpus says:
  os.cpus().length should not be used to calculate the amount of parallelism available to an application. Use os.availableParallelism() for this purpose.
2025-10-27 12:32:05 +01:00
Thomas Breland a96ff531da Scale bundler install jobs with CPU count up to 8
The number of jobs should scale with the runner CPU count, up to a
point. The bottleneck becomes network / disk I/O at very large numbers,
and 8 seems like a reasonable maximum based on my experience at this
time.
2025-10-27 12:32:05 +01:00
ruby-builder-bot 4ff6f3611a Update CRuby releases on Windows 2025-10-26 13:11:41 +01:00
ruby-builder-bot 5375105c88 Add ruby-3.3.10 2025-10-26 13:11:10 +01:00
ruby-builder-bot ab177d40ee Update CRuby releases on Windows 2025-10-10 10:24:01 +02:00
ruby-builder-bot 6797dcbb9a Add ruby-3.4.7 2025-10-08 11:26:49 +02:00
Benoit Daloze a16e0e6641 Test on macos-15-intel too
* Fixes https://github.com/ruby/setup-ruby/issues/814
2025-10-03 15:02:50 +02:00
Earlopain 0481980f17 Print lockfile contents earlier
Currently, the lockfile gets printed after `bundle install` finished. This could be too late when `bundle install` fails for whatever reason.

I have a workflow that failed like this:

<details><summary>Logs</summary>
<p>

```

55s
Run ruby/setup-ruby@v1
Modifying PATH
Downloading Ruby
Extracting  Ruby
Print Ruby version
Installing Bundler
> bundle install
/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle config --local path /home/runner/work/rubocop/rubocop/vendor/bundle
/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle lock
Fetching source index from https://rubygems.org/
Network error while fetching
https://rubygems.org/quick/Marshal.4.8/asciidoctor-0.0.1.gemspec.rz (Connection
reset by peer - SSL_connect)
Error: The process '/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle' failed with exit code 17
Run ruby/setup-ruby@v1
Modifying PATH
Downloading Ruby
Extracting  Ruby
Print Ruby version
Installing Bundler
> bundle install
/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle config --local path /home/runner/work/rubocop/rubocop/vendor/bundle
/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle lock
Fetching source index from https://rubygems.org/
Network error while fetching
https://rubygems.org/quick/Marshal.4.8/asciidoctor-0.0.1.gemspec.rz (Connection
reset by peer - SSL_connect)
Error: The process '/opt/hostedtoolcache/Ruby/2.7.8/x64/bin/bundle' failed with exit code 17
```

</p>
</details>

It would help to print the lockfile for this I think. It fetching version 0.0.1 confused me but probably the lockfile looks ok. New output:

```
Run ./
Modifying PATH
Print Ruby version
Installing Bundler
> bundle install
/opt/hostedtoolcache/Ruby/3.2.9/x64/bin/bundle config --local path /home/runner/work/setup-ruby/setup-ruby/vendor/bundle
/opt/hostedtoolcache/Ruby/3.2.9/x64/bin/bundle lock
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
Writing lockfile to /home/runner/work/setup-ruby/setup-ruby/gemfiles/rails8.gemfile.lock
Print lockfile
Cache key: setup-ruby-bundler-cache-v6-ubuntu-24.04-x64-ruby-3.2.9-wd-/home/runner/work/setup-ruby/setup-ruby-with--without--only--/home/runner/work/setup-ruby/setup-ruby/gemfiles/rails8.gemfile.lock-cb69172094f71f01e5207070d9af8d465d9aa9c386ecbad22b1b6e8e43523fd2
/opt/hostedtoolcache/Ruby/3.2.9/x64/bin/bundle install --jobs 4
...
```

So it's relatively at the top and not hidden somewhere. Also removes the need to check for the lockfile again.
2025-09-22 20:15:33 +02:00
Benoit Daloze cf7216d52f Use new releases of ruby-builder per engine-version
* See https://github.com/ruby/setup-ruby/issues/810
2025-09-21 19:19:44 +02:00
ruby-builder-bot 1c58d16f1a Update CRuby releases on Windows 2025-09-21 11:13:21 +02:00
Chad Wilson 1dc7956827 Test on JRuby 9.4 as well as 10.0 2025-09-20 21:59:29 +02:00
Chad Wilson b8714f777a Revert "Skip test failing on JRuby on Windows"
This reverts commit f2f42b7848.
2025-09-20 21:59:29 +02:00
Benoit Daloze d3e13b3e37 Revert "feat: upgrade to node 24"
This reverts commit c4cd38db20.
2025-09-20 21:54:20 +02:00
Benoit Daloze 4df093a946 Revert "chore: add setup-node for lint job"
This reverts commit 866b91cc02.
2025-09-20 21:54:20 +02:00
Rui Chen 866b91cc02 chore: add setup-node for lint job
Signed-off-by: Rui Chen <rui@chenrui.dev>
2025-09-18 22:00:12 +02:00
Rui Chen c4cd38db20 feat: upgrade to node 24
Signed-off-by: Rui Chen <rui@chenrui.dev>
2025-09-18 22:00:12 +02:00
ruby-builder-bot 3fee676323 Add truffleruby-25.0.0,truffleruby+graalvm-25.0.0 2025-09-16 19:43:34 +02:00
ruby-builder-bot c61fbf19ae Add ruby-3.4.6 2025-09-16 18:33:02 +02:00
12 changed files with 217 additions and 152 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ jobs:
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }} GH_REPO: ${{ github.repository }}
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
- uses: ./ - uses: ./
+28 -25
View File
@@ -17,10 +17,10 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-13, macos-14, macos-15, windows-2022, windows-2025, windows-11-arm ] os: [ ubuntu-22.04, ubuntu-24.04, ubuntu-22.04-arm, ubuntu-24.04-arm, macos-14, macos-15, macos-15-intel, windows-2022, windows-2025, windows-11-arm ]
ruby: [ 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', '3.4', 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', '4.0', ruby-head,
jruby, jruby-head, jruby-9.4, jruby, jruby-head,
truffleruby, truffleruby-head, truffleruby, truffleruby-head,
truffleruby+graalvm, truffleruby+graalvm-head truffleruby+graalvm, truffleruby+graalvm-head
] ]
@@ -79,6 +79,10 @@ jobs:
- { os: windows-2022, ruby: '1.9' } - { os: windows-2022, ruby: '1.9' }
- { os: windows-2025, ruby: '1.9' } - { os: windows-2025, ruby: '1.9' }
- { os: windows-11-arm, ruby: '1.9' } - { os: windows-11-arm, ruby: '1.9' }
# No preview builds on Windows
- { os: windows-2022, ruby: '4.0' }
- { os: windows-2025, ruby: '4.0' }
- { os: windows-11-arm, ruby: '4.0' }
# TruffleRuby does not support Windows # TruffleRuby does not support Windows
- { os: windows-2022, ruby: truffleruby } - { os: windows-2022, ruby: truffleruby }
- { os: windows-2025, ruby: truffleruby } - { os: windows-2025, ruby: truffleruby }
@@ -96,7 +100,7 @@ jobs:
name: ${{ matrix.os }} ${{ matrix.ruby }} name: ${{ matrix.os }} ${{ matrix.ruby }}
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
@@ -195,15 +199,14 @@ jobs:
shell: bash shell: bash
run: echo ~ && bundle install run: echo ~ && bundle install
- name: Windows JRuby - name: Windows JRuby
# Should be startsWith(matrix.ruby, 'jruby') but broken on jruby-head: https://github.com/jruby/jruby/issues/8623 if: startsWith(matrix.os, 'windows') && startsWith(matrix.ruby, 'jruby')
if: startsWith(matrix.os, 'windows') && matrix.ruby == 'jruby'
run: gem install sassc run: gem install sassc
testDotRubyVersion: testDotRubyVersion:
name: "Test .ruby-version" name: "Test .ruby-version"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: echo "ruby-3.4.0" > .ruby-version - run: echo "ruby-3.4.0" > .ruby-version
- uses: ./ - uses: ./
- run: ruby -v | grep -F "ruby 3.4.0" - run: ruby -v | grep -F "ruby 3.4.0"
@@ -212,7 +215,7 @@ jobs:
name: "Test .tool-versions" name: "Test .tool-versions"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: echo -e "nodejs 16.0.0\nruby 3.4.0" > .tool-versions - run: echo -e "nodejs 16.0.0\nruby 3.4.0" > .tool-versions
- uses: ./ - uses: ./
- run: ruby -v | grep -F "ruby 3.4.0" - run: ruby -v | grep -F "ruby 3.4.0"
@@ -221,7 +224,7 @@ jobs:
name: "Test mise.toml" name: "Test mise.toml"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: echo -e "[tools]\nnode = '18'\nruby = '3.4.0'" > mise.toml - run: echo -e "[tools]\nnode = '18'\nruby = '3.4.0'" > mise.toml
- uses: ./ - uses: ./
- run: ruby -v | grep -F "ruby 3.4.0" - run: ruby -v | grep -F "ruby 3.4.0"
@@ -230,7 +233,7 @@ jobs:
name: "Test with no Gemfile" name: "Test with no Gemfile"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: rm Gemfile - run: rm Gemfile
- uses: ./ - uses: ./
with: with:
@@ -241,7 +244,7 @@ jobs:
name: "Test with no Gemfile but with bundler-cache" name: "Test with no Gemfile but with bundler-cache"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: rm Gemfile - run: rm Gemfile
- uses: ./ - uses: ./
with: with:
@@ -264,7 +267,7 @@ jobs:
- { ruby: '2.3', expected_rubygems_version: '3.3.27' } - { ruby: '2.3', expected_rubygems_version: '3.3.27' }
- { ruby: '2.0', expected_rubygems_version: '2.7.11' } - { ruby: '2.0', expected_rubygems_version: '2.7.11' }
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: ${{ matrix.ruby }} ruby-version: ${{ matrix.ruby }}
@@ -275,7 +278,7 @@ jobs:
name: "Test rubygems: version upgrades RubyGems to that version if the default is older" name: "Test rubygems: version upgrades RubyGems to that version if the default is older"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: '2.6'
@@ -286,7 +289,7 @@ jobs:
name: "Test rubygems: version noops if the default is newer" name: "Test rubygems: version noops if the default is newer"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '3.1.0' ruby-version: '3.1.0'
@@ -297,7 +300,7 @@ jobs:
name: "Test rubygems: version uses the Bundler installed by the rubygems update" name: "Test rubygems: version uses the Bundler installed by the rubygems update"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '3.1.0' ruby-version: '3.1.0'
@@ -309,7 +312,7 @@ jobs:
name: "Test bundler: 1.x for old Ruby" name: "Test bundler: 1.x for old Ruby"
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.3' ruby-version: '2.3'
@@ -320,7 +323,7 @@ jobs:
name: "Test with a major Bundler version" name: "Test with a major Bundler version"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: '2.6'
@@ -331,7 +334,7 @@ jobs:
name: "Test with a minor Bundler version" name: "Test with a minor Bundler version"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: '2.6'
@@ -342,7 +345,7 @@ jobs:
name: "Test with an exact Bundler version" name: "Test with an exact Bundler version"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: '2.6'
@@ -353,7 +356,7 @@ jobs:
name: "Test with a Bundler pre/rc version" name: "Test with a Bundler pre/rc version"
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.6' ruby-version: '2.6'
@@ -366,7 +369,7 @@ jobs:
env: env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/bundler-dev.gemfile BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/bundler-dev.gemfile
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: ruby-head ruby-version: ruby-head
@@ -378,7 +381,7 @@ jobs:
env: env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/bundler1.gemfile BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/bundler1.gemfile
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.7' ruby-version: '2.7'
@@ -396,7 +399,7 @@ jobs:
env: env:
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '3.2' ruby-version: '3.2'
@@ -407,7 +410,7 @@ jobs:
name: "Test windows-toolchain: none" name: "Test windows-toolchain: none"
runs-on: windows-latest runs-on: windows-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- uses: ./ - uses: ./
with: with:
ruby-version: '2.7' ruby-version: '2.7'
@@ -419,7 +422,7 @@ jobs:
lint: lint:
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
- run: yarn install - run: yarn install
- run: yarn run package - run: yarn run package
- name: Check generated files are up to date - name: Check generated files are up to date
+1 -1
View File
@@ -9,7 +9,7 @@ jobs:
update_branch: update_branch:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v5 - uses: actions/checkout@v6
with: with:
fetch-depth: 0 fetch-depth: 0
- run: git push origin HEAD:v1 - run: git push origin HEAD:v1
+4 -4
View File
@@ -15,10 +15,10 @@ This action currently supports these versions of MRI, JRuby and TruffleRuby:
| Interpreter | Versions | | Interpreter | Versions |
| ----------- | -------- | | ----------- | -------- |
| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.5.0-preview1, head, debug, mingw, mswin, ucrt | | `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 4.0.0-preview3, head, debug, mingw, mswin, ucrt |
| `jruby` | 9.1.17.0 - 10.0.2.0, head | | `jruby` | 9.1.17.0 - 10.0.2.0, head |
| `truffleruby` | 19.3.0 - 24.2.1, head | | `truffleruby` | 19.3.0 - 25.0.0, head |
| `truffleruby+graalvm` | 21.2.0 - 24.2.1, head | | `truffleruby+graalvm` | 21.2.0 - 25.0.0, 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`).
@@ -50,7 +50,7 @@ The action works on these [GitHub-hosted runners](https://docs.github.com/en/act
| Operating System | Supported | | Operating System | Supported |
| ---------------- | --------- | | ---------------- | --------- |
| Ubuntu | `ubuntu-22.04`, `ubuntu-24.04`, `ubuntu-22.04-arm`, `ubuntu-24.04-arm` | | Ubuntu | `ubuntu-22.04`, `ubuntu-24.04`, `ubuntu-22.04-arm`, `ubuntu-24.04-arm` |
| macOS | `macos-13` and newer versions | | macOS | `macos-14` and newer versions |
| Windows | `windows-2022`, `windows-2025`, `windows-11-arm` | | Windows | `windows-2022`, `windows-2025`, `windows-11-arm` |
Not all combinations of runner images and versions are supported. Not all combinations of runner images and versions are supported.
+42 -18
View File
@@ -1,4 +1,5 @@
const fs = require('fs') const fs = require('fs')
const os = require('os')
const path = require('path') const path = require('path')
const core = require('@actions/core') const core = require('@actions/core')
const exec = require('@actions/exec') const exec = require('@actions/exec')
@@ -66,17 +67,15 @@ export async function installBundler(bundlerVersionInput, rubygemsInputSet, lock
} }
} }
const floatVersion = common.floatVersion(rubyVersion)
if (bundlerVersion === 'default') { if (bundlerVersion === 'default') {
if (common.isBundler2dot2Default(engine, rubyVersion)) { if (common.isBundler2dot2PlusDefault(engine, rubyVersion)) {
if (common.windows && engine === 'ruby' && (common.isStableVersion(engine, rubyVersion) || rubyVersion === 'head')) { if (common.windows && engine === 'ruby' && (common.isStableVersion(engine, rubyVersion) || rubyVersion === 'head')) {
// https://github.com/ruby/setup-ruby/issues/371 // https://github.com/ruby/setup-ruby/issues/371
console.log(`Installing latest Bundler for ${engine}-${rubyVersion} on Windows because bin/bundle does not work in bash otherwise`) console.log(`Installing latest Bundler for ${engine}-${rubyVersion} on Windows because bin/bundle does not work in bash otherwise`)
bundlerVersion = 'latest' bundlerVersion = 'latest'
} else { } else {
console.log(`Using Bundler 2 shipped with ${engine}-${rubyVersion}`) console.log(`Using Bundler shipped with ${engine}-${rubyVersion}`)
return '2' return common.isBundler4PlusDefault(engine, rubyVersion) ? '4' : '2'
} }
} else if (common.hasBundlerDefaultGem(engine, rubyVersion)) { } else if (common.hasBundlerDefaultGem(engine, rubyVersion)) {
// Those Rubies have a old Bundler default gem < 2.2 which does not work well for `gem 'foo', github: 'foo/foo'`: // Those Rubies have a old Bundler default gem < 2.2 which does not work well for `gem 'foo', github: 'foo/foo'`:
@@ -89,8 +88,15 @@ export async function installBundler(bundlerVersionInput, rubygemsInputSet, lock
} }
} }
const targetRubyVersion = common.targetRubyVersion(engine, rubyVersion)
if (bundlerVersion === 'latest') { if (bundlerVersion === 'latest') {
bundlerVersion = '2' // Bundler 4 requires Ruby 3.2+
if (targetRubyVersion < 3.2) {
bundlerVersion = '2'
} else {
bundlerVersion = '4'
}
} }
if (isValidBundlerVersion(bundlerVersion)) { if (isValidBundlerVersion(bundlerVersion)) {
@@ -99,24 +105,29 @@ export async function installBundler(bundlerVersionInput, rubygemsInputSet, lock
throw new Error(`Cannot parse bundler input: ${bundlerVersion}`) throw new Error(`Cannot parse bundler input: ${bundlerVersion}`)
} }
// Use Bundler 1 when we know Bundler 2 does not work // Only use Bundler 4 on Ruby 3.2+
if (bundlerVersion.startsWith('2')) { if (common.floatVersion(bundlerVersion) >= 4 && targetRubyVersion < 3.2) {
if (engine === 'ruby' && floatVersion <= 2.2) { console.log('Bundler 4 requires Ruby 3.2+, using Bundler 2 instead on Ruby < 3.2')
console.log('Bundler 2 requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2') bundlerVersion = '2'
}
// Use Bundler 1 when we know Bundler 2+ does not work
if (common.floatVersion(bundlerVersion) >= 2) {
if (engine === 'ruby' && targetRubyVersion <= 2.2) {
console.log(`Bundler 2+ requires Ruby 2.3+, using Bundler 1 on Ruby <= 2.2`)
bundlerVersion = '1' bundlerVersion = '1'
} else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) { } else if (engine === 'ruby' && /^2\.3\.[01]/.test(rubyVersion)) {
console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1') console.log('Ruby 2.3.0 and 2.3.1 have shipped with an old rubygems that only works with Bundler 1')
bundlerVersion = '1' bundlerVersion = '1'
} else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same } else if (engine === 'jruby' && rubyVersion.startsWith('9.1')) { // JRuby 9.1 targets Ruby 2.3, treat it the same
console.log('JRuby 9.1 has a bug with Bundler 2 (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1') console.log('JRuby 9.1 has a bug with Bundler 2+ (https://github.com/ruby/setup-ruby/issues/108), using Bundler 1 instead on JRuby 9.1')
bundlerVersion = '1' bundlerVersion = '1'
} }
} }
const targetRubyVersion = common.targetRubyVersion(engine, rubyVersion)
// Use Bundler 2.3 when we use Ruby 2.3.2 - 2.5 // Use Bundler 2.3 when we use Ruby 2.3.2 - 2.5
// Use Bundler 2.4 when we use Ruby 2.6-2.7 // Use Bundler 2.4 when we use Ruby 2.6-2.7
if (bundlerVersion == '2') { if (bundlerVersion === '2') {
if (targetRubyVersion <= 2.5) { // < 2.3.2 already handled above if (targetRubyVersion <= 2.5) { // < 2.3.2 already handled above
console.log('Ruby 2.3.2 - 2.5 only works with Bundler 2.3') console.log('Ruby 2.3.2 - 2.5 only works with Bundler 2.3')
bundlerVersion = '2.3' bundlerVersion = '2.3'
@@ -136,6 +147,14 @@ export async function installBundler(bundlerVersionInput, rubygemsInputSet, lock
return bundlerVersion return bundlerVersion
} }
function bundlerConfigSetArgs(bundlerVersion, key, value) {
if (bundlerVersion.startsWith('1')) {
return ['config', '--local', key, value]
} else {
return ['config', 'set', '--local', key, value]
}
}
export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, bundlerVersion, cacheVersion) { export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVersion, bundlerVersion, cacheVersion) {
if (gemfile === null) { if (gemfile === null) {
console.log('Could not determine gemfile path, skipping "bundle install" and caching') console.log('Could not determine gemfile path, skipping "bundle install" and caching')
@@ -143,8 +162,8 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer
} }
let envOptions = {} let envOptions = {}
if (bundlerVersion.startsWith('1') && common.isBundler2Default(engine, rubyVersion)) { if (bundlerVersion.startsWith('1') && common.isBundler2PlusDefault(engine, rubyVersion)) {
// If Bundler 1 is specified on Rubies which ship with Bundler 2, // If Bundler 1 is specified on Rubies which ship with Bundler 2+,
// we need to specify which Bundler version to use explicitly until the lockfile exists. // we need to specify which Bundler version to use explicitly until the lockfile exists.
console.log(`Setting BUNDLER_VERSION=${bundlerVersion} for "bundle config|lock" commands below to ensure Bundler 1 is used`) console.log(`Setting BUNDLER_VERSION=${bundlerVersion} for "bundle config|lock" commands below to ensure Bundler 1 is used`)
envOptions = { env: { ...process.env, BUNDLER_VERSION: bundlerVersion } } envOptions = { env: { ...process.env, BUNDLER_VERSION: bundlerVersion } }
@@ -155,16 +174,19 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer
// An absolute path, so it is reliably under $PWD/vendor/bundle, and not relative to the gemfile's directory // An absolute path, so it is reliably under $PWD/vendor/bundle, and not relative to the gemfile's directory
const bundleCachePath = path.join(process.cwd(), cachePath) const bundleCachePath = path.join(process.cwd(), cachePath)
await exec.exec('bundle', ['config', '--local', 'path', bundleCachePath], envOptions) await exec.exec('bundle', bundlerConfigSetArgs(bundlerVersion, 'path', bundleCachePath), envOptions)
if (fs.existsSync(lockFile)) { if (fs.existsSync(lockFile)) {
await exec.exec('bundle', ['config', '--local', 'deployment', 'true'], envOptions) await exec.exec('bundle', bundlerConfigSetArgs(bundlerVersion, 'deployment', 'true'), envOptions)
} else { } else {
// Generate the lockfile so we can use it to compute the cache key. // Generate the lockfile so we can use it to compute the cache key.
// This will also automatically pick up the latest gem versions compatible with the Gemfile. // This will also automatically pick up the latest gem versions compatible with the Gemfile.
await exec.exec('bundle', ['lock'], envOptions) await exec.exec('bundle', ['lock'], envOptions)
} }
await core.group(`Print lockfile`, async () =>
await exec.exec('cat', [lockFile]))
// cache key // cache key
const paths = [cachePath] const paths = [cachePath]
const baseKey = await computeBaseKey(engine, rubyVersion, lockFile, cacheVersion) const baseKey = await computeBaseKey(engine, rubyVersion, lockFile, cacheVersion)
@@ -190,8 +212,10 @@ export async function bundleInstall(gemfile, lockFile, platform, engine, rubyVer
console.log(`Found cache for key: ${cachedKey}`) console.log(`Found cache for key: ${cachedKey}`)
} }
// Number of jobs should scale with runner, up to a point
const jobs = Math.min(os.availableParallelism(), 8)
// Always run 'bundle install' to list the gems // Always run 'bundle install' to list the gems
await exec.exec('bundle', ['install', '--jobs', '4']) await exec.exec('bundle', ['install', '--jobs', `${jobs}`])
// @actions/cache only allows to save for non-existing keys // @actions/cache only allows to save for non-existing keys
if (!common.isExactCacheKeyMatch(key, cachedKey)) { if (!common.isExactCacheKeyMatch(key, cachedKey)) {
+24 -12
View File
@@ -13,6 +13,7 @@ const linuxOSInfo = require('linux-os-info')
export const windows = (os.platform() === 'win32') export const windows = (os.platform() === 'win32')
// Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14 // Extract to SSD on Windows, see https://github.com/ruby/setup-ruby/pull/14
export const drive = (windows ? (process.env['RUNNER_TEMP'] || 'C')[0] : undefined) export const drive = (windows ? (process.env['RUNNER_TEMP'] || 'C')[0] : undefined)
const PATH_ENV_VAR = windows ? 'Path' : 'PATH'
export const inputs = { export const inputs = {
selfHosted: undefined selfHosted: undefined
@@ -80,7 +81,7 @@ export function isStableVersion(engine, rubyVersion) {
} }
export function hasBundlerDefaultGem(engine, rubyVersion) { export function hasBundlerDefaultGem(engine, rubyVersion) {
return isBundler1Default(engine, rubyVersion) || isBundler2Default(engine, rubyVersion) return isBundler1Default(engine, rubyVersion) || isBundler2PlusDefault(engine, rubyVersion)
} }
export function isBundler1Default(engine, rubyVersion) { export function isBundler1Default(engine, rubyVersion) {
@@ -95,7 +96,7 @@ export function isBundler1Default(engine, rubyVersion) {
} }
} }
export function isBundler2Default(engine, rubyVersion) { export function isBundler2PlusDefault(engine, rubyVersion) {
if (engine === 'ruby') { if (engine === 'ruby') {
return floatVersion(rubyVersion) >= 2.7 return floatVersion(rubyVersion) >= 2.7
} else if (engine.startsWith('truffleruby')) { } else if (engine.startsWith('truffleruby')) {
@@ -107,7 +108,7 @@ export function isBundler2Default(engine, rubyVersion) {
} }
} }
export function isBundler2dot2Default(engine, rubyVersion) { export function isBundler2dot2PlusDefault(engine, rubyVersion) {
if (engine === 'ruby') { if (engine === 'ruby') {
return floatVersion(rubyVersion) >= 3.0 return floatVersion(rubyVersion) >= 3.0
} else if (engine.startsWith('truffleruby')) { } else if (engine.startsWith('truffleruby')) {
@@ -119,6 +120,13 @@ export function isBundler2dot2Default(engine, rubyVersion) {
} }
} }
const UNKNOWN_TARGET_RUBY_VERSION = 9.9
export function isBundler4PlusDefault(engine, rubyVersion) {
const version = targetRubyVersion(engine, rubyVersion)
return version != UNKNOWN_TARGET_RUBY_VERSION && version >= 4.0
}
export function targetRubyVersion(engine, rubyVersion) { export function targetRubyVersion(engine, rubyVersion) {
const version = floatVersion(rubyVersion) const version = floatVersion(rubyVersion)
if (engine === 'ruby') { if (engine === 'ruby') {
@@ -132,6 +140,8 @@ export function targetRubyVersion(engine, rubyVersion) {
return 2.6 return 2.6
} else if (version === 9.4) { } else if (version === 9.4) {
return 3.1 return 3.1
} else if (version === 10.0) {
return 3.4
} }
} else if (engine.startsWith('truffleruby')) { } else if (engine.startsWith('truffleruby')) {
if (version < 21.0) { if (version < 21.0) {
@@ -147,11 +157,11 @@ export function targetRubyVersion(engine, rubyVersion) {
} }
} }
return 9.9 // unknown, assume recent return UNKNOWN_TARGET_RUBY_VERSION // unknown, assume recent
} }
export function floatVersion(rubyVersion) { export function floatVersion(rubyVersion) {
const match = rubyVersion.match(/^\d+\.\d+/) const match = rubyVersion.match(/^\d+(\.\d+|$)/)
if (match) { if (match) {
return parseFloat(match[0]) return parseFloat(match[0])
} else if (isHeadVersion(rubyVersion)) { } else if (isHeadVersion(rubyVersion)) {
@@ -356,23 +366,22 @@ export function win2nix(path) {
} }
export function setupPath(newPathEntries) { export function setupPath(newPathEntries) {
const envPath = windows ? 'Path' : 'PATH' const originalPath = process.env[PATH_ENV_VAR].split(path.delimiter)
const originalPath = process.env[envPath].split(path.delimiter)
let cleanPath = originalPath.filter(entry => !/\bruby\b/i.test(entry)) let cleanPath = originalPath.filter(entry => !/\bruby\b/i.test(entry))
core.group(`Modifying ${envPath}`, async () => { core.group(`Modifying ${PATH_ENV_VAR}`, async () => {
// First remove the conflicting path entries // First remove the conflicting path entries
if (cleanPath.length !== originalPath.length) { if (cleanPath.length !== originalPath.length) {
console.log(`Entries removed from ${envPath} to avoid conflicts with default Ruby:`) console.log(`Entries removed from ${PATH_ENV_VAR} to avoid conflicts with default Ruby:`)
for (const entry of originalPath) { for (const entry of originalPath) {
if (!cleanPath.includes(entry)) { if (!cleanPath.includes(entry)) {
console.log(` ${entry}`) console.log(` ${entry}`)
} }
} }
core.exportVariable(envPath, cleanPath.join(path.delimiter)) core.exportVariable(PATH_ENV_VAR, cleanPath.join(path.delimiter))
} }
console.log(`Entries added to ${envPath} to use selected Ruby:`) console.log(`Entries added to ${PATH_ENV_VAR} to use selected Ruby:`)
for (const entry of newPathEntries) { for (const entry of newPathEntries) {
console.log(` ${entry}`) console.log(` ${entry}`)
} }
@@ -406,14 +415,17 @@ export async function setupJavaHome(rubyPrefix) {
// JAVA_HOME_21_X64 - https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md#java // JAVA_HOME_21_X64 - https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md#java
let newHomeVar = `JAVA_HOME_21_${arch}` let newHomeVar = `JAVA_HOME_21_${arch}`
let newHome = process.env[newHomeVar] let newHome = process.env[newHomeVar]
let bin = path.join(newHome, 'bin')
if (newHome === "undefined") { if (newHome === "undefined") {
throw new Error(`JAVA_HOME is not Java 21+ needed for JRuby and \$${newHomeVar} is not defined`) throw new Error(`JAVA_HOME is not Java 21+ needed for JRuby and \$${newHomeVar} is not defined`)
} }
console.log(`Setting JAVA_HOME to ${newHomeVar} path ${newHome}`) console.log(`Setting JAVA_HOME to ${newHomeVar} path ${newHome}`)
core.exportVariable("JAVA_HOME", newHome) core.exportVariable("JAVA_HOME", newHome)
console.log(`Adding ${bin} to ${PATH_ENV_VAR}`)
core.addPath(bin)
} }
}) })
} }
Generated Vendored
+81 -62
View File
File diff suppressed because one or more lines are too long
+3 -8
View File
@@ -99,11 +99,6 @@ export async function setupRuby(options = {}) {
if (inputs['bundler-cache'] === 'true') { if (inputs['bundler-cache'] === 'true') {
await common.time('bundle install', async () => await common.time('bundle install', async () =>
bundler.bundleInstall(gemfile, lockFile, platform, engine, version, bundlerVersion, inputs['cache-version'])) bundler.bundleInstall(gemfile, lockFile, platform, engine, version, bundlerVersion, inputs['cache-version']))
if (lockFile !== null && fs.existsSync(lockFile)) {
await core.group(`Print lockfile`, async () =>
await exec.exec('cat', [lockFile]))
}
} }
core.setOutput('ruby-prefix', rubyPrefix) core.setOutput('ruby-prefix', rubyPrefix)
@@ -180,7 +175,7 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVe
// Well known version-platform combinations which do not work: // Well known version-platform combinations which do not work:
if (engine === 'ruby' && platform.startsWith('macos') && os.arch() === 'arm64' && common.floatVersion(version) < 2.6) { 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. 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. Either use a newer Ruby version or use a macOS image running on amd64, e.g., macos-15-intel.
Note that GitHub changed the meaning of macos-latest from macos-12 (amd64) to macos-14 (arm64): 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/ https://github.blog/changelog/2024-04-01-macos-14-sonoma-is-generally-available-and-the-latest-macos-runner-image/
@@ -193,8 +188,8 @@ function validateRubyEngineAndVersion(platform, engineVersions, engine, parsedVe
- { os: macos-latest, ruby: '2.4' } - { os: macos-latest, ruby: '2.4' }
- { os: macos-latest, ruby: '2.5' } - { os: macos-latest, ruby: '2.5' }
include: include:
- { os: macos-13, ruby: '2.4' } - { os: macos-15-intel, ruby: '2.4' }
- { os: macos-13, ruby: '2.5' } - { os: macos-15-intel, 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.`) 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')) { } else if (engine === 'truffleruby' && platform.startsWith('windows')) {
+5 -2
View File
@@ -12,9 +12,10 @@
"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.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.1.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.1.7",
"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.2.7", "3.2.8", "3.2.9", "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.2.7", "3.2.8", "3.2.9",
"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.3.7", "3.3.8", "3.3.9", "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.3.7", "3.3.8", "3.3.9", "3.3.10",
"3.4.0-preview1", "3.4.0-preview2", "3.4.0-rc1", "3.4.0", "3.4.1", "3.4.2", "3.4.3", "3.4.4", "3.4.5", "3.4.0-preview1", "3.4.0-preview2", "3.4.0-rc1", "3.4.0", "3.4.1", "3.4.2", "3.4.3", "3.4.4", "3.4.5", "3.4.6", "3.4.7", "3.4.8",
"3.5.0-preview1", "3.5.0-preview1",
"4.0.0-preview2", "4.0.0-preview3",
"head", "debug", "asan", "3.4-asan" "head", "debug", "asan", "3.4-asan"
], ],
"jruby": [ "jruby": [
@@ -32,6 +33,7 @@
"22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1", "22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1",
"23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.1.2", "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", "24.1.2", "24.2.0", "24.2.1", "24.0.0", "24.0.1", "24.0.2", "24.1.0", "24.1.1", "24.1.2", "24.2.0", "24.2.1",
"25.0.0",
"head" "head"
], ],
"truffleruby+graalvm": [ "truffleruby+graalvm": [
@@ -39,6 +41,7 @@
"22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1", "22.0.0.2", "22.1.0", "22.2.0", "22.3.0", "22.3.1",
"23.0.0-preview1", "23.0.0", "23.1.0", "23.1.1", "23.1.2", "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", "24.1.2", "24.2.0", "24.2.1", "24.0.0", "24.0.1", "24.0.2", "24.1.0", "24.1.1", "24.1.2", "24.2.0", "24.2.1",
"25.0.0",
"head" "head"
] ]
} }
+6 -19
View File
@@ -8,7 +8,6 @@ const tc = require('@actions/tool-cache')
const common = require('./common') const common = require('./common')
const rubyBuilderVersions = require('./ruby-builder-versions') const rubyBuilderVersions = require('./ruby-builder-versions')
const builderReleaseTag = 'toolcache'
const releasesURL = 'https://github.com/ruby/ruby-builder/releases' const releasesURL = 'https://github.com/ruby/ruby-builder/releases'
const windows = common.windows const windows = common.windows
@@ -105,33 +104,21 @@ async function downloadAndExtract(platform, engine, version, rubyPrefix) {
function getDownloadURL(platform, engine, version) { function getDownloadURL(platform, engine, version) {
let builderPlatform = null let builderPlatform = null
if (platform.startsWith('windows-')) { if (platform.startsWith('windows-')) {
if (os.arch() === 'x64') { builderPlatform = `windows-${os.arch()}`
builderPlatform = 'windows-latest'
} else if (os.arch() === 'arm64') {
builderPlatform = 'windows-arm64'
}
} else if (platform.startsWith('macos-')) { } else if (platform.startsWith('macos-')) {
if (os.arch() === 'x64') { builderPlatform = `darwin-${os.arch()}`
builderPlatform = 'macos-latest'
} else if (os.arch() === 'arm64') {
builderPlatform = 'macos-13-arm64'
}
} else if (platform.startsWith('ubuntu-')) { } else if (platform.startsWith('ubuntu-')) {
if (os.arch() === 'x64') { builderPlatform = `${platform}-${os.arch()}`
builderPlatform = platform
} else if (os.arch() === 'arm64') {
builderPlatform = `${platform}-arm64`
}
} }
if (builderPlatform === null) { if (builderPlatform === null || !['x64', 'arm64'].includes(os.arch())) {
throw new Error(`Unknown download URL for platform ${platform}`) throw new Error(`Unknown download URL for platform ${platform}-${os.arch()}`)
} }
if (common.isHeadVersion(version)) { if (common.isHeadVersion(version)) {
return getLatestHeadBuildURL(builderPlatform, engine, version) return getLatestHeadBuildURL(builderPlatform, engine, version)
} else { } else {
return `${releasesURL}/download/${builderReleaseTag}/${engine}-${version}-${builderPlatform}.tar.gz` return `${releasesURL}/download/${engine}-${version}/${engine}-${version}-${builderPlatform}.tar.gz`
} }
} }
+11
View File
@@ -236,6 +236,9 @@
"3.3.9": { "3.3.9": {
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z" "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
}, },
"3.3.10": {
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
},
"3.4.1": { "3.4.1": {
"arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z", "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64-mingw-w64@r688.7z",
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z" "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64-mingw-w64@r688-gcc@14.7z"
@@ -256,6 +259,14 @@
"arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z", "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z",
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z" "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
}, },
"3.4.6": {
"arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z",
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
},
"3.4.7": {
"arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z",
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
},
"head": { "head": {
"arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z", "arm64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-clangarm64.7z",
"x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z" "x64": "https://github.com/ruby/setup-msys2-gcc/releases/latest/download/msys2-ucrt64.7z"
+11
View File
@@ -236,6 +236,9 @@
"3.3.9": { "3.3.9": {
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.9-1/rubyinstaller-3.3.9-1-x64.7z" "x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.9-1/rubyinstaller-3.3.9-1-x64.7z"
}, },
"3.3.10": {
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.10-1/rubyinstaller-3.3.10-1-x64.7z"
},
"3.4.1": { "3.4.1": {
"arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-arm.7z", "arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-arm.7z",
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-x64.7z" "x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.1-2/rubyinstaller-3.4.1-2-x64.7z"
@@ -256,6 +259,14 @@
"arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-arm.7z", "arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-arm.7z",
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-x64.7z" "x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.5-1/rubyinstaller-3.4.5-1-x64.7z"
}, },
"3.4.6": {
"arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-arm.7z",
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.6-1/rubyinstaller-3.4.6-1-x64.7z"
},
"3.4.7": {
"arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-arm.7z",
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.4.7-1/rubyinstaller-3.4.7-1-x64.7z"
},
"head": { "head": {
"arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-arm.7z", "arm64": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-arm.7z",
"x64": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z" "x64": "https://github.com/oneclick/rubyinstaller2/releases/download/rubyinstaller-head/rubyinstaller-head-x64.7z"