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" + } + ] + } +]