bazelruby / rules_ruby

Formerly canonical rules for ruby, that are about 2-3 years behind current Bazel. If they work for you great, but if not — please try the new rules ruby by Alex Radionov: https://github.com/bazel-contrib/rules_ruby
Apache License 2.0
99 stars 37 forks source link

Ability to run ruby_bundle without gemfile_lock attribute #129

Open mvgijssel opened 2 years ago

mvgijssel commented 2 years ago

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,
    }
kigster commented 2 years ago

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 commented 1 year ago

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