diff --git a/README.md b/README.md
index 34e792c5..e1ad04e3 100755
--- a/README.md
+++ b/README.md
@@ -131,7 +131,7 @@ On Windows, [RubyInstaller][6] is used to install MRI.
#### Fast Installation with Portable Ruby
For faster MRI installation on Linux and macOS, you can use portable Ruby
-binaries from [jdx/ruby][19] instead of compiling from source. This significantly
+binaries from [bazel-contrib/portable-ruby][19] instead of compiling from source. This significantly
reduces installation time and ensures consistent, portable Ruby environments.
To enable portable Ruby, set `portable_ruby = True` in your toolchain declaration:
@@ -147,7 +147,7 @@ ruby.toolchain(
This ruleset ships with [default checksums][20] to securely download and properly cache
the Ruby binaries. If you want to use Ruby version not available with ruleset release,
-you should use `portable_ruby_checksums` attribute.
+you should use `portable_ruby_release_suffix` and `portable_ruby_checksums` attribute.
We have provided the `generate_portable_ruby_checksums` utility to add/update these
attributes for you. The utility needs to know the version of Ruby to download.
@@ -166,10 +166,12 @@ ruby.toolchain(
name = "ruby",
version_file = "//:.ruby-version",
portable_ruby = True,
+ portable_ruby_release_suffix = "2", # default is 1
portable_ruby_checksums = {
- "ruby-3.4.8.x86_64_linux.tar.gz": "e1c5ed91dc8b05e516cb5386a695e5ffed7b585fd577b93880b7eb61d20092e7",
- "ruby-3.4.8.macos.tar.gz": "46c48fceb34d11b848f1fd7456ac77df49406f355de4f7d5667f254ea9da2f84",
- "ruby-3.4.8.arm64_linux.tar.gz": "fdf6833e7ebe0b9c26a151a6f7481d81e178372046ad2b3f54ae56d159da8b1e",
+ "ruby-3.2.8.arm64_darwin.tar.gz": "4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb",
+ "ruby-3.4.8.arm64_linux.tar.gz": "8348296d8148acbc6e5a170861810b693fb6ea72e1d59cc7b82f0369bffa9870",
+ "ruby-3.2.8.x86_64_darwin.tar.gz": "75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462",
+ "ruby-3.2.8.x86_64_linux.tar.gz": "2a2f40774634abed8eb32b762b8f440f85c6add74b5c14f28e70b42f49537464",
},
)
```
@@ -179,7 +181,7 @@ ruby.toolchain(
- Portable Ruby is only supported on Linux (arm64, x86_64) and macOS (arm64).
- Setting `portable_ruby = True` has no effect on JRuby, TruffleRuby, or Windows.
- On Windows, the toolchain automatically falls back to RubyInstaller.
-- Find available portable Ruby releases at https://github.com/jdx/ruby/releases
+- Find available portable Ruby releases at https://github.com/bazel-contrib/portable-ruby/releases
### JRuby
@@ -263,7 +265,7 @@ rb_test(
[16]: https://bazel.build/reference/command-line-reference#flag--experimental_inprocess_symlink_creation
[17]: https://github.com/bazelbuild/bazel/issues/4327
[18]: docs/rails.md
-[19]: https://github.com/jdx/ruby
+[19]: https://github.com/bazel-contrib/portable-ruby
[20]: ruby/private/portable_ruby_checksums.bzl
[21]: https://github.com/simplecov-ruby/simplecov
[22]: https://github.com/fortissimo1997/simplecov-lcov
diff --git a/docs/repository_rules.md b/docs/repository_rules.md
index 9f1c8e22..c6130451 100644
--- a/docs/repository_rules.md
+++ b/docs/repository_rules.md
@@ -31,7 +31,7 @@ Wraps `rb_bundle_rule()` providing default toolchain name.
load("@rules_ruby//ruby:deps.bzl", "rb_register_toolchains")
rb_register_toolchains(name, version, version_file, msys2_packages, portable_ruby,
- portable_ruby_checksums, register, **kwargs)
+ portable_ruby_release_suffix, portable_ruby_checksums, register, **kwargs)
Register a Ruby toolchain and lazily download the Ruby Interpreter.
@@ -40,7 +40,7 @@ Register a Ruby toolchain and lazily download the Ruby Interpreter.
* _(For MRI on Windows)_ Installed using [RubyInstaller](https://rubyinstaller.org).
* _(For JRuby on any OS)_ Downloaded and installed directly from [official website](https://www.jruby.org).
* _(For TruffleRuby on Linux and macOS)_ Installed using [ruby-build](https://github.com/rbenv/ruby-build).
-* _(With portable_ruby)_ Portable Ruby downloaded from [jdx/ruby](https://github.com/jdx/ruby).
+* _(With portable_ruby)_ Portable Ruby downloaded from [bazel-contrib/portable-ruby](https://github.com/bazel-contrib/portable-ruby).
* _(For "system")_ Ruby found on the PATH is used. Please note that builds are not hermetic in this case.
`WORKSPACE`:
@@ -86,8 +86,9 @@ rb_library(
| version | a semver version of MRI, or a string like [interpreter type]-[version], or "system" | `None` |
| version_file | .ruby-version or .tool-versions file to read version from | `None` |
| msys2_packages | extra MSYS2 packages to install | `["libyaml"]` |
-| portable_ruby | when True, downloads portable Ruby from jdx/ruby instead of compiling via ruby-build. Has no effect on JRuby, TruffleRuby, or Windows. | `False` |
-| portable_ruby_checksums | platform checksums for portable Ruby downloads, overriding built-in checksums. Keys: linux-x86_64, linux-arm64, macos-arm64, macos-x86_64. | `{}` |
+| portable_ruby | when True, downloads portable Ruby from bazel-contrib/portable-ruby instead of compiling via ruby-build. Has no effect on JRuby, TruffleRuby, or Windows. | `False` |
+| portable_ruby_release_suffix | release suffix for portable Ruby (default "1", e.g. "2" downloads X.Y.Z-2). | `""` |
+| portable_ruby_checksums | platform checksums for portable Ruby downloads, overriding built-in checksums. | `{}` |
| register | whether to register the resulting toolchains, should be False under bzlmod | `True` |
| kwargs | additional parameters to the downloader for this interpreter type | none |
diff --git a/ruby/extensions.bzl b/ruby/extensions.bzl
index 98f9bde4..7755c4f4 100644
--- a/ruby/extensions.bzl
+++ b/ruby/extensions.bzl
@@ -33,11 +33,19 @@ ruby_toolchain = tag_class(attrs = {
"msys2_packages": attr.string_list(doc = "Extra MSYS2 packages to install.", default = ["libyaml"]),
"portable_ruby": attr.bool(
doc = """\
-When True, downloads portable Ruby from jdx/ruby instead of compiling via \
+When True, downloads portable Ruby from bazel-contrib/portable-ruby instead of compiling via \
ruby-build. Has no effect on JRuby, TruffleRuby, or Windows.\
""",
default = False,
),
+ "portable_ruby_release_suffix": attr.string(
+ doc = """\
+Release suffix for portable Ruby downloads. When empty (default), uses the built-in \
+PORTABLE_RUBY_DEFAULT_SUFFIXES mapping. Set explicitly to pin to a specific rebuild, \
+e.g. "2" downloads version X.Y.Z-2.\
+""",
+ default = "",
+ ),
"portable_ruby_checksums": attr.string_dict(
doc = """\
Platform checksums for portable Ruby downloads, overriding built-in checksums. \
@@ -105,6 +113,7 @@ def _ruby_module_extension(module_ctx):
toolchain.msys2_packages,
toolchain.ruby_build_version,
toolchain.portable_ruby,
+ toolchain.portable_ruby_release_suffix,
toolchain.portable_ruby_checksums,
)
if module_ctx.is_dev_dependency(toolchain):
@@ -121,6 +130,7 @@ def _ruby_module_extension(module_ctx):
msys2_packages,
ruby_build_version,
portable_ruby,
+ portable_ruby_release_suffix,
portable_ruby_checksums,
) = config
rb_register_toolchains(
@@ -130,6 +140,7 @@ def _ruby_module_extension(module_ctx):
msys2_packages = msys2_packages,
ruby_build_version = ruby_build_version,
portable_ruby = portable_ruby,
+ portable_ruby_release_suffix = portable_ruby_release_suffix,
portable_ruby_checksums = portable_ruby_checksums,
register = False,
)
diff --git a/ruby/private/download.bzl b/ruby/private/download.bzl
index 3e7a669f..74037fe9 100644
--- a/ruby/private/download.bzl
+++ b/ruby/private/download.bzl
@@ -1,6 +1,6 @@
"Repository rule for fetching Ruby interpreters"
-load("//ruby/private:portable_ruby_checksums.bzl", "PORTABLE_RUBY_CHECKSUMS")
+load("//ruby/private:portable_ruby_checksums.bzl", "PORTABLE_RUBY_CHECKSUMS", "PORTABLE_RUBY_DEFAULT_SUFFIXES")
RUBY_BUILD_VERSION = "20260114"
@@ -8,7 +8,7 @@ _JRUBY_BINARY_URL = "https://repo1.maven.org/maven2/org/jruby/jruby-dist/{versio
_RUBY_BUILD_URL = "https://github.com/rbenv/ruby-build/archive/refs/tags/v{version}.tar.gz"
_RUBY_INSTALLER_URL = "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-{version}-1/rubyinstaller-devkit-{version}-1-x64.exe"
_PORTABLE_RUBY_NAME = "ruby-{version}.{platform}.tar.gz"
-_MISE_RUBY_URL = "https://github.com/jdx/ruby/releases/download/{release}/{name}"
+_PORTABLE_RUBY_URL = "https://github.com/bazel-contrib/portable-ruby/releases/download/{release}/{name}"
# Maintained JRuby versions integrity from https://repo1.maven.org/maven2/org/jruby/jruby-dist.
# Run the following script to update the list:
@@ -280,7 +280,7 @@ def _install_via_ruby_build(repository_ctx, version):
repository_ctx.delete("ruby-build")
def _install_portable_ruby(repository_ctx, ruby_version, checksums):
- """Install portable Ruby from jdx/ruby project.
+ """Install portable Ruby from bazel-contrib/portable-ruby project.
Args:
repository_ctx: Repository context
@@ -291,7 +291,7 @@ def _install_portable_ruby(repository_ctx, ruby_version, checksums):
# Detect platform
os_name = repository_ctx.os.name
if os_name.startswith("mac"):
- os_key = "macos"
+ os_key = "darwin"
elif os_name.startswith("linux"):
os_key = "linux"
else:
@@ -306,16 +306,13 @@ def _install_portable_ruby(repository_ctx, ruby_version, checksums):
else:
arch_key = arch
- if os_key == "macos" and arch_key == "x86_64":
- print("Warning: Portable Ruby does not support macOS on x86_64, falling back to compiling from source.") # buildifier: disable=print
- _install_via_ruby_build(repository_ctx, ruby_version)
- return
+ # Combine to form platform key
+ platform_key = arch_key + "_" + os_key
- if os_key == "macos":
- # Intel is not supported
- platform_key = "macos"
- else:
- platform_key = arch_key + "_" + os_key
+ # Determine release suffix: explicit attr overrides built-in default
+ suffix = repository_ctx.attr.portable_ruby_release_suffix
+ if not suffix:
+ suffix = PORTABLE_RUBY_DEFAULT_SUFFIXES.get(ruby_version, "1")
artifact_name = _PORTABLE_RUBY_NAME.format(
version = ruby_version,
@@ -326,15 +323,15 @@ def _install_portable_ruby(repository_ctx, ruby_version, checksums):
kwargs = {}
if artifact_name in checksums:
kwargs["sha256"] = checksums[artifact_name]
- elif artifact_name in PORTABLE_RUBY_CHECKSUMS:
- kwargs["sha256"] = PORTABLE_RUBY_CHECKSUMS[artifact_name]
+ elif suffix in PORTABLE_RUBY_CHECKSUMS and artifact_name in PORTABLE_RUBY_CHECKSUMS[suffix]:
+ kwargs["sha256"] = PORTABLE_RUBY_CHECKSUMS[suffix][artifact_name]
repository_ctx.report_progress(
- "Downloading portable Ruby %s for %s" % (ruby_version, platform_key),
+ "Downloading portable Ruby %s-%s for %s" % (ruby_version, suffix, platform_key),
)
repository_ctx.download_and_extract(
- url = _MISE_RUBY_URL.format(
- release = ruby_version,
+ url = _PORTABLE_RUBY_URL.format(
+ release = ruby_version + "-" + suffix,
name = artifact_name,
),
output = "dist/",
@@ -399,8 +396,17 @@ which isn't available in this ruby-build yet.
"portable_ruby": attr.bool(
default = False,
doc = """
-When set to True, downloads portable Ruby from jdx/ruby instead of compiling via ruby-build.
+When set to True, downloads portable Ruby from bazel-contrib/portable-ruby instead of compiling via ruby-build.
Has no effect on JRuby, TruffleRuby, or Windows (which use their own installation methods).
+""",
+ ),
+ "portable_ruby_release_suffix": attr.string(
+ default = "",
+ doc = """
+Release suffix for portable Ruby downloads from bazel-contrib/portable-ruby.
+The release tag is constructed as `{version}-{suffix}` (e.g. `4.0.2-1`).
+When empty (default), the built-in PORTABLE_RUBY_DEFAULT_SUFFIXES mapping is used.
+Set explicitly to pin to a specific rebuild (e.g. `"2"` for `4.0.2-2`).
""",
),
"portable_ruby_checksums": attr.string_dict(
@@ -408,7 +414,7 @@ Has no effect on JRuby, TruffleRuby, or Windows (which use their own installatio
doc = """
Platform checksums for portable Ruby downloads, overriding built-in checksums. Can be generated by running `bazel run @rules_ruby//tools/generate_portable_ruby_checksums`.
-Keys: artifact names (e.g., ruby-3.4.8.x86_64_linux.tar.gz, ruby-3.4.8.macos.tar.gz).
+Keys: artifact names (e.g., ruby-3.4.8.x86_64_linux.tar.gz, ruby-3.4.8.arm64_darwin.tar.gz).
Values: SHA256 checksums for the corresponding platform.
""",
),
diff --git a/ruby/private/portable_ruby_checksums.bzl b/ruby/private/portable_ruby_checksums.bzl
index 77b88187..1a69b472 100644
--- a/ruby/private/portable_ruby_checksums.bzl
+++ b/ruby/private/portable_ruby_checksums.bzl
@@ -1,121 +1,210 @@
-"Provides checksums for portable Ruby versions from jdx/ruby."
+"Provides checksums for portable Ruby versions from bazel-contrib/portable-ruby."
# Generated via:
# bazel run //tools/generate_portable_ruby_checksums -- --all
+# Maps each Ruby version to its current default release suffix.
+# Updated automatically when a new rebuild (-2, -3, etc.) is published.
+PORTABLE_RUBY_DEFAULT_SUFFIXES = {
+ "4.0.2": "1",
+ "4.0.1": "1",
+ "4.0.0-preview3": "1",
+ "4.0.0-preview2": "1",
+ "4.0.0": "1",
+ "3.5.0-preview1": "1",
+ "3.4.9": "1",
+ "3.4.8": "1",
+ "3.4.7": "1",
+ "3.4.6": "1",
+ "3.4.5": "1",
+ "3.4.4": "1",
+ "3.4.3": "1",
+ "3.4.2": "1",
+ "3.4.1": "1",
+ "3.4.0": "1",
+ "3.3.9": "1",
+ "3.3.8": "1",
+ "3.3.7": "1",
+ "3.3.6": "1",
+ "3.3.5": "1",
+ "3.3.4": "1",
+ "3.3.3": "1",
+ "3.3.2": "1",
+ "3.3.11": "1",
+ "3.3.10": "1",
+ "3.3.1": "1",
+ "3.3.0": "1",
+ "3.2.9": "1",
+ "3.2.8": "1",
+ "3.2.7": "1",
+ "3.2.6": "1",
+ "3.2.5": "1",
+ "3.2.4": "1",
+ "3.2.3": "1",
+ "3.2.2": "1",
+ "3.2.11": "1",
+ "3.2.10": "1",
+ "3.2.1": "1",
+}
+
+# Checksums keyed as {suffix: {ruby-VERSION.PLATFORM.tar.gz: sha256}}
PORTABLE_RUBY_CHECKSUMS = {
- "ruby-4.0.2.x86_64_linux.tar.gz": "4564603d7f314912091b01978627be183a16b057e3c98309eed0137c3b74601a",
- "ruby-4.0.2.macos.tar.gz": "3719af6ceff6c1b977eecf5b48e398827ea82872377480684b75db5925b78493",
- "ruby-4.0.2.arm64_linux.tar.gz": "f4bae6aba123a65817cb005d35f994781935f58d6388dd6bd3d5cd27f793a463",
- "ruby-4.0.1.x86_64_linux.tar.gz": "243a517bec05cfba655c092bc6b65cdd76937287e952f7ce072c7062da4c47be",
- "ruby-4.0.1.macos.tar.gz": "132f81a5b0bb4a2fb13610d55be769345c3d228c0495301e427119be1f7f0247",
- "ruby-4.0.1.arm64_linux.tar.gz": "4fd5638337717f42bfaf586b053430a6b18bfbe2514d24162eb77b0322d3554e",
- "ruby-4.0.0.x86_64_linux.tar.gz": "88bec85e432b4357a5896006aff12a0932a21e61900ed3341a0f0a9c1495fcb6",
- "ruby-4.0.0.macos.tar.gz": "5f9fcd2b7fd323fef6301238a571cec6cf57458f706761e75d2115dcda9c4351",
- "ruby-4.0.0.arm64_linux.tar.gz": "04851343d50862947e337d9faef9fa7193451003b94fc35903e3bfe4b3f6e7ef",
- "ruby-4.0.0-preview3.x86_64_linux.tar.gz": "169f9e1af1a2fe2493ef0eac69b05657340ac4f75a8fd68c246d880bf0f6fea2",
- "ruby-4.0.0-preview3.macos.tar.gz": "6b341f8060b5b9b6909afc6bb4f7cada6a7cc0d58772070e9b30470817a278bf",
- "ruby-4.0.0-preview3.arm64_linux.tar.gz": "a0a0ca138e36d2405f9f9c6199032f23d6fcf9dd9c9c5e3a4070121f883c6fb5",
- "ruby-4.0.0-preview2.x86_64_linux.tar.gz": "bef29055c4fa27049003ee681a13cad6471f90ce66865f052c14aed3e14a3f22",
- "ruby-4.0.0-preview2.macos.tar.gz": "00d7cd1eca82163d05055b00250c14866939664260334178673702bd46ab6108",
- "ruby-4.0.0-preview2.arm64_linux.tar.gz": "82dad801d98eb209b38e6d7227e8130b5a76d3e60dc86b7021882a6c361a24c3",
- "ruby-3.5.0-preview1.x86_64_linux.tar.gz": "d071d784b40dc449c8108f2644aa7dc3093c300275073c5cb254de3265ea25dc",
- "ruby-3.5.0-preview1.macos.tar.gz": "cd7520f17ad70f38de848748f9e2b1c4f90e38b39033a05263ce3196525ac0d5",
- "ruby-3.5.0-preview1.arm64_linux.tar.gz": "6604c9157a7603644bbd38a4e8e73c0be32b611e3df396ee6177abffca96419e",
- "ruby-3.4.9.x86_64_linux.tar.gz": "7d8c21127b20508f695f8e0577a648395a03eb4199aab472d2a7b15bcda055d0",
- "ruby-3.4.9.macos.tar.gz": "ef60a09b62610ff999b63cebdf1ce87c2dc13f4f6711f3127de4705bca65af10",
- "ruby-3.4.9.arm64_linux.tar.gz": "f348275fd89d1234919005daadeaf6a7b7eacaabc5bb00e71c7d7fc150ed59b3",
- "ruby-3.4.8.x86_64_linux.tar.gz": "e4184f838b4334de147216b66d559d1c3bb2dc1643b260b255c11db53269b9b9",
- "ruby-3.4.8.macos.tar.gz": "b02231f25bd6d46fad8b28c5e747dd92bfa81ccd81d0df83d2462a1725754dcf",
- "ruby-3.4.8.arm64_linux.tar.gz": "33ddb8efb6ad82e1520f3053de0ff7089f535875bfa42dc7f51a2c0fc16d1759",
- "ruby-3.4.7.x86_64_linux.tar.gz": "8c4bce43025a0e259284893b7e4605f3d590221037add36554b720046fe7b613",
- "ruby-3.4.7.macos.tar.gz": "77e2be99acb8e5552a84d08231d1515e23eabd6d6a7dfa1a3731b91beaf8bda6",
- "ruby-3.4.7.arm64_linux.tar.gz": "67c0b910b16cd6407f5745bb8bf3e17132594a32df4dfb831f0b52a58966a798",
- "ruby-3.4.6.x86_64_linux.tar.gz": "1163e785efae0a9bca9a0d9c550e65c96cb8b4aa61ddb739bb2fa3de544d5cb9",
- "ruby-3.4.6.macos.tar.gz": "d4b0f9faa575e24f283ad1331e560fea1ea4f635ef3003bec29311b0a5180d88",
- "ruby-3.4.6.arm64_linux.tar.gz": "4cf8eaa0b0a558b80bb7f92473d8f2df29d94f0014e565d6a7d43024909caca2",
- "ruby-3.4.5.x86_64_linux.tar.gz": "414c1600501018a1f76e2a7acbffc95c1978a1fd6480423ea14057809032015e",
- "ruby-3.4.5.macos.tar.gz": "3d091fcdf6c5ad30f2098e4d318f387d83e8df9085f40161bab057cafa44c6af",
- "ruby-3.4.5.arm64_linux.tar.gz": "15667bdef097e272616e250f62765012bec4b48435f42f835741a08a54a890e0",
- "ruby-3.4.4.x86_64_linux.tar.gz": "cd690fa7a3cbabc219fb231d9e4e2100358af8131bc4c904f7d70fec9b7a5230",
- "ruby-3.4.4.macos.tar.gz": "3afcc7a81dd3cd77a77d8018147aaeac9811659e52499f122e2e3d32956d6e38",
- "ruby-3.4.4.arm64_linux.tar.gz": "981804b1da064e61b258af387d3e54912ee40f3e287922df42c01523557abb83",
- "ruby-3.4.3.x86_64_linux.tar.gz": "5db238af5e261aaf2d8047da6112adef7c79c62c5a7d765a25dbf6a7174a06f2",
- "ruby-3.4.3.macos.tar.gz": "99cbfa0239b4cf0cf15ea53741ccdc26dca0aa6bc5cc4fb40d9305cf06ef8adc",
- "ruby-3.4.3.arm64_linux.tar.gz": "25e3f701282f9f35c3cfe51a3f06e0a8b933f8024403a87d753d6bc8a42e27ad",
- "ruby-3.4.2.x86_64_linux.tar.gz": "93a669d871c3f020a722f89d9487a81a6e236c4c8f1fd45d31042980d13f4eaa",
- "ruby-3.4.2.macos.tar.gz": "1db03ab6836ff97c791e6612243790558d0ae6761c0f4b3892e7dabde383119b",
- "ruby-3.4.2.arm64_linux.tar.gz": "3251804f0f8148029e9534e7b8fe16388d7e44a543a42565f482a8349866c82e",
- "ruby-3.4.1.x86_64_linux.tar.gz": "62f96d5e41e8907fe395d5c067e7bcc09d3ccca9ec52254fa951d219386042a7",
- "ruby-3.4.1.macos.tar.gz": "752de4cf61e59787cddc610cae61881f221ce99c240fc0e6b7f71996bc5be9a8",
- "ruby-3.4.1.arm64_linux.tar.gz": "2fa732fd17e7bb4aba30f5b3ec07d4c5d570e6fa1bf935f1777c11e35592d1cc",
- "ruby-3.4.0.x86_64_linux.tar.gz": "63bd1d8371686720b2738fe327c875e8942aa9c260a38549458dc76d71a35876",
- "ruby-3.4.0.macos.tar.gz": "8cbebefddf5b4ef79151dec863b491d77747875f10cdebbac41505dc2e2ed9f5",
- "ruby-3.4.0.arm64_linux.tar.gz": "2d206fa6aeb85004bf7c4920291591ad1dce29c8c16007cec617a5cdc476c9fa",
- "ruby-3.3.9.x86_64_linux.tar.gz": "7514c3f2e97c29548487f897bd6bdeb173b346992fc73ba69ea9162e43ccbf73",
- "ruby-3.3.9.macos.tar.gz": "123321635eae0d756d5563d09d4546923754de82a2f2072e446676d33f857109",
- "ruby-3.3.9.arm64_linux.tar.gz": "a0719f919d085f072119a874574e56d9bee6f69a37117ecbc2f0a2f90e34a4db",
- "ruby-3.3.8.x86_64_linux.tar.gz": "c729585d2e8a6ab326fbaf9e4c1007cf171511f1664097533a2115e37c85a48c",
- "ruby-3.3.8.macos.tar.gz": "391dd197dae1d032973f59032d2094552f388325018eeecfefe81eea1520b6db",
- "ruby-3.3.8.arm64_linux.tar.gz": "a83287dd713fb116a23655b573d333123cbe96440f830617803881374b3d6bf3",
- "ruby-3.3.7.x86_64_linux.tar.gz": "598f1358d7eba866dd733acc0417b113619aaa977db839267ef623406bf1f56d",
- "ruby-3.3.7.macos.tar.gz": "04943159bee774e9e708e4aa446c748e08895da45f2a129a29122d5ca15423b5",
- "ruby-3.3.7.arm64_linux.tar.gz": "9a8193a3af8a00a330421ec99a5a41820cab40127f2452cd8c64a87e51b63bfe",
- "ruby-3.3.6.x86_64_linux.tar.gz": "ce6e424024f8b354d09a3bd98f28f7e93b71a45e8f008abc3e4635bf349a32df",
- "ruby-3.3.6.macos.tar.gz": "ed03882ea86403f3e02d70319470edc3bbc5ef3f7fe8277108032777694eec2c",
- "ruby-3.3.6.arm64_linux.tar.gz": "a63bfdaae932c54994d5efaa2b809ba007fa8e6e56e5cc7aac18d4087bc7ca4e",
- "ruby-3.3.5.x86_64_linux.tar.gz": "301ab3df4ad26935d17e06b447a694aa4d888d9ca3cd334477ea2930944ba9f9",
- "ruby-3.3.5.macos.tar.gz": "2676c3675bebf736a394621051bdf97089f5bc499b0cceb3bbbee1f8a1e2d588",
- "ruby-3.3.5.arm64_linux.tar.gz": "22bd2336ada0d97757cf0891f09f665345756041e5b6053591873df96c1acfcf",
- "ruby-3.3.4.x86_64_linux.tar.gz": "fb9e272e84c8ac2b54fa10d922987ec8ae4f5faeb1271a6ba8804111abb9b5bb",
- "ruby-3.3.4.macos.tar.gz": "f0f47e33525e32db7cf685f33c78dd0bcf11c2c65be2f1cdb6c9bf5a92649248",
- "ruby-3.3.4.arm64_linux.tar.gz": "653ef61b9120ec975682b95b516d8a6b48901644d9ed91ccb6cac5377af7de54",
- "ruby-3.3.3.x86_64_linux.tar.gz": "60200ac615d74afdb607fd17ef05dc34610650bb27ed2641bf011aa807ccae96",
- "ruby-3.3.3.macos.tar.gz": "039310e517dc94c6404fa9dfc5db0ff08e69c610fbc80bf38a24d5e660438192",
- "ruby-3.3.3.arm64_linux.tar.gz": "ca188e5583317adb2b8357aaba821556bb66dd96a17445ccc848f46dd4e92767",
- "ruby-3.3.2.x86_64_linux.tar.gz": "5442a539e93b9c3d665b2e6368f128447b4c594326f8dbdf757634e139b670b4",
- "ruby-3.3.2.macos.tar.gz": "1b94f90cdf88a5f31d62f2af7abac9aac25acb3a09b1b8f6cb0763a6aeda6614",
- "ruby-3.3.2.arm64_linux.tar.gz": "7104afed4014683590f3f44a33f114e8bd56dd88ef5e0f0fb5f759eee424c765",
- "ruby-3.3.11.x86_64_linux.tar.gz": "57ef3c917a1263816f33568f750b575b81830adaade6b1f262054038566881d0",
- "ruby-3.3.11.macos.tar.gz": "028c41a8dc5ab7c3ed050ddf3f7e8eddf27612d4ad30cca86d9cc2b944c73d07",
- "ruby-3.3.11.arm64_linux.tar.gz": "9a008c8b813324ba8e749bcdb0f1332ac5868a2e132477851d5dbf80c24ceaee",
- "ruby-3.3.10.x86_64_linux.tar.gz": "91072a93914d3687bd6621cbe3e9b787fba338c7b6211dbdef8942b6614b381c",
- "ruby-3.3.10.macos.tar.gz": "78887b888323b4d009dfedad21725ca7a59f22a7b89e63ad8ccdfcf97db7f408",
- "ruby-3.3.10.arm64_linux.tar.gz": "4a2b50e32ea15e63e66a2698e59ca50e79cb462edd9d479fae65f9ea31e2429a",
- "ruby-3.3.1.x86_64_linux.tar.gz": "10b6b578cb74c9b7d465e624c58bd82175fffcb9c64297ccbbcbb61047f953bc",
- "ruby-3.3.1.macos.tar.gz": "5edebb0990421e4a9d89b56bbd8df96162761d78db76f4ca6e6b8861e3550955",
- "ruby-3.3.1.arm64_linux.tar.gz": "31da5f7f4a997914521ff081a6a5c93b8ba7fa651dd2aa4655a38dc689047e1b",
- "ruby-3.3.0.x86_64_linux.tar.gz": "12d9553bd95374bb6834df1aaa5d0d0b88239778cb49acbd5cbe298e0028d1e3",
- "ruby-3.3.0.macos.tar.gz": "df72c9f426c37aa99ed34bc43bcd4f66227b692acdbbdcebcea1e63a069083ba",
- "ruby-3.3.0.arm64_linux.tar.gz": "2aa1caba14e12bdafd1adbf00828f130bd2e40a092ba8582d71a2ad32c00300e",
- "ruby-3.2.9.x86_64_linux.tar.gz": "4281176db2a88e9872d7c371b9c0df45a83e7f1a290a90fb509c31e583b5c52d",
- "ruby-3.2.9.macos.tar.gz": "b6b5a014033d17ab6d51915a1a87319a30009d772a79fcc8e7cf566f3fd73e54",
- "ruby-3.2.9.arm64_linux.tar.gz": "d40a4d0ff66a838d22457505946d9b9101dfff40ac5d940315e7b098a93aa336",
- "ruby-3.2.8.x86_64_linux.tar.gz": "17a7715d8345fe1f303aa854ef79389727235afe0dd60092d1a986a18df4e931",
- "ruby-3.2.8.macos.tar.gz": "8ea64f64ebb5fbf6740d34e3d246518758e5c20e3987ccfa7ed0a95442ffc138",
- "ruby-3.2.8.arm64_linux.tar.gz": "470f8022061285d6c86c2ca6f5c077e94492a38e1aa78361a81db5e49e4eb9a7",
- "ruby-3.2.7.x86_64_linux.tar.gz": "2f50be73d1315f02d2f2685cc1111016f8f62b776ac58d11bde71af5be665349",
- "ruby-3.2.7.macos.tar.gz": "e645946e815bfbc4a36b87e251ce5910cf20cec1093f4d4b0ddb18c330d5f698",
- "ruby-3.2.7.arm64_linux.tar.gz": "603d93687c8074df80fd00d80ebca790ae6efc813da6b4b80e3410ff84f27f6d",
- "ruby-3.2.6.x86_64_linux.tar.gz": "2c56e74f83618d89a2b5e39ea7618c461258ddb56dd07900634ca59a7bd8c74c",
- "ruby-3.2.6.macos.tar.gz": "3bd098abb2ed675cce881a0e79ef2a32501f9ac1d8e2470170897a3c99b7baaa",
- "ruby-3.2.6.arm64_linux.tar.gz": "e7ca7b9b0f5dbfd4d67446b8b67dbedcbfdbd89dfbae326cec0d4deb4fbbccf1",
- "ruby-3.2.5.x86_64_linux.tar.gz": "e0d0b07fe0a0ca6297e7e7b97512be06f76f44a9de55105d3412f79e94a5368a",
- "ruby-3.2.5.macos.tar.gz": "fd8d3c26b2dc66260d34f2b7fc1bf54a9f350f73415379f49bb020db134bda3b",
- "ruby-3.2.5.arm64_linux.tar.gz": "37840886293fa135f4696c335c77e60b0320f072dd34ce0fa38d4aec313f4020",
- "ruby-3.2.4.x86_64_linux.tar.gz": "653f62b1e54b4b74de950f6f8a6e5ba8f19d564bf89c3dde16d9ff3e2d557881",
- "ruby-3.2.4.macos.tar.gz": "4c6466a416b9e31803139327438ae92c574c1f7d1766e3bec0936da3fa44c75a",
- "ruby-3.2.4.arm64_linux.tar.gz": "bf888be654e8fbfc6e76dd4c20c96f411ee67551f66c66e91b24bd0b9490ff79",
- "ruby-3.2.3.x86_64_linux.tar.gz": "e809e7c0e2decd3c9e6791eca9f2533a835b1941641fa0c9c1c2f620de0c7e99",
- "ruby-3.2.3.macos.tar.gz": "fd11c0cbf65195017b8019f8cda18f65291d5d4d1d5d6518fa14894f9584dcb6",
- "ruby-3.2.3.arm64_linux.tar.gz": "062ab4ef962401f6c1323cdc0ffa547ec0031b6205ba35fdb6c13890fefc2cd3",
- "ruby-3.2.2.x86_64_linux.tar.gz": "ca8aea207fd6ee356543f07fa968f38eded271ed6ddb5e92ab9eb364094ca17d",
- "ruby-3.2.2.macos.tar.gz": "c4228e59678cb629999f0b81eb8027ea4f107390ad897d9dce98f3736ab95695",
- "ruby-3.2.2.arm64_linux.tar.gz": "8a023a8767bb1ae6e3cb8d94a531833958fc209305798497ae18b72601a6f786",
- "ruby-3.2.10.x86_64_linux.tar.gz": "8f3553165c0d89b75d5a0263c29c0426418519e92a407a9d494411b9a2f02c09",
- "ruby-3.2.10.macos.tar.gz": "0af79efcf603b13c6bb209175b9c27a095ae06291f03c963219ee0dd95518858",
- "ruby-3.2.10.arm64_linux.tar.gz": "29d1108eaa6ae0d77175753b89b3ee8424bd1dce64a964176bbb8b2c83275234",
- "ruby-3.2.1.x86_64_linux.tar.gz": "c43293e5ec8055a73fd6c47030d93794fb04a1c7fefe1237e788ec18795dca81",
- "ruby-3.2.1.macos.tar.gz": "f55aa109bb74c1860791d1948369eee801231f9c57eea353f43e26bfc1412e57",
- "ruby-3.2.1.arm64_linux.tar.gz": "9edbc5f3b537dccf08fa4cc3e141196cce4a35b78d5fedbff842262530e9a9f1",
+ "1": {
+ "ruby-3.2.1.arm64_darwin.tar.gz": "bfd6e4cc05cbeb174cbee3c2d531c0ff5713bbd349b3cc8ea72d07a724884c00",
+ "ruby-3.2.1.arm64_linux.tar.gz": "ced6769f563aeff1b501d4f47f52649e098816d072377d13ecc8fdf09d148bb4",
+ "ruby-3.2.1.x86_64_darwin.tar.gz": "e1a137e8311d52bf2cfc20bdb3be1b29b5465582b01b9265d29022f3f663f674",
+ "ruby-3.2.1.x86_64_linux.tar.gz": "fb7cf2d4e32ed4b3da0bc5b8b24e0379f1574aa520a7b1c660947d3750259e35",
+ "ruby-3.2.10.arm64_darwin.tar.gz": "3dd12dfabda0eb0124977532669805c651f87a28b74b9b9e3666dccb3f00c2f4",
+ "ruby-3.2.10.arm64_linux.tar.gz": "e0b73d1db349f46cd963db577b20c5ce103c5484ff23d9fd59d2121d6dba0333",
+ "ruby-3.2.10.x86_64_darwin.tar.gz": "35365bb4306c3a2f2633265387b2d53825c2ed7f8eb268897bb171ef37882c1e",
+ "ruby-3.2.10.x86_64_linux.tar.gz": "9093f4f0fb317a1baf144e6e189f9a946b4947b84b9c315a96d33908a93744aa",
+ "ruby-3.2.11.arm64_darwin.tar.gz": "203b4d87231628004a8962a1914756681e0075367d87d061e93ea7b5ccf361b7",
+ "ruby-3.2.11.arm64_linux.tar.gz": "87292f7c97a783a9a6d3771d717e2ec26fb1eaeb0970e1a2a6f9b784a38db5ef",
+ "ruby-3.2.11.x86_64_darwin.tar.gz": "4ed21663255a906de4a3213ef42c001f0a2f24d1668983d2ec4819969cdd6e15",
+ "ruby-3.2.11.x86_64_linux.tar.gz": "2b50cd8724c61aee07596f62d4b5e894b4299bc950ba7d16d060196e804a4b0c",
+ "ruby-3.2.2.arm64_darwin.tar.gz": "1d8aada565a66a10d02f63f9527f41891b529391ec8e08b0e9c9b855bc04c210",
+ "ruby-3.2.2.arm64_linux.tar.gz": "c12031932fd7946b5ee253d4f1fc396ceebb4ca46632f85bc969dba562085ac9",
+ "ruby-3.2.2.x86_64_darwin.tar.gz": "d76a7e153e1eec7bfe9d4fafea9848c595d1cbfaabea943eccd8f272d2f5f5b8",
+ "ruby-3.2.2.x86_64_linux.tar.gz": "9eccb929db54802074deaa97b259574ca6924848478c3dba941ce8414b009eed",
+ "ruby-3.2.3.arm64_darwin.tar.gz": "32dd3ef11310aab3376173f84e44fc9e0e0248a3ed70b1a504531e37acc6408e",
+ "ruby-3.2.3.arm64_linux.tar.gz": "47d50f4a8221bd4385175958166cc9ea2779658c623d8be9b5cd3e31f1751b27",
+ "ruby-3.2.3.x86_64_darwin.tar.gz": "58cf93e154c7305505ab34d40f65df73755440057b9243114295799fcccef462",
+ "ruby-3.2.3.x86_64_linux.tar.gz": "cd97f3e8b2036c213e087af1a15126e1832f16a5274701c4748a85c9322faca9",
+ "ruby-3.2.4.arm64_darwin.tar.gz": "307aaf0423607b09c7148dd609248fa7dcfae032ba97fe34574801d5e4035aa3",
+ "ruby-3.2.4.arm64_linux.tar.gz": "28c21e8ad943c4a93daa3ca76b868bdccf8684e7c6e882b08e9188e0fba76c53",
+ "ruby-3.2.4.x86_64_darwin.tar.gz": "989b1757e96f85b31ad0f70d5a3627f175048976d8bf7b4f02eca3dbbdb5f862",
+ "ruby-3.2.4.x86_64_linux.tar.gz": "f3d54425b386332bfe3b2c2e897dd0d46006888eb370b566cbacb12df2cdf7a9",
+ "ruby-3.2.5.arm64_darwin.tar.gz": "898387a89d4b6016e10a20fce8f5733891da91ae5622a47b675d5a1f1e9b3a6b",
+ "ruby-3.2.5.arm64_linux.tar.gz": "30a39b768cc8159e00ca8ccdefc56435043df84d79423fa67a9a03b834af2e58",
+ "ruby-3.2.5.x86_64_darwin.tar.gz": "392a5ef58a2161b7d501bb9dcbfd45c2c96626d316be4909ce927410f6af66bb",
+ "ruby-3.2.5.x86_64_linux.tar.gz": "41500fce2a5163f6d0d031ec094d904ea50b8990759f71937b95588925b05c61",
+ "ruby-3.2.6.arm64_darwin.tar.gz": "c64d19b40d85eee6202725880ef4f93d17ddd81b63aaeb4edd7eaa02452811c6",
+ "ruby-3.2.6.arm64_linux.tar.gz": "fe5a216f31d10bb924d54e560204cc3a03eb7e18718af1d786fd9de9bf89ebd1",
+ "ruby-3.2.6.x86_64_darwin.tar.gz": "40dfa415d27bc8c378414368462cbb66958059b0c8a4f70a94d08455ebe1ea45",
+ "ruby-3.2.6.x86_64_linux.tar.gz": "a160104c4c4a9b00571cbb4074c998f9fd76134509587707503b8b38370d7586",
+ "ruby-3.2.7.arm64_darwin.tar.gz": "ba4a40de9f56bc8c32bd7c6f28313b2658abd83e40cd02a84f73ea61fc3204b0",
+ "ruby-3.2.7.arm64_linux.tar.gz": "7d0fc36781e0941b7a24eed9ffb39a90c7a3c41dd1225e1906dbc96335fde783",
+ "ruby-3.2.7.x86_64_darwin.tar.gz": "2d060042c089554b42f8fb5bc10b0c878a5410fdbb4b17b27aaa398e556c3499",
+ "ruby-3.2.7.x86_64_linux.tar.gz": "cd474f675b1c9f83f964156acb0152a2b3747b264d5da42c6a16dc1888d305b9",
+ "ruby-3.2.8.arm64_darwin.tar.gz": "4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb",
+ "ruby-3.2.8.arm64_linux.tar.gz": "8348296d8148acbc6e5a170861810b693fb6ea72e1d59cc7b82f0369bffa9870",
+ "ruby-3.2.8.x86_64_darwin.tar.gz": "75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462",
+ "ruby-3.2.8.x86_64_linux.tar.gz": "2a2f40774634abed8eb32b762b8f440f85c6add74b5c14f28e70b42f49537464",
+ "ruby-3.2.9.arm64_darwin.tar.gz": "d09864bb0b1b434e4ab3d7f4070a6c5b11e293801381297cad08a6e7a2c12159",
+ "ruby-3.2.9.arm64_linux.tar.gz": "d76cebb968118a7ce28214388506689d29a737490f8edaacd3d62a68ef63c85c",
+ "ruby-3.2.9.x86_64_darwin.tar.gz": "2f16ca28aae85fe455a0956c5924fd0590a6537acd72a93a7bff805e7a1a5b8f",
+ "ruby-3.2.9.x86_64_linux.tar.gz": "34c9c82c59d4c8f6939c6f2f4d0790e8ca3cac15398ba89168c8660436889bf5",
+ "ruby-3.3.0.arm64_darwin.tar.gz": "89c738e4994baa3e3b762a7120187b7f12e614026d1421d7e3d7ed84490440cc",
+ "ruby-3.3.0.arm64_linux.tar.gz": "b81bc811c1ee0d30bd6f0bbbbae20338825ebb3819d73d67f6e9d950ffe37199",
+ "ruby-3.3.0.x86_64_darwin.tar.gz": "6c7524f445ff181546958b0101be320d63457fae9d1bfaf377f0d674fad5dc1e",
+ "ruby-3.3.0.x86_64_linux.tar.gz": "43e305a469b569e8fd45244f915f3a0580115d10c1bf025b928c6a03040578da",
+ "ruby-3.3.1.arm64_darwin.tar.gz": "e46a13bcf758ea2738bd1940cc30623bbe490d9afb87f44e6998e3bbd96e5efc",
+ "ruby-3.3.1.arm64_linux.tar.gz": "9d43a157fe6cefe75f2239eb55271f487b81f1a2f4c7ed6a0e0973a7b73c0127",
+ "ruby-3.3.1.x86_64_darwin.tar.gz": "916bb3dc8b0a2f3b10a1befa8bf7eecacb040f76d02715a9c0ef33f3c0226427",
+ "ruby-3.3.1.x86_64_linux.tar.gz": "32f1d3eeaf140e73abbc15bcfbba037003359a81f182376d59874fae7ad01656",
+ "ruby-3.3.10.arm64_darwin.tar.gz": "99949815fe4a7459feafd955f04fb095cd29b59ccea1a6f27f514f5fe2d4e4ca",
+ "ruby-3.3.10.arm64_linux.tar.gz": "35b46d69bd5fa9595930878812430ec834679367c04c05e8e4e15ebc448ae1f8",
+ "ruby-3.3.10.x86_64_darwin.tar.gz": "a0bdc85cd890a55d0b7713ff53c41486d8c23a7af77852a1fb72b89bd007e3f7",
+ "ruby-3.3.10.x86_64_linux.tar.gz": "5ceed98265f0d36a70d6566b749ff4308c7f5ac9d3b106f7e936f202aded0729",
+ "ruby-3.3.11.arm64_darwin.tar.gz": "41a82aa937dfd8ee0a1c10f5829d6a1c42dcc8ea38bfb282dc48d4521128eb36",
+ "ruby-3.3.11.arm64_linux.tar.gz": "d8731c526f0986640610bd3bce7fd94b6320d5825971ba24c4a2c52b21b74e54",
+ "ruby-3.3.11.x86_64_darwin.tar.gz": "5943569269c43949038640a9409568faa10a645078d66c69d1d251884b92f87a",
+ "ruby-3.3.11.x86_64_linux.tar.gz": "af34cff33da8c550718e8101dd9e66a6716c1805e1b29a4c3016b5c3ba778aa7",
+ "ruby-3.3.2.arm64_darwin.tar.gz": "148713dd8d27da90891a8801c51f50c54c1b4acd3caed4e2e3ec3d4081e7f3dd",
+ "ruby-3.3.2.arm64_linux.tar.gz": "5c87ae994f7b0a48d8c438a652e738ea9a8338ec83fb76795f016440412eac2e",
+ "ruby-3.3.2.x86_64_darwin.tar.gz": "983fa4652ed3acb6d1f7909246082c01332d1933ea334d1de4474844f011a42f",
+ "ruby-3.3.2.x86_64_linux.tar.gz": "023b8603f668021e1269c77fedded3020e16778f528661725742063de2833dc3",
+ "ruby-3.3.3.arm64_darwin.tar.gz": "99f649ccfbaebed428ab2dc08b7424b1361f98fa01f77f2d9fcbc032eafae710",
+ "ruby-3.3.3.arm64_linux.tar.gz": "012119ca760e967b671bf326c317355ba70888630bd50ab70ab7e4cf262db1e1",
+ "ruby-3.3.3.x86_64_darwin.tar.gz": "37ed3718c112bb037fdc3ddf3992b6a379356f0bb66bbbd2340d2657f70b9ed1",
+ "ruby-3.3.3.x86_64_linux.tar.gz": "06dbbd08097dac99bdaa5157a4dcf53dba8b07e9f2f3ca482d181962af63ba44",
+ "ruby-3.3.4.arm64_darwin.tar.gz": "19f6c29d93067a9af24c4eb16a8dc572c91e0c8610de377b0fd7997e2568c24c",
+ "ruby-3.3.4.arm64_linux.tar.gz": "d59d0b25a2db48833a7a35dd018c93bd774a04b13a696b93f215b1772acddac7",
+ "ruby-3.3.4.x86_64_darwin.tar.gz": "3c26d01b0fd2dad11228cb210d138156c75c8b4d2a6a9ce4ab86887cfd9f5778",
+ "ruby-3.3.4.x86_64_linux.tar.gz": "fa46e7e13770ecdf160de128cfc0a26ec6c69008e2bb2576eff52063c16f80c3",
+ "ruby-3.3.5.arm64_darwin.tar.gz": "234a9d8cf775aaf61505846d6e7ea98ff26b9f2d0fe375ea7859a63aff06ec4a",
+ "ruby-3.3.5.arm64_linux.tar.gz": "3d42e38794ac9e2252b146b984520c31dccf5b930d6604a3f8119ccffbebec4f",
+ "ruby-3.3.5.x86_64_darwin.tar.gz": "a5c149737a2d9a1ae79de0999b7827944863dca2bb6967d05fd3bd70710005a4",
+ "ruby-3.3.5.x86_64_linux.tar.gz": "abf1569c0088f4789e93bc54fe443e7612a054a3e6a02e430c53cd240b8f7d6f",
+ "ruby-3.3.6.arm64_darwin.tar.gz": "6fa875520f22cd08cd413c834a7c383b4d9860a28fd90a848c172d188e810dc8",
+ "ruby-3.3.6.arm64_linux.tar.gz": "a9ef9eea839944e9b1d89895e6e6dbb590318457c1e7b19b80284146bdb4c7d1",
+ "ruby-3.3.6.x86_64_darwin.tar.gz": "4a57b3b36e7a068c940639ccec44d22ff97c632201a17cba15b4dddf9613920f",
+ "ruby-3.3.6.x86_64_linux.tar.gz": "03d5d8056e58ca803db9ac4ed9f734f4a8baec727a6f9109ae6d014753f1b195",
+ "ruby-3.3.7.arm64_darwin.tar.gz": "d39b442f65edf036c592859da5780ea3b0257317ec0062fbd490a8b8c41c1cde",
+ "ruby-3.3.7.arm64_linux.tar.gz": "ffafcfb3396bfa48e6ad8ee6745422c1200eb57c081799ae2913d7264f420a31",
+ "ruby-3.3.7.x86_64_darwin.tar.gz": "f40cf0cc00b96be57237630fb4cc39e9017d6817857e13c29a55641313bb5990",
+ "ruby-3.3.7.x86_64_linux.tar.gz": "e58c583469c2dfde1f344347de31228c77882b9c1bc7c0cf3179861cc8afaf34",
+ "ruby-3.3.8.arm64_darwin.tar.gz": "d8f03b885f83b47559c06e1ec08f762ae2d08e5d21f3f7e9e35825de41bdecfd",
+ "ruby-3.3.8.arm64_linux.tar.gz": "4023ee46ed7b2b35e0bde2b2432ac22849f921928e7072336315738d815d547f",
+ "ruby-3.3.8.x86_64_darwin.tar.gz": "26ef5783e905831a385ee81bccb343290b471f7b86b47fbdb50cb08b33327ce0",
+ "ruby-3.3.8.x86_64_linux.tar.gz": "1aca9f0a65b89fbe8bd817f6a9e3fef318024756629f405aae34b0637a5689ca",
+ "ruby-3.3.9.arm64_darwin.tar.gz": "1b9589e8aca089386fd5d21ccd7f96785e54e06da4c0b17030471fbfd30b718a",
+ "ruby-3.3.9.arm64_linux.tar.gz": "05bce4aa44957d07abe9a5b3dd9869b67b6334ddd01cec489ce72167c199703f",
+ "ruby-3.3.9.x86_64_darwin.tar.gz": "85920979ce48039a49827588afa1ee2c520c0c70edd080995e8f5e63153efa59",
+ "ruby-3.3.9.x86_64_linux.tar.gz": "edce81109648d05e3b87b6f8b80e386e7c0865f28a92ded67882d95c7d27e228",
+ "ruby-3.4.0.arm64_darwin.tar.gz": "7d4e3d35cae233e9467e78925603dab85f3a38d0f8e3fbd0494b15406d14de8a",
+ "ruby-3.4.0.arm64_linux.tar.gz": "a311e5917e078a0761de9842b8c07782d70bd7790607f433db4f176c7ad48f3b",
+ "ruby-3.4.0.x86_64_darwin.tar.gz": "c19adb892ee9f9d43b93ea1aad190ddc83155b874d132ad49c39b2ff54ea7d55",
+ "ruby-3.4.0.x86_64_linux.tar.gz": "d81191f4c18ac678d5f6998a37b36bd3d29d19bccdaa4d2328ca2f1fb0430394",
+ "ruby-3.4.1.arm64_darwin.tar.gz": "b9c1f36403135ce3b9873814a21d2259add9f52cb9e364b94baccb5e7661b1c3",
+ "ruby-3.4.1.arm64_linux.tar.gz": "3d36ce2129b23f182415a2c8f77e4963d013703a1429e38852196ebb0c9ecab8",
+ "ruby-3.4.1.x86_64_darwin.tar.gz": "1ef70148bf9221cdc3ad3c0b98b2da336b2084b39714259bd853a10542d7fded",
+ "ruby-3.4.1.x86_64_linux.tar.gz": "278ef9d73ea5c38abb8f8da475045fe9c92afe0663bfae1676f061a932a470a4",
+ "ruby-3.4.2.arm64_darwin.tar.gz": "80db2b6a186eb9b246ca35934f65123e7c7fdc65016d73e2a8091781cde531ce",
+ "ruby-3.4.2.arm64_linux.tar.gz": "24f88c370e12c913484cc44f26eed357781c6d8fb512f386bc2ffb1f159ece8b",
+ "ruby-3.4.2.x86_64_darwin.tar.gz": "c847ef00b64456461493f7a92f6ad78320595938a4f171391be33125034963ac",
+ "ruby-3.4.2.x86_64_linux.tar.gz": "4849a0c462023198d587bc165780eeaa6f11d59208310e40fdc38b775f4d4768",
+ "ruby-3.4.3.arm64_darwin.tar.gz": "198f3bdfff2ade86a6b034d6d789fb952284538c56210d6e417407e2e831f16a",
+ "ruby-3.4.3.arm64_linux.tar.gz": "2cdca0bba2d42604addfaa331be7fa8c10d2f4c2e0b51b91340c47ff74cb32ea",
+ "ruby-3.4.3.x86_64_darwin.tar.gz": "b9c9fd0a20feabb1fe42c720fb68c50944514a97df1991b7e69aa201bd516e43",
+ "ruby-3.4.3.x86_64_linux.tar.gz": "7fe22d859a96e52a94c88cfcfb364414746fc371f2017acb7ecbccc5d25177b4",
+ "ruby-3.4.4.arm64_darwin.tar.gz": "a55e9c85c17c9727f14d2010af35022b70c82f5af8b7f6c8730b35ebdd49286d",
+ "ruby-3.4.4.arm64_linux.tar.gz": "91ef71949874747e98cd5990cc72f8e9c26f02d4b553409078d21b4d679b2a02",
+ "ruby-3.4.4.x86_64_darwin.tar.gz": "f48164a46421d078acdf256cfa500cf7ec81d69af7a2fb44fa0a27acc03e10bc",
+ "ruby-3.4.4.x86_64_linux.tar.gz": "45f31442cacaa8559245ac4d271832ea713e862a4376d10e26adc53a65ba0229",
+ "ruby-3.4.5.arm64_darwin.tar.gz": "d4b4b77144f3e32cb56d4a073e7fa4074a90b67fcff79ef9e6d8b8289e11c918",
+ "ruby-3.4.5.arm64_linux.tar.gz": "7c1b68583ab848c788d282172a678d3e37c3315677c38ee41dade54e0c5a40cc",
+ "ruby-3.4.5.x86_64_darwin.tar.gz": "05f5968d4c86deebe03943791b95c544023e923b2163b62ff1bec4d325b44336",
+ "ruby-3.4.5.x86_64_linux.tar.gz": "f8d9279ebcc6033f3ff6ff4bd5508dd1e23707b46a61ef16ef512d22dce1696c",
+ "ruby-3.4.6.arm64_darwin.tar.gz": "23b2b0863cf54476abe5cd5010fc7f53bc3273b43d92522857c09e5f0cfad146",
+ "ruby-3.4.6.arm64_linux.tar.gz": "a584c6d20b1bfd97fa0367801766e036f03e551137937e6382cde0c3e375b348",
+ "ruby-3.4.6.x86_64_darwin.tar.gz": "356b39a80634198e1d1c1b540d6ed62ed17b6f1f0e049d6e421ddb8803ddf0d5",
+ "ruby-3.4.6.x86_64_linux.tar.gz": "bcb49ed8d5f62762928fc11516fb886c6d69fc7b59b702dce2e0410c9a1597a4",
+ "ruby-3.4.7.arm64_darwin.tar.gz": "25cb42476f10f6b3f0f02a4730eee3399f875af128a66825efb108f45e19498f",
+ "ruby-3.4.7.arm64_linux.tar.gz": "9bd0418b7fbc2102f6282e9d7f74df8d48a606d20c8c47d4c7d7c26a22733196",
+ "ruby-3.4.7.x86_64_darwin.tar.gz": "c62f60db80a7f17573f6f720a1c1da278cd124a56a3f8754a85e1509200b905e",
+ "ruby-3.4.7.x86_64_linux.tar.gz": "a71e07ab9c13cf9ce444dbc2473d37186f8421000f21afdbd39e00498c16d501",
+ "ruby-3.4.8.arm64_darwin.tar.gz": "0d35275ac4dd3d63ea1d608c2022b9a0fd970135a0c6d3961055c8c7df417e67",
+ "ruby-3.4.8.arm64_linux.tar.gz": "fceb851e4aa4f407fa6372a9e310912481638a988b8302fbb07f9acb43da252c",
+ "ruby-3.4.8.x86_64_darwin.tar.gz": "1d8314f8dcf985836c364fa984e568064de0bfb7a19fbe89a864525a0ba9417a",
+ "ruby-3.4.8.x86_64_linux.tar.gz": "dd52dbd7b6b33810e2945607e4ababfd33a6e67cdeb582409d6c1c27cead1b77",
+ "ruby-3.4.9.arm64_darwin.tar.gz": "c59e1611e7f688d5f94537a197c43c50fe98373287b7c34888474a31f03fb76f",
+ "ruby-3.4.9.arm64_linux.tar.gz": "0ba27c26d90bb6ee1ae846263cbe763887cd66729f8758c0ae0d3ac30c815bc4",
+ "ruby-3.4.9.x86_64_darwin.tar.gz": "66a17e71815ea49e84e2a211736c0cc72cf3edbc537c0f80d508d6a1f48be3b6",
+ "ruby-3.4.9.x86_64_linux.tar.gz": "f1da3bcdd1f48a4a8725ebcd1317a72696a29094f9078367bf93caa36fbec95a",
+ "ruby-3.5.0-preview1.arm64_darwin.tar.gz": "f3fb53621b960480255f40386303783d1df1cf23c4161b394a3b9e9e46d29270",
+ "ruby-3.5.0-preview1.arm64_linux.tar.gz": "fe55ad03a3b45cb0a02b801dffc69d6a3692d26edf858d80540efa0e15bf0f46",
+ "ruby-3.5.0-preview1.x86_64_darwin.tar.gz": "1feaa5575e0ea5f4b230e0757ab3eca0c9ec6838fab92355592d55b14400fc28",
+ "ruby-3.5.0-preview1.x86_64_linux.tar.gz": "0f54494302135aad0b0391db99c0627b6a64d306c15f2853c61b85e3e382354f",
+ "ruby-4.0.0-preview2.arm64_darwin.tar.gz": "199d8782469dc337c8ca45b3bcd22b7da9472859f47bb477f4c2585d21a2fe56",
+ "ruby-4.0.0-preview2.arm64_linux.tar.gz": "e6123834a7b4578d5643fb5544a01618fbd19b7206d35537c94f4ab57b4463b4",
+ "ruby-4.0.0-preview2.x86_64_darwin.tar.gz": "880e9287de4f1be84649311805320c83fc77e43bf634c36cff5714cd12a3c2b6",
+ "ruby-4.0.0-preview2.x86_64_linux.tar.gz": "4c79eb040a393d2391a3af50763d13386224266050b0fe499b6655da86bd33f4",
+ "ruby-4.0.0-preview3.arm64_darwin.tar.gz": "ef0ae37580c790af1837c5619e7731cdb0ce90cc0298e0ea43524a46c9a946e7",
+ "ruby-4.0.0-preview3.arm64_linux.tar.gz": "747eff053b3c6b0152958827f02219f52462685169f0a633a835e7ae94f31ec4",
+ "ruby-4.0.0-preview3.x86_64_darwin.tar.gz": "73f260a53104cb11a8a6acc22b0cf1d3a61493ce800bab2fd438836f97ac5f56",
+ "ruby-4.0.0-preview3.x86_64_linux.tar.gz": "eaf3a4dbccac57a170408f96c58fd130f5baba8a7a0981c8d5052725511e3fe0",
+ "ruby-4.0.0.arm64_darwin.tar.gz": "8e0dfe358c6d2b773be3c0d549619bbf6634eb94e29350e4e1430f3ecc5f62d6",
+ "ruby-4.0.0.arm64_linux.tar.gz": "f3ffa1a0d45a742c11f4824064ad2d48c4d689eb056201dfd7044ae5e4ccbdfb",
+ "ruby-4.0.0.x86_64_darwin.tar.gz": "1fad18e1386aad2572d5712b4253b5830830a91f02b925e64d375c2e8227b326",
+ "ruby-4.0.0.x86_64_linux.tar.gz": "e2c74331886ed75d40c8a4b001c67af9d2cb24becb4376ef5f975e3172982c41",
+ "ruby-4.0.1.arm64_darwin.tar.gz": "c4f369109177a4bf7e3b7f9f832199b976c4b858acafd975b4269738e9fd045b",
+ "ruby-4.0.1.arm64_linux.tar.gz": "764698361649919250633bf794e830025dd4f734a0770ae337d3c4b8aa4fc201",
+ "ruby-4.0.1.x86_64_darwin.tar.gz": "c9390e78f713e78d65a4d3e12c092e53648f1d312434a5882ca8b342d395ef43",
+ "ruby-4.0.1.x86_64_linux.tar.gz": "a0f534d04c78b97b8ed2e396ed47399c3132891a11ac37301c04574835e1bf82",
+ "ruby-4.0.2.arm64_darwin.tar.gz": "47fe19133160d55bfbf2d7e52f95036c05afa3b862f39e8672f7109dcd4372d8",
+ "ruby-4.0.2.arm64_linux.tar.gz": "35a6214083b2eeb81130e5f63b46959af216b22ae818b8407226d3ac911219d0",
+ "ruby-4.0.2.x86_64_darwin.tar.gz": "411d472302562f295010a10730016ebda6822e8f19c71428f1bdeed7a1110d5f",
+ "ruby-4.0.2.x86_64_linux.tar.gz": "1d56524ce76697f42b2b301ea91d0521ffc7d4363a0182b4cf459d5f4e237afc",
+ },
}
diff --git a/ruby/private/toolchain.bzl b/ruby/private/toolchain.bzl
index 07bca732..fa271453 100644
--- a/ruby/private/toolchain.bzl
+++ b/ruby/private/toolchain.bzl
@@ -11,6 +11,7 @@ def rb_register_toolchains(
version_file = None,
msys2_packages = ["libyaml"],
portable_ruby = False,
+ portable_ruby_release_suffix = "",
portable_ruby_checksums = {},
register = True,
**kwargs):
@@ -21,7 +22,7 @@ def rb_register_toolchains(
* _(For MRI on Windows)_ Installed using [RubyInstaller](https://rubyinstaller.org).
* _(For JRuby on any OS)_ Downloaded and installed directly from [official website](https://www.jruby.org).
* _(For TruffleRuby on Linux and macOS)_ Installed using [ruby-build](https://github.com/rbenv/ruby-build).
- * _(With portable_ruby)_ Portable Ruby downloaded from [jdx/ruby](https://github.com/jdx/ruby).
+ * _(With portable_ruby)_ Portable Ruby downloaded from [bazel-contrib/portable-ruby](https://github.com/bazel-contrib/portable-ruby).
* _(For "system")_ Ruby found on the PATH is used. Please note that builds are not hermetic in this case.
`WORKSPACE`:
@@ -62,10 +63,11 @@ def rb_register_toolchains(
version: a semver version of MRI, or a string like [interpreter type]-[version], or "system"
version_file: .ruby-version or .tool-versions file to read version from
msys2_packages: extra MSYS2 packages to install
- portable_ruby: when True, downloads portable Ruby from jdx/ruby instead of compiling
+ portable_ruby: when True, downloads portable Ruby from bazel-contrib/portable-ruby instead of compiling
via ruby-build. Has no effect on JRuby, TruffleRuby, or Windows.
+ portable_ruby_release_suffix: release suffix for portable Ruby (default "1", e.g. "2" downloads X.Y.Z-2).
portable_ruby_checksums: platform checksums for portable Ruby downloads, overriding
- built-in checksums. Keys: linux-x86_64, linux-arm64, macos-arm64, macos-x86_64.
+ built-in checksums.
register: whether to register the resulting toolchains, should be False under bzlmod
**kwargs: additional parameters to the downloader for this interpreter type
"""
@@ -77,6 +79,7 @@ def rb_register_toolchains(
version_file = version_file,
msys2_packages = msys2_packages,
portable_ruby = portable_ruby,
+ portable_ruby_release_suffix = portable_ruby_release_suffix,
portable_ruby_checksums = portable_ruby_checksums,
**kwargs
)
diff --git a/tools/generate_portable_ruby_checksums/BUILD.bazel b/tools/generate_portable_ruby_checksums/BUILD.bazel
index abaf8303..0e1df967 100644
--- a/tools/generate_portable_ruby_checksums/BUILD.bazel
+++ b/tools/generate_portable_ruby_checksums/BUILD.bazel
@@ -18,10 +18,10 @@ sh_test(
name = "generate_portable_ruby_checksums_test",
srcs = ["generate_portable_ruby_checksums_test.sh"],
data = [
- "testdata/3.4.8",
+ "testdata/3.4.8-1",
"testdata/expected_checksums_output.txt",
- "testdata/jdx_ruby_release_response.json",
- "testdata/jdx_ruby_releases_list.json",
+ "testdata/portable_ruby_release_response.json",
+ "testdata/portable_ruby_releases_list.json",
":generate_portable_ruby_checksums",
],
deps = [
@@ -34,8 +34,8 @@ sh_test(
name = "generate_portable_ruby_checksums_integration_test",
srcs = ["generate_portable_ruby_checksums_integration_test.sh"],
data = [
- "testdata/3.4.8",
- "testdata/jdx_ruby_release_response.json",
+ "testdata/3.4.8-1",
+ "testdata/portable_ruby_release_response.json",
":generate_portable_ruby_checksums",
],
deps = [
diff --git a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh
index 28b515fa..cd2b231f 100755
--- a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh
+++ b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh
@@ -42,11 +42,12 @@ dry_run=false
name="ruby"
module_bazel="${BUILD_WORKSPACE_DIRECTORY:-.}/MODULE.bazel"
ruby_version=""
+release_suffix="1"
all_releases=false
checksums_bzl="${BUILD_WORKSPACE_DIRECTORY:-.}/ruby/private/portable_ruby_checksums.bzl"
-# jdx/ruby platform names (order matches portable_ruby_checksums.bzl)
-PLATFORMS=("x86_64_linux" "macos" "arm64_linux")
+# bazel-contrib/portable-ruby platform names (order matches portable_ruby_checksums.bzl)
+PLATFORMS=("arm64_darwin" "arm64_linux" "x86_64_darwin" "x86_64_linux")
# MARK - Functions
@@ -89,6 +90,10 @@ while (("$#")); do
checksums_bzl="${2}"
shift 2
;;
+ --release-suffix)
+ release_suffix="${2}"
+ shift 2
+ ;;
-*)
fail "Error: Unknown option: ${1}"
;;
@@ -109,23 +114,57 @@ if [[ ${all_releases} == "true" ]]; then
fi
# Fetch list of all releases with their assets
- list_url="${RV_RUBY_LIST_API_URL:-https://api.github.com/repos/jdx/ruby/releases?per_page=100}"
+ list_url="${PORTABLE_RUBY_LIST_API_URL:-https://api.github.com/repos/bazel-contrib/portable-ruby/releases?per_page=100}"
all_response=$(curl -sL --max-time 60 "${list_url}")
- # Extract all checksums (excluding no_yjit), sorted by key in reverse order
- entries=$(echo "${all_response}" | jq -r \
- '[.[].assets[] | select(.name | endswith(".tar.gz")) | select(.name | contains("no_yjit") | not) | {(.name): (.digest | ltrimstr("sha256:"))}] | add | to_entries | sort_by(.key) | reverse | .[] | " \"\(.key)\": \"\(.value)\","')
+ # Extract checksums grouped by suffix; keys are plain asset names (ruby-VERSION.PLATFORM.tar.gz)
+ entries=$(echo "${all_response}" | jq -r '
+ [
+ .[] |
+ (.tag_name | split("-") | last) as $suffix |
+ (.tag_name | split("-")[:-1] | join("-")) as $version |
+ .assets[] |
+ select(.name | endswith(".tar.gz")) |
+ select(.name | contains("no_yjit") | not) |
+ {suffix: $suffix, key: .name, checksum: (.digest | ltrimstr("sha256:"))}
+ ] |
+ group_by(.suffix) |
+ sort_by(.[0].suffix | tonumber) | reverse |
+ .[] |
+ (.[0].suffix) as $s |
+ " \"" + $s + "\": {\n" + (map(" \"" + .key + "\": \"" + .checksum + "\",") | sort | join("\n")) + "\n },"')
+
+ # Build PORTABLE_RUBY_DEFAULT_SUFFIXES: highest suffix per version
+ default_suffixes=$(echo "${all_response}" | jq -r '
+ [
+ .[] |
+ (.tag_name | split("-") | last | tonumber) as $suffix |
+ (.tag_name | split("-")[:-1] | join("-")) as $version |
+ {version: $version, suffix: $suffix}
+ ] |
+ group_by(.version) |
+ map({(.[0].version): (map(.suffix) | max | tostring)}) |
+ add |
+ to_entries | sort_by(.key) | reverse | .[] |
+ " \"\(.key)\": \"\(.value)\","')
if [[ -z ${entries} ]]; then
fail "Error: No checksums found in releases response"
fi
# Build the bzl file content
- bzl_content='"Provides checksums for portable Ruby versions from jdx/ruby."
+ bzl_content='"Provides checksums for portable Ruby versions from bazel-contrib/portable-ruby."
# Generated via:
# bazel run //tools/generate_portable_ruby_checksums -- --all
+# Maps each Ruby version to its current default release suffix.
+# Updated automatically when a new rebuild (-2, -3, etc.) is published.
+PORTABLE_RUBY_DEFAULT_SUFFIXES = {
+'"${default_suffixes}"'
+}
+
+# Checksums keyed as {suffix: {ruby-VERSION.PLATFORM.tar.gz: sha256}}
PORTABLE_RUBY_CHECKSUMS = {
'"${entries}"'
}
@@ -148,15 +187,15 @@ if [[ -z ${ruby_version} ]]; then
ruby_version="$(read_ruby_version)"
fi
-# MARK - Retrieve jdx/ruby release info
+# MARK - Retrieve bazel-contrib/portable-ruby release info
# Fetch release data from GitHub API
-api_url="${RV_RUBY_API_URL:-https://api.github.com/repos/jdx/ruby/releases/tags}/${ruby_version}"
+api_url="${PORTABLE_RUBY_API_URL:-https://api.github.com/repos/bazel-contrib/portable-ruby/releases/tags}/${ruby_version}-${release_suffix}"
response=$(curl -sL --max-time 30 "${api_url}")
# Check if release was found
if echo "${response}" | jq -e '.message == "Not Found"' >/dev/null 2>&1; then
- fail "Error: jdx/ruby release for Ruby ${ruby_version} not found"
+ fail "Error: bazel-contrib/portable-ruby release for Ruby ${ruby_version} not found"
fi
# MARK - Extract checksums
@@ -182,7 +221,7 @@ done
# Check if we found any assets for this Ruby version
if [[ ${found_ruby_version} != "true" ]]; then
fail <<-EOT
-Error: Ruby version ${ruby_version} not found in jdx/ruby releases
+Error: Ruby version ${ruby_version} not found in bazel-contrib/portable-ruby releases
EOT
fi
@@ -201,7 +240,8 @@ fi
# MARK - Update MODULE.bazel
# Generate output for dry-run or display
-output="portable_ruby_checksums = {\n"
+output="portable_ruby_release_suffix = \"${release_suffix}\",\n"
+output+="portable_ruby_checksums = {\n"
for platform in "${PLATFORMS[@]}"; do
if [[ -n ${checksums[${platform}]:-} ]]; then
output+=" \"ruby-${ruby_version}.${platform}.tar.gz\": \"${checksums[${platform}]}\",\n"
@@ -224,11 +264,12 @@ for platform in "${PLATFORMS[@]}"; do
done
# Update MODULE.bazel using buildozer
-# Set portable_ruby and portable_ruby_checksums
+# Set portable_ruby, portable_ruby_release_suffix, and portable_ruby_checksums
buildozer_cmd=(
"${buildozer}"
-types ruby.toolchain
"set portable_ruby True"
+ "set portable_ruby_release_suffix \"${release_suffix}\""
"remove portable_ruby_checksums"
"dict_set portable_ruby_checksums ${dict_str}"
"${module_bazel}:${name}"
@@ -247,4 +288,4 @@ $(echo -e "${output}")
EOT
fi
-echo "Successfully updated portable_ruby and portable_ruby_checksums in ${module_bazel}"
+echo "Successfully updated portable_ruby, portable_ruby_release_suffix, and portable_ruby_checksums in ${module_bazel}"
diff --git a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_integration_test.sh b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_integration_test.sh
index f3c23aa6..79853a8f 100755
--- a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_integration_test.sh
+++ b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_integration_test.sh
@@ -33,7 +33,7 @@ source "${assertions_sh}"
generate_portable_ruby_checksums_location=rules_ruby/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh
generate_portable_ruby_checksums="$(rlocation "${generate_portable_ruby_checksums_location}")"
-mock_response_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_release_response.json
+mock_response_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/portable_ruby_release_response.json
mock_response="$(rlocation "${mock_response_location}")"
# MARK - Cleanup
@@ -77,7 +77,7 @@ use_repo(ruby, "ruby_toolchains")
EOF
# Mock the API response (the release tag is the Ruby version)
- export RV_RUBY_API_URL="file://${mock_response%/*}"
+ export PORTABLE_RUBY_API_URL="file://${mock_response%/*}"
# Run the script WITHOUT --dry-run
"${generate_portable_ruby_checksums}" --ruby-version 3.4.8 \
@@ -103,9 +103,13 @@ EOF
"${module_content}" \
"MODULE.bazel should contain x86_64_linux checksum"
assert_match \
- '"ruby-3.4.8.macos.tar.gz": "cd9d7a1428076bfcc6c2ca3c0eb69b8e671e9b48afb4c351fa4a84927841ffef"' \
+ '"ruby-3.4.8.arm64_darwin.tar.gz": "4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb"' \
"${module_content}" \
- "MODULE.bazel should contain macos checksum"
+ "MODULE.bazel should contain arm64_darwin checksum"
+ assert_match \
+ '"ruby-3.4.8.x86_64_darwin.tar.gz": "75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462"' \
+ "${module_content}" \
+ "MODULE.bazel should contain x86_64_darwin checksum"
# Verify ruby_version was NOT changed (we didn't update it)
assert_match 'ruby_version = "3.3.0"' "${module_content}" \
@@ -145,7 +149,7 @@ use_repo(ruby, "ruby_toolchains")
EOF
# Mock the API response
- export RV_RUBY_API_URL="file://${mock_response%/*}"
+ export PORTABLE_RUBY_API_URL="file://${mock_response%/*}"
# Run the script for "ruby_alt" toolchain
"${generate_portable_ruby_checksums}" --ruby-version 3.4.8 --name ruby_alt \
diff --git a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_test.sh b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_test.sh
index 58c029b6..47d270d3 100755
--- a/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_test.sh
+++ b/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums_test.sh
@@ -32,13 +32,13 @@ source "${assertions_sh}"
generate_portable_ruby_checksums_location=rules_ruby/tools/generate_portable_ruby_checksums/generate_portable_ruby_checksums.sh
generate_portable_ruby_checksums="$(rlocation "${generate_portable_ruby_checksums_location}")"
-mock_response_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_release_response.json
+mock_response_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/portable_ruby_release_response.json
mock_response="$(rlocation "${mock_response_location}")"
expected_output_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/expected_checksums_output.txt
expected_output="$(rlocation "${expected_output_location}")"
-releases_list_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_releases_list.json
+releases_list_location=rules_ruby/tools/generate_portable_ruby_checksums/testdata/portable_ruby_releases_list.json
releases_list="$(rlocation "${releases_list_location}")"
# MARK - Cleanup
@@ -68,7 +68,7 @@ test_basic_dry_run() {
echo "3.4.8" >.ruby-version
# Mock the API response (the release tag is the Ruby version)
- export RV_RUBY_API_URL="file://${mock_response%/*}"
+ export PORTABLE_RUBY_API_URL="file://${mock_response%/*}"
# Run the script
local output
@@ -93,7 +93,7 @@ test_explicit_ruby_version() {
export BUILD_WORKSPACE_DIRECTORY="${temp_dir}"
# Mock the API response
- export RV_RUBY_API_URL="file://${mock_response%/*}"
+ export PORTABLE_RUBY_API_URL="file://${mock_response%/*}"
# Run the script with explicit version
local output
@@ -119,7 +119,7 @@ test_missing_ruby_version() {
# Don't create .ruby-version file
# Mock the API response
- export RV_RUBY_API_URL="file://${mock_response%/*}"
+ export PORTABLE_RUBY_API_URL="file://${mock_response%/*}"
# Run the script and expect failure
if "${generate_portable_ruby_checksums}" --dry-run 2>/dev/null; then
@@ -139,7 +139,7 @@ test_invalid_ruby_version() {
export BUILD_WORKSPACE_DIRECTORY="${temp_dir}"
# Use a non-existent API URL to simulate 404
- export RV_RUBY_API_URL="file:///nonexistent"
+ export PORTABLE_RUBY_API_URL="file:///nonexistent"
# Run the script and expect failure
if "${generate_portable_ruby_checksums}" --ruby-version 99.99.99 --dry-run 2>/dev/null; then
@@ -163,7 +163,7 @@ test_all_requires_rules_ruby_repo() {
module(name = "some_other_repo")
EOF
- export RV_RUBY_LIST_API_URL="file://${releases_list}"
+ export PORTABLE_RUBY_LIST_API_URL="file://${releases_list}"
# Should fail because module name is not rules_ruby
if "${generate_portable_ruby_checksums}" --all --dry-run 2>/dev/null; then
@@ -186,7 +186,7 @@ test_all_dry_run() {
printf 'module(name = "rules_ruby")\n' >"${temp_dir}/MODULE.bazel"
# Mock the releases list API response
- export RV_RUBY_LIST_API_URL="file://${releases_list}"
+ export PORTABLE_RUBY_LIST_API_URL="file://${releases_list}"
# Run the script with --all --dry-run
local output
@@ -229,7 +229,7 @@ test_all_writes_bzl_file() {
printf 'module(name = "rules_ruby")\n' >"${temp_dir}/MODULE.bazel"
# Mock the releases list API response
- export RV_RUBY_LIST_API_URL="file://${releases_list}"
+ export PORTABLE_RUBY_LIST_API_URL="file://${releases_list}"
# Run the script with --all and a custom output path
local output_file="${temp_dir}/checksums.bzl"
diff --git a/tools/generate_portable_ruby_checksums/testdata/3.4.8 b/tools/generate_portable_ruby_checksums/testdata/3.4.8
deleted file mode 120000
index 921a38d2..00000000
--- a/tools/generate_portable_ruby_checksums/testdata/3.4.8
+++ /dev/null
@@ -1 +0,0 @@
-jdx_ruby_release_response.json
\ No newline at end of file
diff --git a/tools/generate_portable_ruby_checksums/testdata/3.4.8-1 b/tools/generate_portable_ruby_checksums/testdata/3.4.8-1
new file mode 120000
index 00000000..4bc244eb
--- /dev/null
+++ b/tools/generate_portable_ruby_checksums/testdata/3.4.8-1
@@ -0,0 +1 @@
+portable_ruby_release_response.json
\ No newline at end of file
diff --git a/tools/generate_portable_ruby_checksums/testdata/expected_checksums_output.txt b/tools/generate_portable_ruby_checksums/testdata/expected_checksums_output.txt
index 01d81cd1..a264385d 100644
--- a/tools/generate_portable_ruby_checksums/testdata/expected_checksums_output.txt
+++ b/tools/generate_portable_ruby_checksums/testdata/expected_checksums_output.txt
@@ -1,5 +1,7 @@
+portable_ruby_release_suffix = "1",
portable_ruby_checksums = {
- "ruby-3.4.8.x86_64_linux.tar.gz": "f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3",
- "ruby-3.4.8.macos.tar.gz": "cd9d7a1428076bfcc6c2ca3c0eb69b8e671e9b48afb4c351fa4a84927841ffef",
+ "ruby-3.4.8.arm64_darwin.tar.gz": "4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb",
"ruby-3.4.8.arm64_linux.tar.gz": "0c08c35a99f10817643d548f98012268c5433ae25a737ab4d6751336108a941d",
+ "ruby-3.4.8.x86_64_darwin.tar.gz": "75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462",
+ "ruby-3.4.8.x86_64_linux.tar.gz": "f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3",
},
diff --git a/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_release_response.json b/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_release_response.json
deleted file mode 100644
index 35902e97..00000000
--- a/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_release_response.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "tag_name": "3.4.8",
- "name": "3.4.8",
- "assets": [
- {
- "name": "ruby-3.4.8.arm64_linux.tar.gz",
- "digest": "sha256:0c08c35a99f10817643d548f98012268c5433ae25a737ab4d6751336108a941d"
- },
- {
- "name": "ruby-3.4.8.x86_64_linux.tar.gz",
- "digest": "sha256:f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3"
- },
- {
- "name": "ruby-3.4.8.macos.tar.gz",
- "digest": "sha256:cd9d7a1428076bfcc6c2ca3c0eb69b8e671e9b48afb4c351fa4a84927841ffef"
- }
- ]
-}
diff --git a/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_releases_list.json b/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_releases_list.json
deleted file mode 100644
index 00b29449..00000000
--- a/tools/generate_portable_ruby_checksums/testdata/jdx_ruby_releases_list.json
+++ /dev/null
@@ -1,42 +0,0 @@
-[
- {
- "tag_name": "3.4.8",
- "name": "3.4.8",
- "assets": [
- {
- "name": "ruby-3.4.8.arm64_linux.tar.gz",
- "digest": "sha256:0c08c35a99f10817643d548f98012268c5433ae25a737ab4d6751336108a941d"
- },
- {
- "name": "ruby-3.4.8.x86_64_linux.tar.gz",
- "digest": "sha256:f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3"
- },
- {
- "name": "ruby-3.4.8.macos.tar.gz",
- "digest": "sha256:cd9d7a1428076bfcc6c2ca3c0eb69b8e671e9b48afb4c351fa4a84927841ffef"
- },
- {
- "name": "ruby-3.4.8.arm64_linux.no_yjit.tar.gz",
- "digest": "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- }
- ]
- },
- {
- "tag_name": "3.4.7",
- "name": "3.4.7",
- "assets": [
- {
- "name": "ruby-3.4.7.arm64_linux.tar.gz",
- "digest": "sha256:9e65819ba3ca56dd49f012692dca32efb6ae5142f6493bb50fd4ccaa766cc31c"
- },
- {
- "name": "ruby-3.4.7.x86_64_linux.tar.gz",
- "digest": "sha256:ea1a3ac2c5301358e22371ca2b526f48e910fccbcbccdc5542d7c8cef4c5b9d0"
- },
- {
- "name": "ruby-3.4.7.macos.tar.gz",
- "digest": "sha256:cf0dc9f8f4d476860f24fc81d4b338317471cf1fffa0b09ce26d489407db511b"
- }
- ]
- }
-]
diff --git a/tools/generate_portable_ruby_checksums/testdata/portable_ruby_release_response.json b/tools/generate_portable_ruby_checksums/testdata/portable_ruby_release_response.json
new file mode 100644
index 00000000..60d6e985
--- /dev/null
+++ b/tools/generate_portable_ruby_checksums/testdata/portable_ruby_release_response.json
@@ -0,0 +1,22 @@
+{
+ "tag_name": "3.4.8-1",
+ "name": "3.4.8-1",
+ "assets": [
+ {
+ "name": "ruby-3.4.8.arm64_darwin.tar.gz",
+ "digest": "sha256:4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb"
+ },
+ {
+ "name": "ruby-3.4.8.arm64_linux.tar.gz",
+ "digest": "sha256:0c08c35a99f10817643d548f98012268c5433ae25a737ab4d6751336108a941d"
+ },
+ {
+ "name": "ruby-3.4.8.x86_64_darwin.tar.gz",
+ "digest": "sha256:75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462"
+ },
+ {
+ "name": "ruby-3.4.8.x86_64_linux.tar.gz",
+ "digest": "sha256:f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3"
+ }
+ ]
+}
diff --git a/tools/generate_portable_ruby_checksums/testdata/portable_ruby_releases_list.json b/tools/generate_portable_ruby_checksums/testdata/portable_ruby_releases_list.json
new file mode 100644
index 00000000..8dd84c6b
--- /dev/null
+++ b/tools/generate_portable_ruby_checksums/testdata/portable_ruby_releases_list.json
@@ -0,0 +1,46 @@
+[
+ {
+ "tag_name": "3.4.8-2",
+ "name": "3.4.8-2",
+ "assets": [
+ {
+ "name": "ruby-3.4.8.arm64_darwin.tar.gz",
+ "digest": "sha256:4b5343a5513523409b4cc1b285ebaeb75356c758080e45d99f506a827492a8fb"
+ },
+ {
+ "name": "ruby-3.4.8.arm64_linux.tar.gz",
+ "digest": "sha256:0c08c35a99f10817643d548f98012268c5433ae25a737ab4d6751336108a941d"
+ },
+ {
+ "name": "ruby-3.4.8.x86_64_darwin.tar.gz",
+ "digest": "sha256:75b72e64e42bb36a80e3382751c74bfe379efcf28880ed3c4c86657cac9d8462"
+ },
+ {
+ "name": "ruby-3.4.8.x86_64_linux.tar.gz",
+ "digest": "sha256:f36cef10365d370e0867f0c3ac36e457a26ab04f3cfbbd7edb227a18e6e9b3c3"
+ }
+ ]
+ },
+ {
+ "tag_name": "3.4.7-1",
+ "name": "3.4.7-1",
+ "assets": [
+ {
+ "name": "ruby-3.4.7.arm64_darwin.tar.gz",
+ "digest": "sha256:ba4a40de9f56bc8c32bd7c6f28313b2658abd83e40cd02a84f73ea61fc3204b0"
+ },
+ {
+ "name": "ruby-3.4.7.arm64_linux.tar.gz",
+ "digest": "sha256:7d0fc36781e0941b7a24eed9ffb39a90c7a3c41dd1225e1906dbc96335fde783"
+ },
+ {
+ "name": "ruby-3.4.7.x86_64_darwin.tar.gz",
+ "digest": "sha256:2d060042c089554b42f8fb5bc10b0c878a5410fdbb4b17b27aaa398e556c3499"
+ },
+ {
+ "name": "ruby-3.4.7.x86_64_linux.tar.gz",
+ "digest": "sha256:cd474f675b1c9f83f964156acb0152a2b3747b264d5da42c6a16dc1888d305b9"
+ }
+ ]
+ }
+]