Skip to content

Commit 10b1c31

Browse files
authored
Merge pull request #11681 from chrisyuska/hotfix/ruby-3.4.2-support
Upgrade Ruby to 3.4.4
2 parents 3618600 + d8fbbd8 commit 10b1c31

File tree

19 files changed

+2049
-956
lines changed

19 files changed

+2049
-956
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
"ghcr.io/devcontainers/features/github-cli": "latest",
2424
"ghcr.io/devcontainers/features/node": "lts",
2525
"ghcr.io/devcontainers/features/go": "latest",
26-
"ghcr.io/devcontainers/features/ruby": "3.3.6",
26+
"ghcr.io/devcontainers/features/ruby": "3.4.4",
2727
"ghcr.io/devcontainers/features/rust": "latest",
2828
"ghcr.io/devcontainers/features/dotnet": "latest",
2929
"ghcr.io/devcontainers/features/sshd:1": {

.ruby-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.3.6
1+
3.4.4

Dockerfile.updater-core

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ COPY --chown=dependabot:dependabot LICENSE $DEPENDABOT_HOME
5656

5757
# Install Ruby from official Docker image
5858
# When bumping Ruby minor, need to also add the previous version to `bundler/helpers/v2/monkey_patches/definition_ruby_version_patch.rb`
59-
COPY --from=docker.io/library/ruby:3.3.6-bookworm --chown=dependabot:dependabot /usr/local /usr/local
59+
COPY --from=docker.io/library/ruby:3.4.4-bookworm --chown=dependabot:dependabot /usr/local /usr/local
6060

6161
# We had to explicitly bump this as the bundled version `0.2.2` in ubuntu 22.04 has a bug.
6262
# Once Ubuntu base image pulls in a new enough yaml version, we may not need to

Gemfile.lock

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ GEM
273273
parallel_tests (4.4.0)
274274
parallel
275275
parseconfig (1.0.8)
276-
parser (3.3.6.0)
276+
parser (3.3.7.1)
277277
ast (~> 2.4.1)
278278
racc
279279
prism (1.3.0)
@@ -296,8 +296,7 @@ GEM
296296
http-cookie (>= 1.0.2, < 2.0)
297297
mime-types (>= 1.16, < 4.0)
298298
netrc (~> 0.8)
299-
rexml (3.2.8)
300-
strscan (>= 3.0.9)
299+
rexml (3.4.1)
301300
rspec (3.12.0)
302301
rspec-core (~> 3.12.0)
303302
rspec-expectations (~> 3.12.0)
@@ -372,7 +371,6 @@ GEM
372371
thor (>= 0.19.2)
373372
stackprof (0.2.25)
374373
stringio (3.1.0)
375-
strscan (3.1.0)
376374
tapioca (0.16.11)
377375
benchmark
378376
bundler (>= 2.2.25)
@@ -537,7 +535,7 @@ CHECKSUMS
537535
parallel (1.24.0) sha256=5bf38efb9b37865f8e93d7a762727f8c5fc5deb19949f4040c76481d5eee9397
538536
parallel_tests (4.4.0) sha256=dc6da7bd9a7baf5c20f09435b2defb04de27dc783f5cb3b839a49982dd765055
539537
parseconfig (1.0.8) sha256=b86e117fcb635eb850b6dbae2454fc7a5a7b3767482951a07a9eb06f667a222f
540-
parser (3.3.6.0) sha256=25d4e67cc4f0f7cab9a2ae1f38e2005b6904d2ea13c34734511d0faad038bc3b
538+
parser (3.3.7.1) sha256=7dbe61618025519024ac72402a6677ead02099587a5538e84371b76659e6aca1
541539
prism (1.3.0) sha256=b11620829831b1cb7e6c9b46c81ff8a6e36ccb3f888f164485eb7351f386273a
542540
psych (5.1.2) sha256=337322f58fc2bf24827d2b9bd5ab595f6a72971867d151bb39980060ea40a368
543541
public_suffix (5.0.4) sha256=35cd648e0d21d06b8dce9331d19619538d1d898ba6d56a6f2258409d2526d1ae
@@ -549,7 +547,7 @@ CHECKSUMS
549547
regexp_parser (2.9.2) sha256=5a27e767ad634f8a4b544520d5cd28a0db7aa1198a5d7c9d7e11d7b3d9066446
550548
reline (0.6.1) sha256=1afcc9d7cb1029cdbe780d72f2f09251ce46d3780050f3ec39c3ccc6b60675fb
551549
rest-client (2.1.0) sha256=35a6400bdb14fae28596618e312776c158f7ebbb0ccad752ff4fa142bf2747e3
552-
rexml (3.2.8) sha256=0908a86381d9f973824680df4e0a75422766272f03b1c0e49db7e79c23db1135
550+
rexml (3.4.1) sha256=c74527a9a0a04b4ec31dbe0dc4ed6004b960af943d8db42e539edde3a871abca
553551
rspec (3.12.0) sha256=ccc41799a43509dc0be84070e3f0410ac95cbd480ae7b6c245543eb64162399c
554552
rspec-core (3.12.2) sha256=155b54480f28e2b2813185077fe435c2d663031616360ed3b179a9d6a55d2551
555553
rspec-expectations (3.12.3) sha256=093d18e2e7e0a2c619ef8f7343d442fc6c0793fb7897d56f16f26c8a9d244416
@@ -581,7 +579,6 @@ CHECKSUMS
581579
spoom (1.5.1) sha256=61dbab2059a094506210886455a513615c6915654048e3d2447223790e423095
582580
stackprof (0.2.25) sha256=28db0e2d22b817ae35def7163822505a04a026b02ef119b6aa89d70b967b0d2e
583581
stringio (3.1.0) sha256=c1f6263ae03a15025e51194ab19b06b15e06adcaaedb7f5f6c06ab60f5d67718
584-
strscan (3.1.0) sha256=01b8a81d214fbf7b5308c6fb51b5972bbfc4a6aa1f166fd3618ba97e0fcd5555
585582
tapioca (0.16.11) sha256=beeb388a5e2022ef8880cd24f57bc2acb59b65a4d5a6aa59bc1f10bc7b1eb1f7
586583
terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91
587584
thor (1.3.2) sha256=eef0293b9e24158ccad7ab383ae83534b7ad4ed99c09f96f1a6b036550abbeda

bundler/helpers/v2/monkey_patches/definition_ruby_version_patch.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def source_requirements
2626
Gem::Specification.new("Ruby\0", requested_version)
2727
end
2828

29-
%w(2.5.3 2.6.10 2.7.8 3.0.7 3.1.6 3.2.4).each do |version|
29+
%w(2.5.3 2.6.10 2.7.8 3.0.7 3.1.6 3.2.8 3.3.8).each do |version|
3030
sources.metadata_source.specs << Gem::Specification.new("Ruby\0", version)
3131
end
3232

bundler/lib/dependabot/bundler/file_updater/ruby_requirement_setter.rb

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
1-
# typed: true
1+
# typed: strict
22
# frozen_string_literal: true
33

44
require "parser/current"
5+
require "sorbet-runtime"
6+
57
require "dependabot/bundler/file_updater"
68
require "dependabot/bundler/requirement"
9+
require "dependabot/bundler/version"
710

811
module Dependabot
912
module Bundler
1013
class FileUpdater
1114
class RubyRequirementSetter
15+
extend T::Sig
16+
1217
RUBY_VERSIONS = %w(
13-
1.8.7 1.9.3 2.0.0 2.1.10 2.2.10 2.3.8 2.4.10 2.5.9 2.6.9 2.7.6 3.0.6 3.1.6 3.2.4 3.3.6
18+
1.8.7 1.9.3 2.0.0 2.1.10 2.2.10 2.3.8 2.4.10 2.5.9 2.6.9 2.7.6 3.0.6 3.1.6 3.2.8 3.3.8 3.4.4
1419
).freeze
1520

1621
LANGUAGE = "ruby"
1722

23+
sig { returns(Dependabot::DependencyFile) }
1824
attr_reader :gemspec
1925

26+
sig { params(gemspec: Dependabot::DependencyFile).void }
2027
def initialize(gemspec:)
2128
@gemspec = gemspec
2229
end
2330

31+
sig { params(content: String).returns(String) }
2432
def rewrite(content)
2533
return content unless gemspec_declares_ruby_requirement?
2634

@@ -39,17 +47,20 @@ def rewrite(content)
3947

4048
private
4149

50+
sig { returns(T::Boolean) }
4251
def gemspec_declares_ruby_requirement?
4352
!ruby_requirement.nil?
4453
end
4554

55+
sig { params(node: T.untyped).returns(T::Boolean) }
4656
def declares_ruby_version?(node)
4757
return false unless node.is_a?(Parser::AST::Node)
4858
return true if node.type == :send && node.children[1] == :ruby
4959

5060
node.children.any? { |cn| declares_ruby_version?(cn) }
5161
end
5262

63+
sig { returns(Dependabot::Version) }
5364
def ruby_version
5465
requirement = if ruby_requirement.is_a?(Gem::Requirement)
5566
ruby_requirement
@@ -74,6 +85,7 @@ def ruby_version
7485
end
7586

7687
# rubocop:disable Security/Eval
88+
sig { returns(T.untyped) }
7789
def ruby_requirement
7890
ast = Parser::CurrentRuby.parse(gemspec.content)
7991
requirement_node = find_ruby_requirement_node(ast)
@@ -87,6 +99,7 @@ def ruby_requirement
8799
end
88100
# rubocop:enable Security/Eval
89101

102+
sig { params(node: T.untyped).returns(T.nilable(Parser::AST::Node)) }
90103
def find_ruby_requirement_node(node)
91104
return unless node.is_a?(Parser::AST::Node)
92105
return node if declares_ruby_requirement?(node)
@@ -97,17 +110,22 @@ def find_ruby_requirement_node(node)
97110
end
98111
end
99112

113+
sig { params(node: T.untyped).returns(T::Boolean) }
100114
def declares_ruby_requirement?(node)
101115
return false unless node.is_a?(Parser::AST::Node)
102116

103117
node.children[1] == :required_ruby_version=
104118
end
105119

106120
class GemfileRewriter < Parser::TreeRewriter
121+
extend T::Sig
122+
123+
sig { override.params(ruby_version: Dependabot::Version).void }
107124
def initialize(ruby_version:)
108125
@ruby_version = ruby_version
109126
end
110127

128+
sig { override.params(node: T.untyped).void }
111129
def on_send(node)
112130
return unless declares_ruby_version?(node)
113131

@@ -117,8 +135,10 @@ def on_send(node)
117135

118136
private
119137

138+
sig { returns(Dependabot::Version) }
120139
attr_reader :ruby_version
121140

141+
sig { params(node: T.untyped).returns(T::Boolean) }
122142
def declares_ruby_version?(node)
123143
return false unless node.is_a?(Parser::AST::Node)
124144
return false unless node.type == :send

bundler/spec/dependabot/bundler/file_updater/ruby_requirement_setter_spec.rb

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@
131131
bundler_project_dependency_file("gemfile", filename: "Gemfile").content
132132
end
133133

134-
it { is_expected.to include("ruby '3.2.4'\n") }
134+
it { is_expected.to include("ruby '3.2.8'\n") }
135135
it { is_expected.to include(%(gem "business", "~> 1.4.0")) }
136136
end
137137

@@ -143,7 +143,19 @@
143143
bundler_project_dependency_file("gemfile", filename: "Gemfile").content
144144
end
145145

146-
it { is_expected.to include("ruby '3.3.6'\n") }
146+
it { is_expected.to include("ruby '3.3.8'\n") }
147+
it { is_expected.to include(%(gem "business", "~> 1.4.0")) }
148+
end
149+
150+
context "when requiring ruby 3.4" do
151+
let(:gemspec) do
152+
bundler_project_dependency_file("gemfile_require_ruby_3_4", filename: "example.gemspec")
153+
end
154+
let(:content) do
155+
bundler_project_dependency_file("gemfile", filename: "Gemfile").content
156+
end
157+
158+
it { is_expected.to include("ruby '3.4.4'\n") }
147159
it { is_expected.to include(%(gem "business", "~> 1.4.0")) }
148160
end
149161

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# frozen_string_literal: true
2+
3+
source "https://rubygems.org"
4+
5+
gem "business", "~> 1.4.0"
6+
gem "statesman", "~> 1.2.0"
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
GEM
2+
remote: https://rubygems.org/
3+
specs:
4+
business (1.4.0)
5+
statesman (1.2.1)
6+
7+
PLATFORMS
8+
ruby
9+
10+
DEPENDENCIES
11+
business (~> 1.4.0)
12+
statesman (~> 1.2.0)
13+
14+
BUNDLED WITH
15+
2.6.9
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# frozen_string_literal: true
2+
3+
Gem::Specification.new do |spec|
4+
spec.name = "example"
5+
spec.version = "0.9.3"
6+
spec.summary = "Automated dependency management"
7+
spec.description = "Core logic for updating a GitHub repos dependencies"
8+
9+
spec.author = "Dependabot"
10+
spec.email = "[email protected]"
11+
spec.homepage = "https://github.com/hmarr/example"
12+
spec.license = "MIT"
13+
14+
spec.require_path = "lib"
15+
spec.files = Dir["CHANGELOG.md", "LICENSE.txt", "README.md",
16+
"lib/**/*", "helpers/**/*"]
17+
18+
spec.required_ruby_version = ">= 3.4.4"
19+
spec.required_rubygems_version = ">= 3.6.9"
20+
21+
spec.add_dependency 'business', '~> 1.0'
22+
end

0 commit comments

Comments
 (0)