Note: this action used to be at eregon/use-ruby-action
and was moved to the ruby
organization.
This action downloads a prebuilt ruby and adds it to the PATH
.
It is very efficient and takes about 5 seconds to download, extract and add the given Ruby to the PATH
.
No extra packages need to be installed.
Compared to actions/setup-ruby, this actions supports many more versions and features.
This action currently supports these versions of MRI, JRuby and TruffleRuby:
Interpreter | Versions |
---|---|
Ruby | 2.2, 2.3.0 - 2.3.8, 2.4.0 - 2.4.9, 2.5.0 - 2.5.7, 2.6.0 - 2.6.5, 2.7.0, head |
JRuby | 9.2.9.0, head |
TruffleRuby | 19.3.0, 19.3.1, head |
Rubinius | 4.14 |
Note that Ruby ≤ 2.3 and the OpenSSL version it needs (1.0.2) are both end-of-life, which means Ruby ≤ 2.3 is unmaintained and considered insecure. On Windows, Ruby 2.4 uses OpenSSL 1.0.2, which is no longer maintained. Ruby 2.2 resolves to 2.2.6 on Windows (last build from RubyInstaller) and 2.2.10 otherwise.
The action works for all GitHub-hosted runners.
Operating System | Versions |
---|---|
Ubuntu | ubuntu-latest (= ubuntu-18.04 ), ubuntu-16.04 |
macOS | macos-latest |
Windows | windows-latest |
Rubinius is only available on ubuntu-latest
.
The prebuilt releases are generated by ruby-builder
and on Windows by RubyInstaller2.
ruby-head
is generated by ruby-dev-builder and truffleruby-head
is generated by truffleruby-dev-builder.
The full list of available Ruby versions can be seen in ruby-builder-versions.js
for Ubuntu and macOS and in windows-versions.js for Windows.
name: My workflow
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: 2.6
- run: ruby -v
This matrix tests all stable releases of MRI, JRuby and TruffleRuby on Ubuntu and macOS.
name: My workflow
on: [push]
jobs:
test:
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, macos-latest ]
ruby: [ 2.4, 2.5, 2.6, 2.7, jruby, truffleruby ]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- run: ruby -v
-
engine-version like
ruby-2.6.5
andtruffleruby-19.3.0
-
short version like
2.6
, automatically using the latest release matching that version (2.6.5
) -
version only like
2.6.5
, assumes MRI for the engine -
engine only like
truffleruby
, uses the latest stable release of that implementation -
.ruby-version
reads from the project's.ruby-version
file -
.tool-versions
reads from the project's.tool-versions
file -
If the
ruby-version
input is not specified,.ruby-version
is tried first, followed by.tool-versions
Currently, Bundler is guaranteed to be installed for all versions. If the Ruby ships with Bundler (Ruby >= 2.6), that version is used. Otherwise (Ruby < 2.6), Bundler 1 is installed when that Ruby was built.
You can cache the installed gems with these two steps:
- uses: actions/cache@v1
with:
path: vendor/bundle
key: bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
bundle-use-ruby-${{ matrix.os }}-${{ matrix.ruby }}-
- name: bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
When using a single job with a Ruby version, replace ${{ matrix.ruby }}
with the Ruby version.
When using .ruby-version
, replace ${{ matrix.ruby }}
with ${{ hashFiles('.ruby-version') }}
.
When using .tool-versions
, replace ${{ matrix.ruby }}
with ${{ hashFiles('.tool-versions') }}
.
This uses the cache action.
The code above is a more complete version of the Ruby - Bundler example.
Make sure to include use-ruby
in the key
to avoid conflicting with previous caches.
Note that running CI on Windows can be quite challenging if you are not very familiar with Windows. It is recommended to first get your build working on Ubuntu and macOS before trying Windows.
- The default shell on Windows is not Bash but PowerShell. This can lead issues such as multi-line scripts not working as expected.
- The
PATH
contains multiple compiler toolchains. Usewhere.exe
to debug which tool is used. - MSYS2 is prepended to the
PATH
, similar to what RubyInstaller2 does. - JRuby on Windows has a known bug that
bundle exec rake
fails.
- This action currently only works with GitHub-hosted runners, not private runners.
This action follows semantic versioning with a moving v1
branch.
This follows the recommendations of GitHub Actions.
The current maintainer of this action is @eregon. Most of the Windows logic is from https://github.com/MSP-Greg/actions-ruby by MSP-Greg. Many thanks to MSP-Greg and Lars Kanis for the help with Ruby Installer.