Skip to content

Commit ffc3a52

Browse files
committed
Updating to work with BuildJet's cache package - v1.227.0
1 parent 1a61595 commit ffc3a52

1 file changed

Lines changed: 9 additions & 284 deletions

File tree

README.md

Lines changed: 9 additions & 284 deletions
Original file line numberDiff line numberDiff line change
@@ -1,287 +1,12 @@
1-
# setup-ruby
1+
<div align="center">
2+
<img src="https://buildjet.com/buildjet-for-github-actions-logo2.svg" height="38">
3+
</div>
24

3-
This action downloads a prebuilt ruby and adds it to the `PATH`.
5+
---
46

5-
It is very efficient and takes about 5 seconds to download, extract and add the given Ruby to the `PATH`.
6-
No extra packages need to be installed.
7+
This is a fork by [BuildJet for GitHub Actions](https://buildjet.com/for-github-actions).
8+
It is **fully compatible with the official setup-ruby action**, simply replace `ruby/setup-ruby` with `buildjet/setup-ruby`.
9+
Under the hood we simply switch the underlying caching package to our fully compatible `buildjet/cache`. No other changes have been made to this package.
710

8-
**Important:** Prefer `ruby/setup-ruby@v1`.
9-
If you pin to a commit or release, only the Ruby versions available at the time of the commit
10-
will be available, and you will need to update it to use newer Ruby versions, see [Versioning](#versioning).
11-
12-
### Supported Versions
13-
14-
This action currently supports these versions of MRI, JRuby and TruffleRuby:
15-
16-
| Interpreter | Versions |
17-
| ----------- | -------- |
18-
| `ruby` | 1.9.3, 2.0.0, 2.1.9, 2.2, all versions from 2.3.0 until 3.4.2, head, debug, mingw, mswin, ucrt |
19-
| `jruby` | 9.1.17.0 - 9.4.12.0, head |
20-
| `truffleruby` | 19.3.0 - 24.2.0, head |
21-
| `truffleruby+graalvm` | 21.2.0 - 24.2.0, head |
22-
23-
`ruby-debug` is the same as `ruby-head` but with assertions enabled (`-DRUBY_DEBUG=1`).
24-
25-
`ruby-asan` is the same as `ruby-head` but with AddressSanitizer (ASan) enabled, helpful for finding memory issues in native extensions.
26-
Native extensions are automatically compiled with AddressSanitizer when using `ruby-asan`.
27-
`ruby-asan` is currently only available on `ubuntu-24.04`.
28-
29-
`ruby-3.4-asan` is similar to `ruby-asan` but built from the latest stable 3.4 release tag.
30-
Like `ruby-asan`, it's currently only available on `ubuntu-24.04`.
31-
32-
Regarding Windows ruby master builds, `mingw` is a MSYS2/MinGW build, `head` & `ucrt` are MSYS2/UCRT64
33-
builds, and `mswin` is a MSVC/VS 2022 build.
34-
35-
Preview and RC versions of Ruby might be available too on Ubuntu and macOS (not on Windows).
36-
However, it is recommended to test against `ruby-head` rather than previews,
37-
as it provides more useful feedback for the Ruby core team and for upcoming changes.
38-
39-
Only release versions published by [RubyInstaller](https://rubyinstaller.org/downloads/archives/)
40-
are available on Windows. Due to that, Ruby 2.2 resolves to 2.2.6 on Windows and 2.2.10
41-
on other platforms. Ruby 2.3 on Windows only has builds for 2.3.0, 2.3.1 and 2.3.3.
42-
43-
Note that Ruby ≤ 2.4 and the OpenSSL version it needs (1.0.2) are both end-of-life,
44-
which means Ruby ≤ 2.4 is unmaintained and considered insecure.
45-
46-
### Supported Platforms
47-
48-
The action works on these [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources) images. Runner images not listed below are not supported yet. `$OS-latest` just alias to one of these images.
49-
50-
| Operating System | Supported |
51-
| ---------------- | --------- |
52-
| Ubuntu | `ubuntu-20.04`, `ubuntu-22.04`, `ubuntu-24.04`, `ubuntu-22.04-arm`, `ubuntu-24.04-arm` |
53-
| macOS | `macos-13` and newer versions |
54-
| Windows | `windows-2019`, `windows-2022` |
55-
56-
The prebuilt releases are generated by [ruby-builder](https://github.com/ruby/ruby-builder)
57-
and on Windows by [RubyInstaller2](https://github.com/oneclick/rubyinstaller2).
58-
The `mingw`, `ucrt` and `mswin` builds are generated by [ruby-loco](https://github.com/MSP-Greg/ruby-loco).
59-
`ruby-head` is generated by [ruby-dev-builder](https://github.com/ruby/ruby-dev-builder),
60-
`jruby-head` is generated by [jruby-dev-builder](https://github.com/ruby/jruby-dev-builder),
61-
`truffleruby-head` and `truffleruby+graalvm-head` are generated by [truffleruby-dev-builder](https://github.com/ruby/truffleruby-dev-builder).
62-
The full list of available Ruby versions can be seen in [ruby-builder-versions.json](ruby-builder-versions.json) for Ubuntu and macOS
63-
(although some combinations are not available, see [the full list](https://github.com/ruby/ruby-builder/releases/tag/toolcache))
64-
and in [windows-versions.json](windows-versions.json) for Windows.
65-
66-
## Usage
67-
68-
### Single Job
69-
70-
```yaml
71-
name: My workflow
72-
on: [push, pull_request]
73-
jobs:
74-
test:
75-
runs-on: ubuntu-latest
76-
steps:
77-
- uses: actions/checkout@v4
78-
- uses: ruby/setup-ruby@v1
79-
with:
80-
ruby-version: '3.3' # Not needed with a .ruby-version, .tool-versions or mise.toml
81-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
82-
- run: bundle exec rake
83-
```
84-
85-
### Matrix of Ruby Versions
86-
87-
This matrix tests all stable releases and `head` versions of MRI, JRuby and TruffleRuby on Ubuntu and macOS.
88-
89-
```yaml
90-
name: My workflow
91-
on: [push, pull_request]
92-
jobs:
93-
test:
94-
strategy:
95-
fail-fast: false
96-
matrix:
97-
os: [ubuntu-latest, macos-latest]
98-
# Due to https://github.com/actions/runner/issues/849, we have to use quotes for '3.0'
99-
ruby: ['2.7', '3.0', '3.1', '3.2', '3.3', head, jruby, jruby-head, truffleruby, truffleruby-head]
100-
runs-on: ${{ matrix.os }}
101-
steps:
102-
- uses: actions/checkout@v4
103-
- uses: ruby/setup-ruby@v1
104-
with:
105-
ruby-version: ${{ matrix.ruby }}
106-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
107-
- run: bundle exec rake
108-
```
109-
110-
### Matrix of Gemfiles
111-
112-
```yaml
113-
name: My workflow
114-
on: [push, pull_request]
115-
jobs:
116-
test:
117-
strategy:
118-
fail-fast: false
119-
matrix:
120-
gemfile: [ rails5, rails6 ]
121-
runs-on: ubuntu-latest
122-
env: # $BUNDLE_GEMFILE must be set at the job level, so it is set for all steps
123-
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.gemfile }}.gemfile
124-
steps:
125-
- uses: actions/checkout@v4
126-
- uses: ruby/setup-ruby@v1
127-
with:
128-
ruby-version: '3.3'
129-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
130-
- run: bundle exec rake
131-
```
132-
133-
See the GitHub Actions documentation for more details about the
134-
[workflow syntax](https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions)
135-
and the [condition and expression syntax](https://help.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions).
136-
137-
### Supported Version Syntax
138-
139-
* engine-version like `ruby-2.6.5` and `truffleruby-19.3.0`
140-
* short version like `'2.6'`, automatically using the latest release matching that version (`2.6.10`)
141-
* version only like `'2.6.5'`, assumes MRI for the engine
142-
* engine only like `ruby` and `truffleruby`, uses the latest stable release of that implementation
143-
* `.ruby-version` reads from the project's `.ruby-version` file
144-
* `.tool-versions` reads from the project's `.tool-versions` file
145-
* `mise.toml` reads from the project's `mise.toml` file
146-
* If the `ruby-version` input is not specified, `.ruby-version` is tried first, followed by `.tool-versions`, followed by `mise.toml`
147-
148-
### Working Directory
149-
150-
The `working-directory` input can be set to resolve `.ruby-version`, `.tool-versions`, `mise.toml` and `Gemfile.lock`
151-
if they are not at the root of the repository, see [action.yml](action.yml) for details.
152-
153-
### RubyGems
154-
155-
By default, the default RubyGems version that comes with each Ruby is used.
156-
However, users can optionally customize the RubyGems version that they want by
157-
setting the `rubygems` input.
158-
159-
See [action.yml](action.yml) for more details about the `rubygems` input.
160-
161-
If you're running into `ArgumentError: wrong number of arguments (given 4,
162-
expected 1)` errors with a stacktrace including Psych and RubyGems entries, you
163-
should be able to fix them by setting `rubygems: 3.0.0` or higher.
164-
165-
### Bundler
166-
167-
By default, Bundler is installed as follows:
168-
169-
* If there is a `Gemfile.lock` file (or `$BUNDLE_GEMFILE.lock` or `gems.locked`) with a `BUNDLED WITH` section,
170-
that version of Bundler will be installed and used.
171-
* If the Ruby ships with Bundler 2.2+ (as a default gem), that version is used.
172-
* Otherwise, the latest compatible Bundler version is installed (Bundler 2 on Ruby >= 2.3, Bundler 1 on Ruby < 2.3).
173-
174-
This behavior can be customized, see [action.yml](action.yml) for more details about the `bundler` input.
175-
176-
### Caching `bundle install` automatically
177-
178-
This action provides a way to automatically run `bundle install` and cache the result:
179-
```yaml
180-
- uses: ruby/setup-ruby@v1
181-
with:
182-
bundler-cache: true
183-
```
184-
185-
Note that any step doing `bundle install` (for the root `Gemfile`) or `gem install bundler` can be removed with `bundler-cache: true`.
186-
187-
This caching speeds up installing gems significantly and avoids too many requests to RubyGems.org.
188-
It needs a `Gemfile` (or `$BUNDLE_GEMFILE` or `gems.rb`) under the [`working-directory`](#working-directory).
189-
If there is a `Gemfile.lock` (or `$BUNDLE_GEMFILE.lock` or `gems.locked`), `bundle config --local deployment true` is used.
190-
191-
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
192-
as shown in the [example](#matrix-of-gemfiles).
193-
194-
#### bundle config
195-
196-
When using `bundler-cache: true` you might notice there is no good place to run `bundle config ...` commands.
197-
These can be replaced by `BUNDLE_*` environment variables, which are also faster.
198-
They should be set in the `env` at the job level as shown in the [example](#matrix-of-gemfiles).
199-
To find the correct the environment variable name, see the [Bundler docs](https://bundler.io/man/bundle-config.1.html) or look at `.bundle/config` after running `bundle config --local KEY VALUE` locally.
200-
You might need to `"`-quote the environment variable name in YAML if it has unusual characters like `/`.
201-
202-
To perform caching, this action will use `bundle config --local path $PWD/vendor/bundle`.
203-
Therefore, the Bundler `path` should not be changed in your workflow for the cache to work (no `bundle config path`).
204-
205-
#### How it Works
206-
207-
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.
208-
In other words, it works exactly like `bundle install`.
209-
The hash of the generated lockfile is then used for caching, which is the only correct approach.
210-
211-
#### Dealing with a corrupted cache
212-
213-
In some rare scenarios (like using gems with C extensions whose functionality depends on libraries found on the system
214-
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.
215-
In order to achieve this, set the `cache-version` option to any value other than `0` (or change it to a new unique value
216-
if you have already used it before.)
217-
218-
```yaml
219-
- uses: ruby/setup-ruby@v1
220-
with:
221-
bundler-cache: true
222-
cache-version: 1
223-
```
224-
225-
#### Caching `bundle install` manually
226-
227-
It is also possible to cache gems manually, but this is not recommended because it is verbose and *very difficult* to do correctly.
228-
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).
229-
So, please use `bundler-cache: true` instead and report any issue.
230-
231-
## Windows
232-
233-
Note that running CI on Windows can be quite challenging if you are not very familiar with Windows.
234-
It is recommended to first get your build working on Ubuntu and macOS before trying Windows.
235-
236-
* Use Bundler 2.2.18+ on Windows (older versions have [bugs](https://github.com/ruby/setup-ruby/issues/209#issuecomment-889064123)) by not setting the `bundler:` input and ensuring there is no `BUNDLED WITH 1.x.y` in a checked-in `Gemfile.lock`.
237-
* 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).
238-
This can lead issues such as multi-line scripts [not working as expected](https://github.com/ruby/setup-ruby/issues/13).
239-
* The `PATH` contains [multiple compiler toolchains](https://github.com/ruby/setup-ruby/issues/19). Use `where.exe` to debug which tool is used.
240-
* For Ruby ≥ 2.4, MSYS2 is prepended to the `Path`, similar to what RubyInstaller2 does.
241-
* For Ruby < 2.4, the DevKit MSYS tools are installed and prepended to the `Path`.
242-
* Use JRuby 9.2.20+ on Windows (older versions have [bugs](https://github.com/ruby/setup-ruby/issues/18#issuecomment-889072695)).
243-
* JRuby on Windows has multiple issues ([jruby/jruby#7106](https://github.com/jruby/jruby/issues/7106), [jruby/jruby#7182](https://github.com/jruby/jruby/issues/7182)).
244-
* When compiling extension code, note that the packages required to build Ruby are included when using Windows 2022, but that Windows 2019 does not include all of them, and may require installing package(s). This can be done with [setup-ruby-pkgs](https://github.com/ruby/setup-ruby-pkgs) or via MSYS2's pacman. These packages may be required when installing or updating Ruby std-lib extension gems.
245-
246-
## Versioning
247-
248-
It is highly recommended to use `ruby/setup-ruby@v1` for the version of this action.
249-
This will provide the best experience by automatically getting bug fixes, new Ruby versions and new features.
250-
251-
If you instead choose a specific version (v1.2.3) or a commit sha, there will be no automatic bug fixes and
252-
it will be your responsibility to update every time the action no longer works.
253-
Make sure to always use the latest release before reporting an issue on GitHub.
254-
255-
This action follows semantic versioning with a moving `v1` branch.
256-
This follows the [recommendations](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md) of GitHub Actions.
257-
258-
## Using self-hosted runners
259-
260-
This action might work with [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners)
261-
if the [Runner Image](https://github.com/actions/runner-images) is very similar to the ones used by GitHub runners. Notably:
262-
263-
* Make sure to use the same operating system and version.
264-
* Make sure to use the same version of libssl.
265-
* Make sure that the operating system has `libyaml-0` and [`libgmp`](https://stackoverflow.com/questions/26555902/ruby-v-dyld-library-not-loaded-usr-local-lib-libgmp-10-dylib) installed
266-
* The default tool cache directory (`/opt/hostedtoolcache` on Linux, `/Users/runner/hostedtoolcache` on macOS,
267-
`C:/hostedtoolcache/windows` on Windows) must be writable by the `runner` user.
268-
This is necessary since the Ruby builds embed the install path when built and cannot be moved around.
269-
* `/home/runner` must be writable by the `runner` user.
270-
271-
In other cases, you will need to install Ruby in the runner tool cache as shown by the action when it detects that case
272-
(run it so it will show you where to install Ruby).
273-
You could of course also not use this action and e.g. use Ruby from a system package or use a Docker image instead.
274-
275-
See also the [`self-hosted:` input](action.yml).
276-
You can set it to `true` if you want to use custom-built Rubies in your self-hosted toolcache instead of prebuild Rubies.
277-
278-
## History
279-
280-
This action used to be at `eregon/use-ruby-action` and was moved to the `ruby` organization.
281-
Please [update](https://github.com/ruby/setup-ruby/releases/tag/v1.13.0) if you are using `eregon/use-ruby-action`.
282-
283-
## Credits
284-
285-
The current maintainer of this action is @eregon.
286-
Most of the Windows logic is based on work by MSP-Greg.
287-
Many thanks to MSP-Greg and Lars Kanis for the help with Ruby Installer.
11+
For help migrating to BuildJet's setup-ruby, please visit our [migration guide](https://buildjet.com/for-github-actions/docs/guides/migrating-to-buildjet-cache).
12+
For detailed usage instructions, please visit the [official `ruby/setup-ruby` repository](https://github.com/ruby/setup-ruby).

0 commit comments

Comments
 (0)