• Stars
    star
    798
  • Rank 57,078 (Top 2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 5 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An action to download a prebuilt Ruby and add it to the PATH in 5 seconds

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.

Important: Prefer ruby/setup-ruby@v1. If you pin to a commit or release, only the Ruby versions available at the time of the commit will be available, and you will need to update it to use newer Ruby versions, see Versioning.

Supported Versions

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.0-preview1, head, debug, mingw, mswin, ucrt
jruby 9.1.17.0 - 9.4.3.0, head
truffleruby 19.3.0 - 23.0.0, head
truffleruby+graalvm 21.2.0 - 23.0.0, head

ruby-debug is the same as ruby-head but with assertions enabled (-DRUBY_DEBUG=1).

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.

Preview and RC versions of Ruby might be available too on Ubuntu and macOS (not on Windows). However, it is recommended to test against ruby-head rather than previews, as it provides more useful feedback for the Ruby core team and for upcoming changes.

Only release versions published by RubyInstaller are available on Windows. Due to that, Ruby 2.2 resolves to 2.2.6 on Windows and 2.2.10 on other platforms. Ruby 2.3 on Windows only has builds for 2.3.0, 2.3.1 and 2.3.3.

Note that Ruby ≀ 2.4 and the OpenSSL version it needs (1.0.2) are both end-of-life, which means Ruby ≀ 2.4 is unmaintained and considered insecure.

Supported Platforms

The action works on these GitHub-hosted runners images. Runner images not listed below are not supported yet. $OS-latest just alias to one of these images.

Operating System Supported
Ubuntu ubuntu-20.04, ubuntu-22.04
macOS macos-11, macos-12, macos-13
Windows windows-2019, windows-2022

The prebuilt releases are generated by ruby-builder and on Windows by RubyInstaller2. The mingw, ucrt and mswin builds are generated by ruby-loco. ruby-head is generated by ruby-dev-builder, jruby-head is generated by jruby-dev-builder, truffleruby-head is generated by truffleruby-dev-builder and truffleruby+graalvm is generated by graalvm-ce-dev-builds. The full list of available Ruby versions can be seen in ruby-builder-versions.json for Ubuntu and macOS and in windows-versions.json for Windows.

Usage

Single Job

name: My workflow
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.0' # Not needed with a .ruby-version file
        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
    - run: bundle exec rake

Matrix of Ruby Versions

This matrix tests all stable releases and head versions of MRI, JRuby and TruffleRuby on Ubuntu and macOS.

name: My workflow
on: [push, pull_request]
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
        # Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
        ruby: ['2.7', '3.0', '3.1', head, jruby, jruby-head, truffleruby, truffleruby-head]
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v3
    - uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby }}
        bundler-cache: true # runs 'bundle install' and caches installed gems automatically
    - run: bundle exec rake

Matrix of Gemfiles

name: My workflow
on: [push, pull_request]
jobs:
  test:
    strategy:
      fail-fast: false
      matrix:
        gemfile: [ rails5, rails6 ]
    runs-on: ubuntu-latest
    env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
      BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
    steps:
      - uses: actions/checkout@v3
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: '3.0'
          bundler-cache: true # runs 'bundle install' and caches installed gems automatically
      - run: bundle exec rake

See the GitHub Actions documentation for more details about the workflow syntax and the condition and expression syntax.

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.10)
  • version only like '2.6.5', assumes MRI for the engine
  • engine only like ruby and 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 for details.

RubyGems

By default, the default RubyGems version that comes with each Ruby is used. However, users can optionally customize the RubyGems version that they want by setting the rubygems input.

See action.yml for more details about the rubygems input.

If you're running into ArgumentError: wrong number of arguments (given 4, expected 1) errors with a stacktrace including Psych and RubyGems entries, you should be able to fix them by setting rubygems: 3.0.0 or higher.

Bundler

By default, Bundler is installed as follows:

  • If there is a Gemfile.lock file (or $BUNDLE_GEMFILE.lock or gems.locked) with a BUNDLED WITH section, that version of Bundler will be installed and used.
  • If the Ruby ships with Bundler 2.2+ (as a default gem), that version is used.
  • Otherwise, the latest compatible Bundler version is installed (Bundler 2 on Ruby >= 2.3, Bundler 1 on Ruby < 2.3).

This behavior can be customized, see action.yml for more details about the bundler input.

Caching bundle install automatically

This action provides a way to automatically run bundle install and cache the result:

    - uses: ruby/setup-ruby@v1
      with:
        bundler-cache: true

Note that any step doing bundle install (for the root Gemfile) or gem install bundler can be removed 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 or gems.rb) under the working-directory.
If there is a Gemfile.lock (or $BUNDLE_GEMFILE.lock or gems.locked), bundle config --local deployment true is used.

To use a Gemfile which is not at the root or has a different name, set BUNDLE_GEMFILE in the env at the job level as shown in the example.

bundle config

When using bundler-cache: true you might notice there is no good place to run bundle config ... commands. These can be replaced by BUNDLE_* environment variables, which are also faster. They should be set in the env at the job level as shown in the example. To find the correct the environment variable name, see the Bundler docs or look at .bundle/config after running bundle config --local KEY VALUE locally. You might need to "-quote the environment variable name in YAML if it has unusual characters like /.

To perform caching, this action will use bundle config --local path $PWD/vendor/bundle.
Therefore, the Bundler path should not be changed in your workflow for the cache to work (no bundle config path).

How it Works

When there is no lockfile, one is generated with bundle lock, which is the same as bundle install would do first before actually fetching any gem. In other words, it works exactly like bundle install. The hash of the generated lockfile is then used for caching, which is the only correct approach.

Dealing with a corrupted cache

In some rare scenarios (like using gems with C extensions whose functionality depends on libraries found on the system at the time of the gem's build) it may be necessary to ignore contents of the cache and get and build all the gems anew. In order to achieve this, set the cache-version option to any value other than 0 (or change it to a new unique value if you have already used it before.)

    - uses: ruby/setup-ruby@v1
      with:
        bundler-cache: true
        cache-version: 1

Caching bundle install manually

It is also possible to cache gems manually, but this is not recommended because it is verbose and very difficult to do correctly. There are many concerns which means using actions/cache is never enough for caching gems (e.g., incomplete cache key, cleaning old gems when restoring from another key, correctly hashing the lockfile if not checked in, OS versions, ABI compatibility for ruby-head, etc). So, please use bundler-cache: true instead and report any issue.

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.

  • Use Bundler 2.2.18+ on Windows (older versions have bugs) by not setting the bundler: input and ensuring there is no BUNDLED WITH 1.x.y in a checked-in Gemfile.lock.
  • 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. 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.
  • Use JRuby 9.2.20+ on Windows (older versions have bugs).
  • JRuby on Windows has multiple issues (jruby/jruby#7106, jruby/jruby#7182).

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 of GitHub Actions.

Using self-hosted runners

This action might work with self-hosted runners if the Runner Image is very similar to the ones used by GitHub runners. Notably:

  • Make sure to use the same operating system and version.
  • Make sure to use the same version of libssl.
  • Make sure that the operating system has libyaml-0 and libgmp installed
  • The default tool cache directory (/opt/hostedtoolcache on Linux, /Users/runner/hostedtoolcache on macOS, C:/hostedtoolcache/windows on Windows) must be writable by the runner user. This is necessary since the Ruby builds embed the install path when built and cannot be moved around.
  • /home/runner must be writable by the runner user.

In other cases, you will need to install Ruby in the runner tool cache as shown by the action when it detects that case (run it so it will show you where to install Ruby). You could of course also not use this action and e.g. use Ruby from a system package or use a Docker image instead.

History

This action used to be at eregon/use-ruby-action and was moved to the ruby organization. Please update 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.

More Repositories

1

ruby

The Ruby Programming Language
Ruby
20,732
star
2

rake

A make-like build utility for Ruby.
Ruby
2,336
star
3

rbs

Type Signature for Ruby
Ruby
1,952
star
4

did_you_mean

The gem that has been saving people from typos since 2014
Ruby
1,871
star
5

debug

Debugging functionality for Ruby
Ruby
1,114
star
6

www.ruby-lang.org

Source of the https://www.ruby-lang.org website.
Ruby
856
star
7

prism

Prism Ruby parser
C
840
star
8

rdoc

RDoc produces HTML and online documentation for Ruby projects.
Ruby
833
star
9

typeprof

An experimental type-level Ruby interpreter for testing and understanding Ruby code
Ruby
746
star
10

ruby.wasm

ruby.wasm is a collection of WebAssembly ports of the CRuby.
Ruby
676
star
11

spec

The Ruby Spec Suite aka ruby/spec
Ruby
556
star
12

psych

A libyaml wrapper for Ruby
Ruby
543
star
13

racc

Racc is an LALR(1) parser generator. It is written in Ruby itself, and generates ruby programs.
Yacc
535
star
14

irb

interactive Ruby
Ruby
383
star
15

syntax_suggest

Searching for unexpected `end` syntax errors takes a lot of time. Let this gem do it for you!
Ruby
344
star
16

curses

Ruby binding for curses, ncurses, and PDCurses. Formerly part of the ruby standard library.
C
292
star
17

gem_rbs_collection

A collection of RBS for gems.
Ruby
262
star
18

reline

The compatible library with the API of Ruby's stdlib 'readline'
Ruby
256
star
19

webrick

HTTP server toolkit
Ruby
246
star
20

openssl

Provides SSL, TLS and general purpose cryptography.
C
240
star
21

TryRuby

This 4th iteration of TryRuby is a website where you can learn the Ruby language.
Ruby
226
star
22

power_assert

Power Assert for Ruby
Ruby
187
star
23

lrama

Pure Ruby LALR parser generator
Ruby
184
star
24

rss

RSS reading and writing
Ruby
182
star
25

vscode-rdbg

VSCode Ruby rdbg Debugger
TypeScript
176
star
26

csv

CSV Reading and Writing
Ruby
159
star
27

drb

Distributed object system for Ruby
Ruby
154
star
28

fiddle

A libffi wrapper for Ruby.
Ruby
147
star
29

error_highlight

The gem enhances Exception#message by adding a short explanation where the exception is raised
Ruby
145
star
30

benchmark

The Benchmark module provides methods for benchmarking Ruby code, giving detailed reports on the time taken for each task.
Ruby
136
star
31

rexml

REXML is an XML toolkit for Ruby
Ruby
130
star
32

timeout

Timeout provides a way to auto-terminate a potentially long-running operation if it hasn't finished in a fixed amount of time.
Ruby
128
star
33

bigdecimal

Arbitrary-precision decimal floating-point number library for Ruby
C
118
star
34

tk

Tk interface module using tcltklib
Ruby
115
star
35

ostruct

OpenStruct implementation
Ruby
106
star
36

logger

simple logging utility
Ruby
103
star
37

erb

An easy to use but powerful templating system for Ruby
Ruby
103
star
38

net-http

Net::HTTP provides a rich library which can be used to build HTTP user-agents.
Ruby
84
star
39

open3

Open3 gives you access to stdin, stdout, and stderr when running other programs.
Ruby
79
star
40

dev-meeting-log

78
star
41

docker-images

Ruby Docker Images
Ruby
74
star
42

tracer

Outputs a source level execution trace of a Ruby program.
Ruby
71
star
43

all-ruby

Run various versions of ruby command
Ruby
71
star
44

uri

URI is a module providing classes to handle Uniform Resource Identifiers
Ruby
69
star
45

pstore

PStore implements a file based persistence mechanism based on a Hash.
Ruby
67
star
46

date

A subclass of Object includes Comparable module for handling dates.
C
66
star
47

strscan

Provides lexical scanning operations on a String.
C
66
star
48

ipaddr

A class to manipulate an IP address
Ruby
62
star
49

ruby2_keywords

Shim library for Module#ruby2_keywords
Ruby
61
star
50

fileutils

Several file utility methods for copying, moving, removing, etc.
Ruby
60
star
51

mspec

RSpec-like test runner for the Ruby Spec Suite
Ruby
57
star
52

shell

Shell implements an idiomatic Ruby interface for common UNIX shell commands
Ruby
57
star
53

matrix

An implementation of Matrix and Vector classes
Ruby
56
star
54

net-telnet

Provides telnet client functionality.
Ruby
56
star
55

iconv

iconv wrapper
C
54
star
56

net-imap

Ruby client api for Internet Message Access Protocol
Ruby
53
star
57

io-console

add console capabilities to IO instance
Ruby
51
star
58

docs.ruby-lang.org

Source of the docs.ruby-lang.org site
Ruby
48
star
59

digest

Provides a framework for message digest libraries.
C
48
star
60

optparse

OptionParser is a class for command-line option analysis.
Ruby
47
star
61

net-smtp

This library provides functionality to send internet mail via SMTP, the Simple Mail Transfer Protocol.
Ruby
44
star
62

zlib

Ruby interface for the zlib compression/decompression library
C
43
star
63

securerandom

Interface for secure random number generator
Ruby
42
star
64

chkbuild

Continuous Integration tool, mainly for Ruby
Ruby
41
star
65

open-uri

OpenURI is an easy-to-use wrapper for Net::HTTP, Net::HTTPS and Net::FTP.
Ruby
41
star
66

forwardable

Provides delegation of specified methods to a designated object
Ruby
40
star
67

xmlrpc

The Ruby standard library package 'xmlrpc'
Ruby
35
star
68

resolv

A thread-aware DNS resolver library written in Ruby
Ruby
32
star
69

prime

Prime numbers and factorization library.
Ruby
32
star
70

cgi

CGI is a large class, providing several categories of methods, many of which are mixed in from other modules.
Ruby
32
star
71

stringio

Pseudo `IO` class from/to `String`.
Java
31
star
72

rubyci

The Ruby CI for chkbuild
Ruby
31
star
73

gserver

GServer implements a generic server
Ruby
31
star
74

ruby-builder

A repository building Ruby/JRuby/TruffleRuby releases to be used in GitHub Actions
Ruby
31
star
75

observer

The Observer pattern provides a simple mechanism for one object to inform a set of interested third-party objects when its state changes.
Ruby
29
star
76

snap.ruby

Ruby snap
HTML
29
star
77

tempfile

A utility class for managing temporary files.
Ruby
26
star
78

etc

Provides access to information typically stored in UNIX /etc directory.
C
26
star
79

profile

Ruby
26
star
80

net-ftp

This class implements the File Transfer Protocol.
Ruby
24
star
81

singleton

The Singleton module implements the Singleton pattern.
Ruby
24
star
82

yaml

This module provides a Ruby interface for data serialization in YAML format.
Ruby
24
star
83

net-protocol

The abstruct interface for net-* client.
Ruby
24
star
84

play-ruby

Ruby Playground Website
TypeScript
24
star
85

pathname

Pathname represents the name of a file or directory on the filesystem, but not the file itself.
Ruby
22
star
86

actions

Ruby
22
star
87

sdbm

Provides a simple file-based key-value store with String keys and values.
C
22
star
88

un

Utilities to replace common UNIX commands
Ruby
21
star
89

set

This library provides the Set class, which deals with a collection of unordered values with no duplicates.
Ruby
21
star
90

ruby-dev-builder

CRuby Dev Builds for GitHub Actions
Ruby
20
star
91

syck

Syck from stdlib turned in to a gem
C
20
star
92

pp

Provides a PrettyPrinter for Ruby objects
Ruby
19
star
93

English

Ruby
19
star
94

base64

Support for encoding and decoding binary data using a Base64 representation
Ruby
18
star
95

git.ruby-lang.org

Manifest for the Ruby git server
Ruby
17
star
96

net-pop

This library provides functionality for retrieving email via POP3, the Post Office Protocol version 3. For details of POP3
Ruby
17
star
97

repl_type_completor

Ruby
17
star
98

delegate

This library provides three different ways to delegate method calls to an object.
Ruby
17
star
99

rbs_json_schema

Generate RBS files from JSON Schema
Ruby
16
star
100

vscode-typeprof

TypeScript
16
star