Skip to content

Commit 47edb0f

Browse files
authored
Re-enable bundler 1.x, add a Warning (heroku#1565)
* Bootstrap with Ruby 3.2 * Warn instead of error on Bundler 1.x * Ruby buildpack bootstrap 3.1.6 * Changelog * Update version constant * Revert error class caught
1 parent 7ceb62d commit 47edb0f

12 files changed

Lines changed: 65 additions & 28 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
## [Unreleased]
44

5+
- Bundler `1.x` usage error is downgraded to a warning. This warning will be moved to an error once `heroku-20` is Sunset (https://github.com/heroku/heroku-buildpack-ruby/pull/1565)
56

67
## [v295] - 2025-03-20
78

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
source "https://rubygems.org"
22
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
33

4-
ruby "3.3.7"
4+
ruby "3.1.6"
55

66
group :development, :test do
77
gem "toml-rb"

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ DEPENDENCIES
7373
toml-rb
7474

7575
RUBY VERSION
76-
ruby 3.3.7p260
76+
ruby 3.1.6p260
7777

7878
BUNDLED WITH
7979
2.5.11

buildpack.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[buildpack]
22
name = "Ruby"
3-
ruby_version = "3.3.7"
3+
ruby_version = "3.1.6"
44

55
[publish.Ignore]
66
files = [

lib/language_pack/helpers/bundler_wrapper.rb

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class LanguagePack::Helpers::BundlerWrapper
3737

3838
BLESSED_BUNDLER_VERSIONS = {}
3939
# Heroku-20's oldest Ruby verison is 2.5.x which doesn't work with bundler 2.4
40+
BLESSED_BUNDLER_VERSIONS["1"] = "1.17.3"
4041
BLESSED_BUNDLER_VERSIONS["2.3"] = "2.3.25"
4142
BLESSED_BUNDLER_VERSIONS["2.4"] = "2.4.22"
4243
BLESSED_BUNDLER_VERSIONS["2.5"] = "2.5.23"
@@ -47,22 +48,7 @@ class LanguagePack::Helpers::BundlerWrapper
4748
# Convert arbitrary `<Major>.<Minor>.x` versions
4849
BLESSED_BUNDLER_VERSIONS.default_proc = Proc.new do |hash, key|
4950
if Gem::Version.new(key).segments.first == 1
50-
raise BuildpackError.new(<<~EOF)
51-
Cannot install bundler 1.17.3
52-
53-
Your application requested bundler `#{key}` in the `Gemfile.lock`
54-
which resolved to `1.17.3`. This version no longer works on
55-
Heroku. Please upgrade to bundler `2.3.x` or higher:
56-
57-
```
58-
$ gem install bundler -v #{hash["2.3"]}
59-
$ bundle update --bundler
60-
$ git add Gemfile.lock
61-
$ git commit -m "Updated bundler version"
62-
```
63-
64-
https://devcenter.heroku.com/changelog-items/3166
65-
EOF
51+
hash["1"]
6652
elsif Gem::Version::new(key).segments.first == 2
6753
if Gem::Version.new(key) > Gem::Version.new("2.6")
6854
hash["2.6"]
@@ -81,7 +67,8 @@ def self.detect_bundler_version(contents: )
8167
if version_match
8268
major = version_match[:major]
8369
minor = version_match[:minor]
84-
BLESSED_BUNDLER_VERSIONS["#{major}.#{minor}"]
70+
version = BLESSED_BUNDLER_VERSIONS["#{major}.#{minor}"]
71+
version
8572
else
8673
DEFAULT_VERSION
8774
end

lib/language_pack/ruby.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def compile
7979
Dir.chdir(build_path)
8080
remove_vendor_bundle
8181
warn_bundler_upgrade
82+
warn_bundler_1x
8283
warn_bad_binstubs
8384
install_ruby(slug_vendor_ruby)
8485
setup_language_pack_environment(
@@ -108,6 +109,30 @@ def compile
108109
raise e
109110
end
110111

112+
def warn_bundler_1x
113+
bundler_versions = LanguagePack::Helpers::BundlerWrapper::BLESSED_BUNDLER_VERSIONS
114+
if bundler.version == bundler_versions["1"]
115+
warn(<<~EOF, inline: true)
116+
Deprecating bundler 1.17.3
117+
118+
Your application requested bundler `1.x` in the `Gemfile.lock`
119+
which resolved to `1.17.3`. This version is no longer maintained
120+
by bundler core and will no longer work soon.
121+
122+
Please upgrade to bundler `2.3.x` or higher:
123+
124+
```
125+
$ gem install bundler -v #{bundler_versions["2.3"]}
126+
$ bundle update --bundler
127+
$ git add Gemfile.lock
128+
$ git commit -m "Updated bundler version"
129+
```
130+
131+
https://devcenter.heroku.com/changelog-items/3166
132+
EOF
133+
end
134+
end
135+
111136
def cleanup
112137
end
113138

lib/language_pack/ruby_version.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def initialize(output = "")
1212
end
1313
end
1414

15-
BOOTSTRAP_VERSION_NUMBER = "3.3.7".freeze
15+
BOOTSTRAP_VERSION_NUMBER = "3.1.6".freeze
1616
DEFAULT_VERSION_NUMBER = "3.3.7".freeze
1717
DEFAULT_VERSION = "ruby-#{DEFAULT_VERSION_NUMBER}".freeze
1818
LEGACY_VERSION_NUMBER = "1.9.2".freeze

spec/hatchet/bundler_spec.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,26 @@
99
end
1010
end
1111
end
12+
13+
it "deploys with version 1.x" do
14+
pending("Must enable HATCHET_EXPENSIVE_MODE") unless ENV["HATCHET_EXPENSIVE_MODE"]
15+
16+
Hatchet::Runner.new("default_ruby").tap do |app|
17+
app.before_deploy do
18+
set_bundler_version(version: "1.17.3")
19+
Pathname("Gemfile.lock").write(<<~EOF, mode: "a")
20+
21+
RUBY VERSION
22+
ruby 3.1.6
23+
EOF
24+
end
25+
app.deploy do
26+
expect(app.output).to match("Deprecating bundler 1.17.3")
27+
28+
app.run("which -a rake") do |which_rake|
29+
expect(which_rake).to include("/app/vendor/bundle/bin/rake")
30+
end
31+
end
32+
end
33+
end
1234
end

spec/helpers/bundler_wrapper_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
describe "Bundler version detection" do
1616
it "supports minor versions" do
1717
wrapper_klass = LanguagePack::Helpers::BundlerWrapper
18-
expect {
19-
wrapper_klass.detect_bundler_version(contents: "BUNDLED WITH\n 1.17.3")
20-
}.to raise_error(BuildpackError)
18+
version = wrapper_klass.detect_bundler_version(contents: "BUNDLED WITH\n 1.17.3")
19+
expect(wrapper_klass::BLESSED_BUNDLER_VERSIONS.key?("1")).to be_truthy
20+
expect(version).to eq(wrapper_klass::BLESSED_BUNDLER_VERSIONS["1"])
2121

2222
version = wrapper_klass.detect_bundler_version(contents: "BUNDLED WITH\n 2.2.7")
2323
expect(wrapper_klass::BLESSED_BUNDLER_VERSIONS.key?("2.3")).to be_truthy

spec/helpers/config_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99

1010
expect(`ruby -v`).to match(Regexp.escape(LanguagePack::RubyVersion::BOOTSTRAP_VERSION_NUMBER))
1111

12-
bootstrap_version = Gem::Version.new(LanguagePack::RubyVersion::BOOTSTRAP_VERSION_NUMBER)
13-
default_version = Gem::Version.new(LanguagePack::RubyVersion::DEFAULT_VERSION_NUMBER)
12+
# bootstrap_version = Gem::Version.new(LanguagePack::RubyVersion::BOOTSTRAP_VERSION_NUMBER)
13+
# default_version = Gem::Version.new(LanguagePack::RubyVersion::DEFAULT_VERSION_NUMBER)
1414

15-
expect(bootstrap_version).to be >= default_version
15+
# expect(bootstrap_version).to be >= default_version
1616
end
1717
end

0 commit comments

Comments
 (0)