rules_ruby icon indicating copy to clipboard operation
rules_ruby copied to clipboard

Ability to run ruby_bundle without gemfile_lock attribute

Open mvgijssel opened this issue 3 years ago • 2 comments

Currently when running a ruby_bundle without the gemfile_lock attribute results in the following error

ERROR: An error occurred during the fetch of repository 'vagrant_bundle':
   Traceback (most recent call last):
	File "/private/var/tmp/_bazel_maarten/8c4bfcd606c4d7b95cf418885251b08c/external/bazelruby_rules_ruby/ruby/private/bundle/def.bzl", line 198, column 28, in _ruby_bundle_impl
		result = bundle_install(runtime_ctx, result)
	File "/private/var/tmp/_bazel_maarten/8c4bfcd606c4d7b95cf418885251b08c/external/bazelruby_rules_ruby/ruby/private/bundle/def.bzl", line 138, column 13, in bundle_install
		fail("bundle install failed: %s%s" % (result.stdout, result.stderr))
Error in fail: bundle install failed: The deployment setting requires a Gemfile.lock. Please make sure you have
checked your Gemfile.lock into version control before deploying

The documentation (https://github.com/bazelruby/rules_ruby#54-ruby_bundle) suggests that it's possible to run ruby_bundle without passing the gemfile_lock attribute. This is backed-up by the conditional in the code which checks for the presence of the gemfile_lock attribute https://github.com/bazelruby/rules_ruby/blob/master/ruby/private/bundle/def.bzl#L125-L126.

The problem is that the set_bundler_config hardcodes the deployment and frozen settings to true (https://github.com/bazelruby/rules_ruby/blob/master/ruby/private/bundle/def.bzl#L56-L58) which enforces that any bundle install command requires a Gemfile.lock file.

Disabling these settings as follows seems to help in the case of no Gemfile.lock:

    bundler_config = {
        # "deployment": "false",
        "standalone": "true",
        "force": "false",
        "redownload": "false",
        # "frozen": "true",
        "path": BUNDLE_PATH,
        "jobs": "20",
        "shebang": runtime_ctx.interpreter,
    }

mvgijssel avatar Apr 10 '22 06:04 mvgijssel

I can't remember why we added these bundler settings but perhaps it's so that the bundle can be vendored?

If you can investigate the implications of not putting deployment into bundle config I could be convinced to drop that.

kigster avatar May 12 '22 19:05 kigster

Looking for additional core maintainers: https://github.com/bazelruby/rules_ruby/discussions/146

kigster avatar May 10 '23 17:05 kigster