Skip to content

Commit

Permalink
Add Next Gemfile Support
Browse files Browse the repository at this point in the history
Closes #1
  • Loading branch information
JuanVqz committed Mar 22, 2024
1 parent 7866d1e commit 0d0870b
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 5 deletions.
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,17 @@ For more information about using Ruby and buildpacks on Heroku, see these Dev Ce

To use this buildpack, fork it on Github. Push up changes to your fork, then create a test app with `--buildpack <your-github-url>` and push to it.


## Next Rails

This buildpack supports next Rails versions, to configure it follow the steps below:

1. Make sure your app can boot with the next Rails version locally.
2. Go to the Settings tab of your Heroku app, and add the `BUNDLE_GEMFILE` config var with `Gemfile.next` as a value.
3. Go to the Buildpacks section and remove the `heroku/ruby` buildpack from your app and add `https://github.com/fastruby/heroku-buildpack-ruby#add_gemfile_next_support`
4. Deploy your app to Heroku.
5. The Next Rails version should be installed and your app should boot.

### Testing

The tests on this buildpack are written in Rspec to allow the use of
Expand Down
4 changes: 2 additions & 2 deletions lib/language_pack/helpers/bundler_wrapper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def initialize(version_hash, major_minor)
def initialize(options = {})
@bundler_tmp = Pathname.new(Dir.mktmpdir)
@fetcher = options[:fetcher] || LanguagePack::Fetcher.new(LanguagePack::Base::VENDOR_URL) # coupling
@gemfile_path = options[:gemfile_path] || Pathname.new("./Gemfile")
@gemfile_path = options[:gemfile_path] || Pathname.new(env("BUNDLE_GEMFILE") || "./Gemfile")
@gemfile_lock_path = Pathname.new("#{@gemfile_path}.lock")

@version = self.class.detect_bundler_version(contents: @gemfile_lock_path.read(mode: "rt"))
Expand Down Expand Up @@ -223,7 +223,7 @@ def needs_ruby_global_append_path?
end

def bundler_version_escape_valve!
topic("Removing BUNDLED WITH version in the Gemfile.lock")
topic("Removing BUNDLED WITH version in the #{@gemfile_lock_path}")
contents = File.read(@gemfile_lock_path, mode: "rt")
File.open(@gemfile_lock_path, "w") do |f|
f.write contents.sub(/^BUNDLED WITH$(\r?\n) (?<major>\d+)\.\d+\.\d+/m, '')
Expand Down
18 changes: 15 additions & 3 deletions lib/language_pack/ruby.rb
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ def build
build_bundler
# TODO post_bundler might need to be done in a new layer
bundler.clean
gem_layer.metadata[:gems] = Digest::SHA2.hexdigest(File.read("Gemfile.lock"))
gem_layer.metadata[:gems] = Digest::SHA2.hexdigest(File.read(gemfile_lock_path))
gem_layer.metadata[:stack] = @stack
gem_layer.metadata[:ruby_version] = run_stdout(%q(ruby -v)).strip
gem_layer.metadata[:rubygems_version] = run_stdout(%q(gem -v)).strip
Expand Down Expand Up @@ -779,7 +779,7 @@ def build_bundler
if bundler.windows_gemfile_lock?
log("bundle", "has_windows_gemfile_lock")

File.unlink("Gemfile.lock")
File.unlink(gemfile_lock_path)
ENV.delete("BUNDLE_DEPLOYMENT")

warn(<<~WARNING, inline: true)
Expand Down Expand Up @@ -816,7 +816,7 @@ def build_bundler

# we need to set BUNDLE_CONFIG and BUNDLE_GEMFILE for
# codon since it uses bundler.
env_vars["BUNDLE_GEMFILE"] = "#{pwd}/Gemfile"
env_vars["BUNDLE_GEMFILE"] = "#{pwd}/#{gemfile_path}"
env_vars["BUNDLE_CONFIG"] = "#{pwd}/.bundle/config"
env_vars["CPATH"] = noshellescape("#{yaml_include}:$CPATH")
env_vars["CPPATH"] = noshellescape("#{yaml_include}:$CPPATH")
Expand Down Expand Up @@ -1350,4 +1350,16 @@ def purge_bundler_cache(stack = nil)
# need to reinstall language pack gems
install_bundler_in_app(slug_vendor_base)
end

def current_gemfile
env("BUNDLE_GEMFILE") || "Gemfile"
end

def gemfile_path
Pathname.new(current_gemfile)
end

def gemfile_lock_path
Pathname.new("#{current_gemfile}.lock")
end
end

0 comments on commit 0d0870b

Please sign in to comment.