1
- # typed: true
1
+ # typed: strict
2
2
# frozen_string_literal: true
3
3
4
4
require "dependabot/update_checkers"
@@ -12,10 +12,42 @@ class UpdateChecker < Dependabot::UpdateCheckers::Base
12
12
require_relative "update_checker/version_finder"
13
13
require_relative "update_checker/property_updater"
14
14
15
+ sig do
16
+ params (
17
+ dependency : Dependabot ::Dependency ,
18
+ dependency_files : T ::Array [ Dependabot ::DependencyFile ] ,
19
+ credentials : T ::Array [ Dependabot ::Credential ] ,
20
+ repo_contents_path : T . nilable ( String ) ,
21
+ ignored_versions : T ::Array [ String ] ,
22
+ raise_on_ignored : T ::Boolean ,
23
+ security_advisories : T ::Array [ Dependabot ::SecurityAdvisory ] ,
24
+ requirements_update_strategy : T . nilable ( Dependabot ::RequirementsUpdateStrategy ) ,
25
+ dependency_group : T . nilable ( Dependabot ::DependencyGroup ) ,
26
+ update_cooldown : T . nilable ( Dependabot ::Package ::ReleaseCooldownOptions ) ,
27
+ options : T ::Hash [ Symbol , T . untyped ]
28
+ )
29
+ . void
30
+ end
31
+ def initialize ( dependency :, dependency_files :, credentials :,
32
+ repo_contents_path : nil , ignored_versions : [ ] ,
33
+ raise_on_ignored : false , security_advisories : [ ] ,
34
+ requirements_update_strategy : nil , dependency_group : nil ,
35
+ update_cooldown : nil , options : { } )
36
+ super
37
+
38
+ @version_finder = T . let ( nil , T . nilable ( VersionFinder ) )
39
+ @property_updater = T . let ( nil , T . nilable ( PropertyUpdater ) )
40
+ @property_value_finder = T . let ( nil , T . nilable ( Maven ::FileParser ::PropertyValueFinder ) )
41
+ @declarations_using_a_property = T . let ( nil , T . nilable ( T ::Array [ T ::Hash [ Symbol , T . untyped ] ] ) )
42
+ @all_property_based_dependencies = T . let ( nil , T . nilable ( T ::Array [ Dependabot ::Dependency ] ) )
43
+ end
44
+
45
+ sig { override . returns ( T . nilable ( Dependabot ::Version ) ) }
15
46
def latest_version
16
47
latest_version_details &.fetch ( :version )
17
48
end
18
49
50
+ sig { override . returns ( T . nilable ( Dependabot ::Version ) ) }
19
51
def latest_resolvable_version
20
52
# Maven's version resolution algorithm is very simple: it just uses
21
53
# the version defined "closest", with the first declaration winning
@@ -27,14 +59,17 @@ def latest_resolvable_version
27
59
latest_version
28
60
end
29
61
62
+ sig { override . returns ( T . nilable ( Dependabot ::Version ) ) }
30
63
def lowest_security_fix_version
31
64
lowest_security_fix_version_details &.fetch ( :version )
32
65
end
33
66
67
+ sig { override . returns ( T . nilable ( Dependabot ::Version ) ) }
34
68
def lowest_resolvable_security_fix_version
35
69
lowest_security_fix_version
36
70
end
37
71
72
+ sig { override . returns ( T . nilable ( Dependabot ::Version ) ) }
38
73
def latest_resolvable_version_with_no_unlock
39
74
# Irrelevant, since Maven has a single dependency file (the pom.xml).
40
75
#
@@ -46,6 +81,7 @@ def latest_resolvable_version_with_no_unlock
46
81
nil
47
82
end
48
83
84
+ sig { override . returns ( T ::Array [ T ::Hash [ Symbol , T . untyped ] ] ) }
49
85
def updated_requirements
50
86
property_names =
51
87
declarations_using_a_property
@@ -59,11 +95,14 @@ def updated_requirements
59
95
) . updated_requirements
60
96
end
61
97
98
+ sig { override . returns ( T ::Boolean ) }
62
99
def requirements_unlocked_or_can_be?
63
100
declarations_using_a_property . none? do |requirement |
64
101
prop_name = requirement . dig ( :metadata , :property_name )
65
102
pom = dependency_files . find { |f | f . name == requirement [ :file ] }
66
103
104
+ return false unless prop_name && pom
105
+
67
106
declaration_pom_name =
68
107
property_value_finder
69
108
. property_details ( property_name : prop_name , callsite_pom : pom )
@@ -75,43 +114,50 @@ def requirements_unlocked_or_can_be?
75
114
76
115
private
77
116
117
+ sig { override . returns ( T ::Boolean ) }
78
118
def latest_version_resolvable_with_full_unlock?
79
119
return false unless version_comes_from_multi_dependency_property?
80
120
81
121
property_updater . update_possible?
82
122
end
83
123
124
+ sig { override . returns ( T ::Array [ Dependabot ::Dependency ] ) }
84
125
def updated_dependencies_after_full_unlock
85
126
property_updater . updated_dependencies
86
127
end
87
128
129
+ sig { override . returns ( T ::Boolean ) }
88
130
def numeric_version_up_to_date?
89
131
return false unless version_class . correct? ( dependency . version )
90
132
91
133
super
92
134
end
93
135
136
+ sig { override . params ( requirements_to_unlock : T . nilable ( Symbol ) ) . returns ( T ::Boolean ) }
94
137
def numeric_version_can_update? ( requirements_to_unlock :)
95
138
return false unless version_class . correct? ( dependency . version )
96
139
97
140
super
98
141
end
99
142
143
+ sig { returns ( T . nilable ( T ::Hash [ T . untyped , T . untyped ] ) ) }
100
144
def preferred_version_details
101
145
return lowest_security_fix_version_details if vulnerable?
102
146
103
147
latest_version_details
104
148
end
105
149
150
+ sig { returns ( T . nilable ( T ::Hash [ T . untyped , T . untyped ] ) ) }
106
151
def latest_version_details
107
- @latest_version_details ||= version_finder . latest_version_details
152
+ version_finder . latest_version_details
108
153
end
109
154
155
+ sig { returns ( T . nilable ( T ::Hash [ T . untyped , T . untyped ] ) ) }
110
156
def lowest_security_fix_version_details
111
- @lowest_security_fix_version_details ||=
112
- version_finder . lowest_security_fix_version_details
157
+ version_finder . lowest_security_fix_version_details
113
158
end
114
159
160
+ sig { returns ( VersionFinder ) }
115
161
def version_finder
116
162
@version_finder ||=
117
163
VersionFinder . new (
@@ -124,6 +170,7 @@ def version_finder
124
170
)
125
171
end
126
172
173
+ sig { returns ( PropertyUpdater ) }
127
174
def property_updater
128
175
@property_updater ||=
129
176
PropertyUpdater . new (
@@ -135,12 +182,14 @@ def property_updater
135
182
)
136
183
end
137
184
185
+ sig { returns ( Maven ::FileParser ::PropertyValueFinder ) }
138
186
def property_value_finder
139
187
@property_value_finder ||=
140
188
Maven ::FileParser ::PropertyValueFinder
141
189
. new ( dependency_files : dependency_files , credentials : credentials . map ( &:to_s ) )
142
190
end
143
191
192
+ sig { returns ( T ::Boolean ) }
144
193
def version_comes_from_multi_dependency_property?
145
194
declarations_using_a_property . any? do |requirement |
146
195
property_name = requirement . fetch ( :metadata ) . fetch ( :property_name )
@@ -159,12 +208,14 @@ def version_comes_from_multi_dependency_property?
159
208
end
160
209
end
161
210
211
+ sig { returns ( T ::Array [ T ::Hash [ Symbol , T . untyped ] ] ) }
162
212
def declarations_using_a_property
163
213
@declarations_using_a_property ||=
164
214
dependency . requirements
165
215
. select { |req | req . dig ( :metadata , :property_name ) }
166
216
end
167
217
218
+ sig { returns ( T ::Array [ Dependabot ::Dependency ] ) }
168
219
def all_property_based_dependencies
169
220
@all_property_based_dependencies ||=
170
221
Maven ::FileParser . new (
0 commit comments