Skip to content

Commit 44a995f

Browse files
Handle missing ruby runtime (#10)
* Warn but allow systems with no ruby installation * Fix generated registration function * Run setup as root * Fixed typo in no implementation forwarding * Use a mock/incompatible toolchain to always register system ruby * Remove comment * Make ruby_bundle a generated repository rule for each version. This removes the need to ever use the system ruby * Auto detect toolchain by default * Add placeholder for when the system ruby isn't requested * Fix typo for system label * Run tests as root * Don't run workflow as sudo * Always run rbenv in workflow * Buildifier * Refactor toolchain registration to explicitly specify repo name * Move toolchain registration out of runtime macro * Adding comments to workspace file
1 parent fdcf4ce commit 44a995f

File tree

22 files changed

+387
-165
lines changed

22 files changed

+387
-165
lines changed

README.adoc

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,17 +108,14 @@ rules_ruby_dependencies()
108108
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
109109
bazel_skylib_workspace()
110110
111-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_register_toolchains")
112-
rules_ruby_register_toolchains(["ruby-3.0"])
111+
load("@rules_ruby//ruby:deps.bzl", "register_toolchain")
112+
register_toolchains("ruby-3.0")
113113
114114
#———————————————————————————————————————————————————————————————————————
115115
# Now, load the ruby_bundle rule & install gems specified in the Gemfile
116116
#———————————————————————————————————————————————————————————————————————
117117
118-
load(
119-
"@rules_ruby//ruby:defs.bzl",
120-
"ruby_bundle",
121-
)
118+
load("@ruby-3.0//:bundle.bzl", "ruby_bundle")
122119
123120
ruby_bundle(
124121
name = "bundle",
@@ -550,7 +547,7 @@ List of glob patterns per gem to be excluded from the library. Keys are the name
550547

551548
[source,python]
552549
----
553-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
550+
load("@ruby-3.0//:bundle.bzl", "ruby_bundle")
554551
555552
ruby_bundle(
556553
name = "gems",
@@ -567,7 +564,7 @@ your workspace. The name should match the name of the bundle.
567564

568565
[source,python]
569566
----
570-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
567+
load("@ruby-3.0//:bundle.bzl", "ruby_bundle")
571568
572569
workspace(
573570
name = "my_wksp",

WORKSPACE

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,28 @@ load("@bazel_skylib//lib:versions.bzl", "versions")
1212

1313
versions.check("3.4.1")
1414

15-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_register_toolchains")
15+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
1616

17-
rules_ruby_register_toolchains([
18-
"ruby-3.0",
19-
"jruby-9.2",
20-
])
17+
# Register the system ruby version with a custom name.
18+
ruby_runtime(
19+
name = "system_ruby_custom",
20+
version = "system",
21+
)
22+
23+
register_toolchains("@system_ruby_custom//:toolchain")
24+
25+
# Register a versioned ruby with a custom name.
26+
ruby_runtime(
27+
name = "ruby3",
28+
version = "ruby-3.0",
29+
)
30+
31+
register_toolchains("@ruby3//:toolchain")
32+
33+
# Register a versioned ruby with its default name.
34+
ruby_runtime("jruby-9.2")
35+
36+
register_toolchains("@jruby-9.2//:toolchain")
2137

2238
local_repository(
2339
name = "rules_ruby_ruby_tests_testdata_another_workspace",
@@ -100,7 +116,7 @@ container_pull(
100116
repository = "library/ruby",
101117
)
102118

103-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
119+
load("@system_ruby_custom//:bundle.bzl", "ruby_bundle")
104120

105121
ruby_bundle(
106122
name = "bundle",

bin/setup

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ setup.rbenv() {
3737
local installed_version="$(ruby -e 'puts RUBY_VERSION' | tr -d '\n')"
3838
if [[ ${installed_version} == ${ruby_version} ]]; then
3939
info "RUBY already installed, current version: ${bldylw}${ruby_version}"
40-
return 0
40+
info "Setting up rbenv anyway"
4141
fi
4242
fi
4343

examples/example_gem/WORKSPACE

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies")
1111

1212
rules_ruby_dependencies()
1313

14-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_register_toolchains")
14+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
1515

16-
rules_ruby_register_toolchains(["ruby-3.0"])
16+
ruby_runtime("ruby-3.0")
17+
18+
register_toolchains("@ruby-3.0//:toolchain")
1719

1820
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
1921

examples/simple_rails_api/WORKSPACE

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,17 @@ load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies")
1111

1212
rules_ruby_dependencies()
1313

14-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_register_toolchains")
14+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
1515

16-
rules_ruby_register_toolchains(["ruby-3.0"])
16+
ruby_runtime("ruby-3.0")
17+
18+
register_toolchains("@ruby-3.0//:toolchain")
1719

1820
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
1921

2022
bazel_skylib_workspace()
2123

22-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
24+
load("@workspace_ruby//:bundle.bzl", "ruby_bundle")
2325

2426
ruby_bundle(
2527
name = "bundle",

examples/simple_script/WORKSPACE

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@ local_repository(
77
path = "../..",
88
)
99

10-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies", "rules_ruby_register_toolchains")
10+
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies")
1111

1212
rules_ruby_dependencies()
1313

14-
rules_ruby_register_toolchains(["ruby-3.0"])
14+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
1515

16-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
16+
ruby_runtime("ruby-3.0")
17+
18+
register_toolchains("@ruby-3.0//:toolchain")
19+
20+
load("@ruby-3.0//:bundle.bzl", "ruby_bundle")
1721

1822
ruby_bundle(
1923
name = "bundle",

examples/simple_script_vendored/WORKSPACE

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,20 @@ local_repository(
1010
path = "../..",
1111
)
1212

13-
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies", "rules_ruby_register_toolchains")
13+
load("@rules_ruby//ruby:deps.bzl", "rules_ruby_dependencies")
1414

1515
rules_ruby_dependencies()
1616

17-
rules_ruby_register_toolchains(["ruby-2.7.1"])
17+
load("@rules_ruby//ruby:defs.bzl", "ruby_runtime")
1818

19-
load("@rules_ruby//ruby:defs.bzl", "ruby_bundle")
19+
ruby_runtime(
20+
name = "ruby-2.7",
21+
version = "ruby-2.7.1",
22+
)
23+
24+
register_toolchains("@ruby-2.7//:toolchain")
25+
26+
load("@ruby-2.7.1//:bundle.bzl", "ruby_bundle")
2027

2128
ruby_bundle(
2229
name = "bundle",

ruby/defs.bzl

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
load(
22
"@rules_ruby//ruby/private:toolchain.bzl",
3+
_mock_toolchain = "mock_ruby_toolchain",
34
_toolchain = "ruby_toolchain",
45
)
56
load(
@@ -13,8 +14,7 @@ load(
1314
)
1415
load(
1516
"@rules_ruby//ruby/private/bundle:def.bzl",
16-
_bundle = "bundle_install",
17-
_ruby_bundle = "ruby_bundle_install",
17+
_bundle_install = "bundle_install",
1818
)
1919
load(
2020
"@rules_ruby//ruby/private:rspec.bzl",
@@ -30,15 +30,20 @@ load(
3030
_gem = "gem",
3131
_gemspec = "gemspec",
3232
)
33+
load(
34+
"@rules_ruby//ruby/private:sdk.bzl",
35+
_register_ruby_runtime = "register_ruby_runtime",
36+
)
3337

38+
ruby_mock_toolchain = _mock_toolchain
3439
ruby_toolchain = _toolchain
3540
ruby_library = _library
3641
ruby_binary = _binary
3742
ruby_test = _test
3843
ruby_rspec_test = _rspec_test
3944
ruby_rspec = _rspec
40-
ruby_bundle = _ruby_bundle
41-
ruby_bundle_install = _bundle
45+
ruby_bundle_install = _bundle_install
4246
ruby_rubocop = _rubocop
4347
ruby_gemspec = _gemspec
4448
ruby_gem = _gem
49+
ruby_runtime = _register_ruby_runtime

ruby/deps.bzl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,5 @@ load(
33
"@rules_ruby//ruby/private:dependencies.bzl",
44
_rules_ruby_dependencies = "rules_ruby_dependencies",
55
)
6-
load(
7-
"@rules_ruby//ruby/private:sdk.bzl",
8-
_rules_ruby_register_toolchains = "rules_ruby_register_toolchains",
9-
)
106

117
rules_ruby_dependencies = _rules_ruby_dependencies
12-
rules_ruby_register_toolchains = _rules_ruby_register_toolchains

ruby/private/bundle/def.bzl

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ def generate_bundle_build_file(runtime_ctx, previous_result):
173173
if result.return_code:
174174
fail("build file generation failed: %s%s" % (result.stdout, result.stderr))
175175

176-
def _ruby_bundle_impl(ctx):
176+
def ruby_bundle_impl(ctx, ruby_interpreter):
177177
ctx.symlink(ctx.attr.gemfile, ctx.attr.gemfile.name)
178178
if ctx.attr.gemfile_lock:
179179
ctx.symlink(ctx.attr.gemfile_lock, ctx.attr.gemfile_lock.name)
@@ -192,7 +192,7 @@ def _ruby_bundle_impl(ctx):
192192
# Setup this provider that we pass around between functions for convenience
193193
runtime_ctx = RubyRuntimeInfo(
194194
ctx = ctx,
195-
interpreter = ctx.path(ctx.attr.ruby_interpreter),
195+
interpreter = ruby_interpreter,
196196
environment = {"RUBYOPT": "--enable-gems"},
197197
)
198198

@@ -218,8 +218,3 @@ def _ruby_bundle_impl(ctx):
218218

219219
# 5. Generate the BUILD file for the bundle
220220
generate_bundle_build_file(runtime_ctx, result)
221-
222-
ruby_bundle_install = repository_rule(
223-
implementation = _ruby_bundle_impl,
224-
attrs = BUNDLE_ATTRS,
225-
)

0 commit comments

Comments
 (0)