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 ✅️!
Features
- 🚀 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
Requirements
- 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 |
Key Differences with setup-ruby
| 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) |
Basic Usage
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
With Gem Installation
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
Using Version Files
When 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
Enough Talk, Where?
Inputs
| 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 (ignored if rv-git-ref is set) |
latest |
rv-git-ref |
Git branch, tag, or commit SHA to build rv from source | '' |
ore-version |
Version of ore to install (ignored if ore-git-ref is set) |
latest |
ore-git-ref |
Git branch, tag, or commit SHA to build ore from source | '' |
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 |
no-document |
Skip generating documentation (ri/rdoc) for installed gems. Creates ~/.gemrc with gem: --no-document if file doesn't exist |
true |
token |
GitHub token for API calls | ${{ github.token }} |
Outputs
| 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 |
Examples
Matrix Build
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", "4.0"]
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
Production Gems Only
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
without-groups: 'development,test'
Latest Ruby with Latest RubyGems and Bundler
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: ruby
rubygems: latest
bundler: latest
ore-install: true
Specific RubyGems Version
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
rubygems: '3.5.0'
ore-install: true
Skip Native Extensions
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
skip-extensions: true
Custom Working Directory
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: '3.4'
ore-install: true
working-directory: './my-app'
Specific Tool Versions
- 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: true
Custom Retry Configuration
If 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'
Enable Documentation Generation
Include documentation (ri/rdoc) for installed gems (default skips documentation for faster installation):
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: "3.4"
ore-install: true
no-document: false
Building rv or ore from Source
You can build rv or ore from a git branch, tag, or commit SHA instead of using a released version.
This is useful for testing unreleased features or bug fixes. Required toolchains (Rust for rv, Go for ore)
are automatically installed. Fork syntax (pboling:feat/myexperiment) is supported to test out feature branches in forks of ore or rv.
# Test an ore feature branch
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: "3.4"
ore-install: true
ore-git-ref: "feat/bundle-gemfile-support"
# Test a pre-release rv tag
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: "3.4"
rv-git-ref: "v0.5.0-beta1"
# Test both from main branches
- uses: appraisal-rb/setup-ruby-flash@v1
with:
ruby-version: "3.4"
rv-git-ref: "main"
ore-install: true
ore-git-ref: "main"
Migration from setup-ruby
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
With Latest RubyGems and Bundler
# 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
Acknowledgements
- setup-ruby the venerable mainstay for many years, and inspiration for this project.
- rv by Spinel Cooperative
- ore by Contriboss
Support & Funding Info
I am a full-time FLOSS maintainer. If you find my work valuable I ask that you become a sponsor. Every dollar helps!
About rv and ore
rv
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
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.
Cover photo (cropped) by Kyle Hinkson on Unsplash
Top comments (0)