Find out how fast my workflows can go!
- You, possibly
A fast GitHub Action for fast Ruby environment setup using rv for Ruby installation and ore for gem management.
⚡ Install Ruby in under 2 seconds — no compilation required!
⚡ Install Gems 50% faster — using ORE ✅️!
- 🚀 Lightning-fast Ruby installation via prebuilt binaries from rv
- 📦 Rapid gem installation with ore (Bundler-compatible, ~50% faster)
- 💾 Intelligent caching for both Ruby and gems
- 🔒 Security auditing via
ore audit - 🐧 Linux & macOS support (x86_64 and ARM64)
- ☕️ Gitea Actions support
- 🦊 Forgejo Actions support
- 🧊 Codeberg Actions support
- 🐙 GitHub Actions support
- Operating Systems: Ubuntu 22.04+, macOS 14+
- Architectures: x86_64, ARM64
- Ruby Versions: 3.2, 3.3, 3.4, 4.0
| # | Important | Alternative |
|---|---|---|
| 1 | Windows is not supported | ruby/setup-ruby |
| 2 | Ruby <= 3.1 is not supported | ruby/setup-ruby |
Click to see historical background around why I built this
| 📍 NOTE |
|---|
| RubyGems (the GitHub org, not the website) suffered a hostile takeover in September 2025. |
| Ultimately 4 maintainers were hard removed and an reason has been given for only 1 of those, while 2 others resigned in protest. |
| It is a complicated story which is difficult to parse quickly. |
| Simply put - there was active policy for adding or removing maintainers/owners of rubygems and bundler, and those policies were not followed. |
| I'm adding notes like this to gems because I don't condone theft of repositories or gems from their rightful owners. |
| If a similar theft happened with my repos/gems, I'd hope some would stand up for me. |
| Disenfranchised former-maintainers have started gem.coop. |
| Once available I will publish there exclusively; unless RubyCentral makes amends with the community. |
| The "Technology for Humans: Joel Draper" podcast episode by reinteractive is the most cogent summary I'm aware of. |
| See here, here and here for more info on what comes next. |
| What I'm doing: A (WIP) proposal for bundler/gem scopes, and a (WIP) proposal for a federated gem server. |
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: trueWhen ruby-version is set to default (the default), setup-ruby-flash reads from:
.ruby-version.tool-versions(asdf format)mise.toml
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ore-install: true| Input | Description | Default |
|---|---|---|
ruby-version |
Ruby version to install (e.g., 3.4, 3.4.1). Use ruby for latest stable version, or default to read from version files. |
default |
rubygems |
RubyGems version: default, latest, or a version number (e.g., 3.5.0) |
default |
bundler |
Bundler version: Gemfile.lock, default, latest, none, or a version number |
Gemfile.lock |
ore-install |
Run ore install and cache gems |
false |
working-directory |
Directory for version files and Gemfile | . |
cache-version |
Cache version string for invalidation | v1 |
rv-version |
Version of rv to install | latest |
ore-version |
Version of ore to install | latest |
skip-extensions |
Skip building native extensions | false |
without-groups |
Gem groups to exclude (comma-separated) | '' |
ruby-install-retries |
Number of retry attempts for Ruby installation (with exponential backoff) | 3 |
token |
GitHub token for API calls | ${{ github.token }} |
| Output | Description |
|---|---|
ruby-version |
The installed Ruby version |
ruby-prefix |
The path to the Ruby installation |
rv-version |
The installed rv version |
rubygems-version |
The installed RubyGems version |
bundler-version |
The installed Bundler version |
ore-version |
The installed ore version |
cache-hit |
Whether gems were restored from cache |
name: CI
on: [push, pull_request]
jobs:
test:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
ruby: ['3.2', '3.3', '3.4']
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: ${{ matrix.ruby }}
ore-install: true
- run: bundle exec rake test- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
without-groups: 'development,test'- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: ruby
rubygems: latest
bundler: latest
ore-install: true- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
rubygems: '3.5.0'
ore-install: true- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
skip-extensions: true- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
working-directory: './my-app'- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4.1'
rv-version: '0.4.0'
ore-version: '0.1.0'
ore-install: trueIf you experience intermittent failures due to GitHub API rate limiting, you can adjust the number of retry attempts:
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ruby-install-retries: '5'setup-ruby-flash is designed to be a near drop-in replacement for ruby/setup-ruby on supported platforms:
# Before (setup-ruby)
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.4'
bundler-cache: true
- run: bundle exec rake test
# After (setup-ruby-flash)
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
- run: bundle exec rake test# Before (setup-ruby)
- uses: ruby/setup-ruby@v1
with:
ruby-version: ruby
rubygems: latest
bundler: latest
# After (setup-ruby-flash)
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: ruby
rubygems: latest
bundler: latest| Feature | setup-ruby | setup-ruby-flash |
|---|---|---|
| Ruby Install | ~5 seconds | < 2 seconds |
| Gem Install | Bundler | ore (~50% faster) |
ruby-version: ruby |
✅ latest stable | ✅ latest stable |
rubygems: latest |
✅ | ✅ |
bundler: latest |
✅ | ✅ |
| Windows | ✅ | ❌ |
| Ruby < 3.2 | ✅ | ❌ |
| JRuby | ✅ | ❌ (planned) |
| TruffleRuby | ✅ | ❌ (planned) |
| Security Audit | ❌ | ✅ (ore audit) |
rv is an extremely fast Ruby version manager written in Rust. It downloads prebuilt Ruby binaries, eliminating the need for compilation. Created by @indirect, long-time project lead for Bundler and RubyGems.
ore is a fast gem installer written in Go. It's Bundler-compatible but performs downloads significantly faster using Go's concurrency features. Use bundle exec to run gem commands after ore installs your gems. Created by @seuros, a long time Rubyist, and prolific writer.
# Setup
bundle install
# Run tests
rake spec
# Run linter
rake lint
# Run all checks
rake ciBug reports and pull requests are welcome on GitHub at https://github.com/appraisal-rb/setup-ruby-flash.
The MIT License covers this software.
See LICENSE for details, but note the following:
- The terms of the MIT License let you use and share this software for all purposes, commercial, and non-commercial, for free.
- However, the MIT License allows selling copies of the software for a fee, and I have chosen to do this for big businesses, as an ethical matter, not a legal matter.
- Paid (optional) licenses for big businesses are available on fair, reasonable, and nondiscriminatory terms.
- So, anyone can use the software for free in any and all cases... But to quote the MIT License itself,
Permission is hereby granted, free of charge, to any person ..., to deal in the Software without restriction, including without limitation the rights to ... sell copies of the Software
Open source will die without commercial support, so I am letting you know when and what you should pay as an ethical matter, not as a legal matter.
Definitions of Terms (What is a Big Business?)
The purpose of these definitions is to explain when I am asking you, as an ethical matter (not a legal one), to consider purchasing a commercial license.
These definitions are inspired by the Big Time Public License version 2.0.2 and are provided solely for these voluntary ethical guidelines. They do not modify or limit the MIT License that legally governs this project.
You may use the software for any noncommercial purpose.
Personal use for research, experiment, and testing for the benefit of public knowledge, personal study, private entertainment, hobby projects, amateur pursuits, or religious observance, without any anticipated commercial application, count as use for noncommercial purposes.
Use by any charitable organization, educational institution, public research organization, public safety or health organization, environmental protection organization, or government institution counts as use for noncommercial purposes, regardless of the source of funding or obligations resulting from the funding.
You may use the software for the benefit of your company if it meets all these criteria:
-
had fewer than 20 total individuals working as employees and independent contractors at all times during the last tax year
-
earned less than $1,000,000 total revenue in the last tax year
-
received less than $1,000,000 total debt, equity, and other investment in the last five tax years, counting investment in predecessor companies that reorganized into, merged with, or spun out your company
All dollar figures are United States dollars as of 2019. Adjust them for inflation according to the United States Bureau of Labor Statistics' consumer price index for all urban consumers, United States city average, for all items, not seasonally adjusted, with 1982–1984=100 reference base.
You may use the software for the benefit of your company:
-
for 128 days after your company stops qualifying under Small Business
-
indefinitely, if the licensor or their legal successor does not offer fair, reasonable, and nondiscriminatory terms for a commercial license for the software within 32 days of written request and negotiate in good faith to conclude a deal
$0.25 USD per employee per year for qualifying "Big Business" commercial use, as defined above.
If you're interested in licensing setup-ruby-flash for your business,
please contact [email protected],
and join the Official Discord 👉️ .
40 employees = $10 USD per year
Note: You should also donate to Spinel Cooperative and Contriboss, as this project would not exist without them.
Request a fair commercial license by sending an email to [email protected] and messaging the #org-appraisal-rb channel on the Official Discord 👉️ . If both of your contact attempts fail to elicit a response within the time period allotted in Big Business the licensor will consider that equivalent to a fair commercial license under Big Business.
Maintainers have teeth and need to pay their dentists. After getting laid off in an RIF in March, and encountering difficulty finding a new one, I began spending most of my time building open source tools. I'm hoping to be able to pay for my kids' health insurance this month, so if you value the work I am doing, I need your support. Please consider sponsoring me or the project.
To join the community or get help 👇️ Join the Discord.
To say "thanks!" ☝️ Join the Discord or 👇️ send money.
- setup-ruby the venerable mainstay for many years, and inspiration for this project.
- rv by Spinel Cooperative
- ore by Contriboss