mirror of
https://github.com/ruby/setup-ruby.git
synced 2026-09-13 22:44:20 +02:00
210 lines
9.6 KiB
Markdown
210 lines
9.6 KiB
Markdown
# setup-ruby
|
|
|
|
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](https://github.com/actions/setup-ruby),
|
|
this actions supports many more versions and features.
|
|
|
|
### Supported Versions
|
|
|
|
This action currently supports these versions of MRI, JRuby and TruffleRuby:
|
|
|
|
| Interpreter | Versions |
|
|
| ----------- | -------- |
|
|
| Ruby | 2.1.9, 2.2, 2.3.0 - 2.3.8, 2.4.0 - 2.4.10, 2.5.0 - 2.5.8, 2.6.0 - 2.6.6, 2.7.1, head, debug, mingw, mswin |
|
|
| JRuby | 9.1.17.0, 9.2.9.0 - 9.2.13.0, head |
|
|
| TruffleRuby | 19.3.0 - 20.2.0, head |
|
|
| Rubinius | 4.14 |
|
|
|
|
`ruby-debug` is the same as `ruby-head` but with assertions enabled (`-DRUBY_DEBUG=1`).
|
|
On Windows, `mingw` and `mswin` are `ruby-head` builds using the MSYS2/MinGW and the MSVC toolchains respectively.
|
|
|
|
Ruby 2.2 resolves to 2.2.6 on Windows (last build from RubyInstaller) and 2.2.10 otherwise.
|
|
Ruby 2.3 on Windows only has builds for 2.3.0, 2.3.1 and 2.3.3 (same as RubyInstaller).
|
|
|
|
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.
|
|
|
|
### Supported Platforms
|
|
|
|
The action works for all [GitHub-hosted runners](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/virtual-environments-for-github-hosted-runners), and [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners), under [certain conditions](#limitations)
|
|
|
|
| Operating System | Recommended | Other Supported Versions |
|
|
| ----------- | -------- | -------- |
|
|
| Ubuntu | `ubuntu-latest` (= `ubuntu-18.04`) | `ubuntu-20.04`, `ubuntu-16.04` |
|
|
| macOS | `macos-latest` (= `macos-10.15`) | |
|
|
| Windows | `windows-latest` (= `windows-2019`) | `windows-2016` |
|
|
|
|
Rubinius is only available on `ubuntu-18.04`.
|
|
|
|
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
|
|
and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2).
|
|
`mingw` 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)
|
|
and `truffleruby-head` is 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.js](ruby-builder-versions.js)
|
|
for Ubuntu and macOS and in [windows-versions.js](windows-versions.js) for Windows.
|
|
|
|
## Usage
|
|
|
|
### Single Job
|
|
|
|
```yaml
|
|
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 # Not needed with a .ruby-version file
|
|
- run: bundle install
|
|
- run: bundle exec rake
|
|
```
|
|
|
|
### Matrix
|
|
|
|
This matrix tests all stable releases and `head` versions of MRI, JRuby and TruffleRuby on Ubuntu and macOS.
|
|
|
|
```yaml
|
|
name: My workflow
|
|
on: [push]
|
|
jobs:
|
|
test:
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [ubuntu, macos]
|
|
ruby: [2.5, 2.6, 2.7, head, debug, jruby, jruby-head, truffleruby, truffleruby-head]
|
|
runs-on: ${{ matrix.os }}-latest
|
|
continue-on-error: ${{ endsWith(matrix.ruby, 'head') || matrix.ruby == 'debug' }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: ruby/setup-ruby@v1
|
|
with:
|
|
ruby-version: ${{ matrix.ruby }}
|
|
- run: bundle install
|
|
- run: bundle exec rake
|
|
```
|
|
|
|
See the GitHub Actions documentation for more details about the
|
|
[workflow syntax](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions)
|
|
and the [condition and expression syntax](https://help.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions).
|
|
|
|
### Supported Version Syntax
|
|
|
|
* engine-version like `ruby-2.6.5` and `truffleruby-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`
|
|
|
|
### Working Directory
|
|
|
|
The `working-directory` input can be set to resolve `.ruby-version`, `.tool-versions` and `Gemfile.lock`
|
|
if they are not at the root of the repository, see [action.yml](action.yml) for details.
|
|
|
|
### Bundler
|
|
|
|
By default, if there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` if `$BUNDLE_GEMFILE` is set) with a `BUNDLED WITH` section,
|
|
the latest version of Bundler with the same major version will be installed.
|
|
Otherwise, the latest compatible Bundler version is installed (Bundler 2 on Ruby >= 2.4, Bundler 1 on Ruby < 2.4).
|
|
|
|
This behavior can be customized, see [action.yml](action.yml) for details about the `bundler` input.
|
|
|
|
### Caching `bundle install` automatically
|
|
|
|
This action provides a way to automatically run `bundle install` and cache the result:
|
|
```yaml
|
|
- uses: ruby/setup-ruby@v1
|
|
with:
|
|
bundler-cache: true
|
|
```
|
|
|
|
This caching speeds up installing gems significantly and avoids too many requests to RubyGems.org.
|
|
It needs a `Gemfile` (or `$BUNDLE_GEMFILE`) under the [`working-directory`](#working-directory).
|
|
The caching works whether there is a `Gemfile.lock` or not.
|
|
If there is a `Gemfile.lock`, `bundle config --local deployment true` is used.
|
|
|
|
To perform caching, this action will use `bundle config --local path vendor/bundle`.
|
|
Therefore, the Bundler `path` should not be changed in your workflow for the cache to work.
|
|
|
|
### Caching `bundle install` manually
|
|
|
|
You can also cache gems manually,
|
|
but this is not recommended because it is verbose and very difficult to use a correct cache key.
|
|
You can cache the installed gems with these two steps:
|
|
|
|
```yaml
|
|
- uses: actions/cache@v2
|
|
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 deployment true
|
|
bundle config path vendor/bundle
|
|
bundle install --jobs 4
|
|
```
|
|
|
|
When using a single OS, replace `${{ matrix.os }}` with the OS.
|
|
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](https://github.com/actions/cache).
|
|
The code above is a more complete version of the [Ruby - Bundler example](https://github.com/actions/cache/blob/master/examples.md#ruby---bundler).
|
|
Make sure to include `use-ruby` in the `key` to avoid conflicting with previous caches.
|
|
|
|
## Windows
|
|
|
|
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](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#using-a-specific-shell).
|
|
This can lead issues such as multi-line scripts [not working as expected](https://github.com/ruby/setup-ruby/issues/13).
|
|
* The `PATH` contains [multiple compiler toolchains](https://github.com/ruby/setup-ruby/issues/19). Use `where.exe` to debug which tool is used.
|
|
* For Ruby ≥ 2.4, MSYS2 is prepended to the `Path`, similar to what RubyInstaller2 does.
|
|
* For Ruby < 2.4, the DevKit MSYS tools are installed and prepended to the `Path`.
|
|
* JRuby on Windows has a known bug that `bundle exec rake` [fails](https://github.com/ruby/setup-ruby/issues/18).
|
|
|
|
## Versioning
|
|
|
|
It is highly recommended to use `ruby/setup-ruby@v1` for the version of this action.
|
|
This will provide the best experience by automatically getting bug fixes, new Ruby versions and new features.
|
|
|
|
If you instead choose a specific version (v1.2.3) or a commit sha, there will be no automatic bug fixes and
|
|
it will be your responsibility to update every time the action no longer works.
|
|
Make sure to always use the latest release before reporting an issue on GitHub.
|
|
|
|
This action follows semantic versioning with a moving `v1` branch.
|
|
This follows the [recommendations](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md) of GitHub Actions.
|
|
|
|
## Using self-hosted runners
|
|
You must meet the following parameters to use this action with self-hosted runners:
|
|
|
|
* Make sure that the operating system has `libyaml-0` installed
|
|
* The runner software is running as user `runner` with a home directory of `/home/runner`, or you have created a symlink for the home directory of whatever user that the runner is running as to `/home/runner`.
|
|
|
|
## History
|
|
|
|
This action used to be at `eregon/use-ruby-action` and was moved to the `ruby` organization.
|
|
Please [update](https://github.com/ruby/setup-ruby/releases/tag/v1.13.0) if you are using `eregon/use-ruby-action`.
|
|
|
|
## Credits
|
|
|
|
The current maintainer of this action is @eregon.
|
|
Most of the Windows logic is based on work by MSP-Greg.
|
|
Many thanks to MSP-Greg and Lars Kanis for the help with Ruby Installer.
|