Public API for repository rules
load("@rules_ruby//ruby:deps.bzl", "rb_bundle") rb_bundle(toolchain, **kwargs)
Wraps rb_bundle_rule()
providing default toolchain name.
PARAMETERS
Name | Description | Default Value |
---|---|---|
toolchain | default Ruby toolchain BUILD | "@ruby//:BUILD" |
kwargs | underlying attrs passed to rb_bundle_rule() | none |
load("@rules_ruby//ruby:deps.bzl", "rb_register_toolchains") rb_register_toolchains(name, version, version_file, msys2_packages, register, **kwargs)
Register a Ruby toolchain and lazily download the Ruby Interpreter.
- (For MRI on Linux and macOS) Installed using ruby-build.
- (For MRI on Windows) Installed using RubyInstaller.
- (For JRuby on any OS) Downloaded and installed directly from official website.
- (For TruffleRuby on Linux and macOS) Installed using ruby-build.
- (For "system") Ruby found on the PATH is used. Please note that builds are not hermetic in this case.
WORKSPACE
:
load("@rules_ruby//ruby:deps.bzl", "rb_register_toolchains")
rb_register_toolchains(
version = "3.0.6"
)
Once registered, you can use the toolchain directly as it provides all the binaries:
$ bazel run @ruby -- -e "puts RUBY_VERSION"
$ bazel run @ruby//:bundle -- update
$ bazel run @ruby//:gem -- install rails
You can also use Ruby engine targets to select()
depending on installed Ruby interpreter:
BUILD
:
rb_library(
name = "my_lib",
srcs = ["my_lib.rb"],
deps = select({
"@ruby//engine:jruby": [":my_jruby_lib"],
"@ruby//engine:truffleruby": ["//:my_truffleruby_lib"],
"@ruby//engine:ruby": ["//:my__lib"],
"//conditions:default": [],
}),
)
PARAMETERS
load("@rules_ruby//ruby:deps.bzl", "rb_bundle_fetch") rb_bundle_fetch(name, srcs, bundler_checksums, bundler_remote, env, gem_checksums, gemfile, gemfile_lock, repo_mapping, ruby)
Fetches Bundler dependencies to be automatically installed by other targets.
Currently doesn't support installing gems from Git repositories, see #62.
WORKSPACE
:
load("@rules_ruby//ruby:deps.bzl", "rb_bundle_fetch")
rb_bundle_fetch(
name = "bundle",
gemfile = "//:Gemfile",
gemfile_lock = "//:Gemfile.lock",
srcs = [
"//:gem.gemspec",
"//:lib/gem/version.rb",
]
)
Checksums for gems in Gemfile.lock are printed by the ruleset during the build.
It's recommended to add them to gem_checksums
attribute.
WORKSPACE
:
rb_bundle_fetch(
name = "bundle",
gemfile = "//:Gemfile",
gemfile_lock = "//:Gemfile.lock",
gem_checksums = {
"ast-2.4.2": "1e280232e6a33754cde542bc5ef85520b74db2aac73ec14acef453784447cc12",
"concurrent-ruby-1.2.2": "3879119b8b75e3b62616acc256c64a134d0b0a7a9a3fcba5a233025bcde22c4f",
},
)
All the installed gems can be accessed using @bundle
target and additionally
gems binary files can also be used via BUILD rules or directly with bazel run
:
BUILD
:
load("@rules_ruby//ruby:defs.bzl", "rb_test")
package(default_visibility = ["//:__subpackages__"])
rb_test(
name = "rubocop",
main = "@bundle//bin:rubocop",
deps = ["@bundle"],
)
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this repository. | Name | required | |
srcs | List of Ruby source files necessary during installation. | List of labels | optional | [] |
bundler_checksums | Custom map from Bundler version to its SHA-256 checksum. | Dictionary: String -> String | optional | {} |
bundler_remote | Remote to fetch the bundler gem from. | String | optional | "https://rubygems.org/" |
env | Environment variables to use during installation. | Dictionary: String -> String | optional | {} |
gem_checksums | SHA-256 checksums for remote gems. Keys are gem names (e.g. foobar-1.2.3), values are SHA-256 checksums. | Dictionary: String -> String | optional | {} |
gemfile | Gemfile to install dependencies from. | Label | required | |
gemfile_lock | Gemfile.lock to install dependencies from. | Label | required | |
repo_mapping | In WORKSPACE context only: a dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target , it should actually resolve that dependency within globally-declared @bar (@bar//some:target ).This attribute is not supported in MODULE.bazel context (when invoking a repository rule inside a module extension's implementation function). |
Dictionary: String -> String | optional | |
ruby | Override Ruby toolchain to use for installation. | Label | optional | None |
load("@rules_ruby//ruby:deps.bzl", "rb_bundle_rule") rb_bundle_rule(name, srcs, env, gemfile, repo_mapping, toolchain)
(Deprecated) Use rb_bundle_fetch()
instead.
Installs Bundler dependencies and registers an external repository that can be used by other targets.
WORKSPACE
:
load("@rules_ruby//ruby:deps.bzl", "rb_bundle")
rb_bundle(
name = "bundle",
gemfile = "//:Gemfile",
srcs = [
"//:gem.gemspec",
"//:lib/gem/version.rb",
]
)
All the installed gems can be accessed using @bundle
target and additionally
gems binary files can also be used:
BUILD
:
load("@rules_ruby//ruby:defs.bzl", "rb_binary")
package(default_visibility = ["//:__subpackages__"])
rb_binary(
name = "rubocop",
main = "@bundle//:bin/rubocop",
deps = ["@bundle"],
)
ATTRIBUTES
Name | Description | Type | Mandatory | Default |
---|---|---|---|---|
name | A unique name for this repository. | Name | required | |
srcs | List of Ruby source files used to build the library. | List of labels | optional | [] |
env | Environment variables to use during installation. | Dictionary: String -> String | optional | {} |
gemfile | Gemfile to install dependencies from. | Label | optional | None |
repo_mapping | In WORKSPACE context only: a dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.For example, an entry "@foo": "@bar" declares that, for any time this repository depends on @foo (such as a dependency on @foo//some:target , it should actually resolve that dependency within globally-declared @bar (@bar//some:target ).This attribute is not supported in MODULE.bazel context (when invoking a repository rule inside a module extension's implementation function). |
Dictionary: String -> String | optional | |
toolchain | - | Label | required |