dependabot-python 0.104.1 → 0.104.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dependabot/python/update_checker.rb +50 -19
- data/lib/dependabot/python/update_checker/latest_version_finder.rb +30 -6
- data/lib/dependabot/python/update_checker/{pipfile_version_resolver.rb → pipenv_version_resolver.rb} +1 -1
- data/lib/dependabot/python/update_checker/requirements_updater.rb +2 -6
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07562c281f0015c26bac56e792bd46fa643b9e418aa74504847d9f7ab28afcdd
|
4
|
+
data.tar.gz: ed693ef282c7b4a4e2497ef4088edee0f6894c70eb62af61b7fa6b398f0066e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9475d9e98b20f257d941a66a07943e76c3a3eb525561740886daee7a6a1935dfd80336335b28441887fcb6a52f1c19a053965ae8247e98a0aacd888054222af2
|
7
|
+
data.tar.gz: 91193f7f7b1015f34080bccd28d32423e7935893ffb70e0f37bff47b6ceedad1f21ba30ef2327ef7f1f0c34bd2764841455374fa306365fd8d2df4f96aecae78
|
@@ -13,7 +13,7 @@ module Dependabot
|
|
13
13
|
module Python
|
14
14
|
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
15
15
|
require_relative "update_checker/poetry_version_resolver"
|
16
|
-
require_relative "update_checker/
|
16
|
+
require_relative "update_checker/pipenv_version_resolver"
|
17
17
|
require_relative "update_checker/pip_compile_version_resolver"
|
18
18
|
require_relative "update_checker/requirements_updater"
|
19
19
|
require_relative "update_checker/latest_version_finder"
|
@@ -31,17 +31,11 @@ module Dependabot
|
|
31
31
|
@latest_resolvable_version ||=
|
32
32
|
case resolver_type
|
33
33
|
when :pipfile
|
34
|
-
|
35
|
-
resolver_args.merge(unlock_requirement: true)
|
36
|
-
).latest_resolvable_version
|
34
|
+
pipenv_version_resolver.latest_resolvable_version
|
37
35
|
when :poetry
|
38
|
-
|
39
|
-
resolver_args.merge(unlock_requirement: true)
|
40
|
-
).latest_resolvable_version
|
36
|
+
poetry_version_resolver.latest_resolvable_version
|
41
37
|
when :pip_compile
|
42
|
-
|
43
|
-
resolver_args.merge(unlock_requirement: true)
|
44
|
-
).latest_resolvable_version
|
38
|
+
pip_compile_version_resolver.latest_resolvable_version
|
45
39
|
when :requirements
|
46
40
|
# pip doesn't (yet) do any dependency resolution, so if we don't
|
47
41
|
# have a Pipfile or a pip-compile file, we just return the latest
|
@@ -55,16 +49,16 @@ module Dependabot
|
|
55
49
|
@latest_resolvable_version_with_no_unlock ||=
|
56
50
|
case resolver_type
|
57
51
|
when :pipfile
|
58
|
-
|
59
|
-
|
52
|
+
pipenv_version_resolver(
|
53
|
+
unlock_requirement: false
|
60
54
|
).latest_resolvable_version
|
61
55
|
when :poetry
|
62
|
-
|
63
|
-
|
56
|
+
poetry_version_resolver(
|
57
|
+
unlock_requirement: false
|
64
58
|
).latest_resolvable_version
|
65
59
|
when :pip_compile
|
66
|
-
|
67
|
-
|
60
|
+
pip_compile_version_resolver(
|
61
|
+
unlock_requirement: false
|
68
62
|
).latest_resolvable_version
|
69
63
|
when :requirements
|
70
64
|
latest_pip_version_with_no_unlock
|
@@ -72,11 +66,26 @@ module Dependabot
|
|
72
66
|
end
|
73
67
|
end
|
74
68
|
|
69
|
+
def lowest_resolvable_security_fix_version
|
70
|
+
raise "Dependency not vulnerable!" unless vulnerable?
|
71
|
+
|
72
|
+
@lowest_resolvable_security_fix_version ||=
|
73
|
+
case resolver_type
|
74
|
+
when :requirements
|
75
|
+
latest_version_finder.lowest_security_fix_version
|
76
|
+
when :pipfile, :poetry, :pip_compile
|
77
|
+
# TODO: Handle package managers with a resolvability concept
|
78
|
+
latest_resolvable_version
|
79
|
+
else raise "Unexpected resolver type #{resolver_type}"
|
80
|
+
end
|
81
|
+
|
82
|
+
latest_version_finder.lowest_security_fix_version
|
83
|
+
end
|
84
|
+
|
75
85
|
def updated_requirements
|
76
86
|
RequirementsUpdater.new(
|
77
87
|
requirements: dependency.requirements,
|
78
|
-
|
79
|
-
latest_resolvable_version: latest_resolvable_version&.to_s,
|
88
|
+
latest_resolvable_version: preferred_resolvable_version&.to_s,
|
80
89
|
update_strategy: requirements_update_strategy,
|
81
90
|
has_lockfile: !(pipfile_lock || poetry_lock || pyproject_lock).nil?
|
82
91
|
).updated_requirements
|
@@ -145,6 +154,27 @@ module Dependabot
|
|
145
154
|
reqs.any? { |r| Python::Requirement.new(r).exact? }
|
146
155
|
end
|
147
156
|
|
157
|
+
def pipenv_version_resolver(unlock_requirement: true)
|
158
|
+
@pipenv_version_resolver ||= {}
|
159
|
+
@pipenv_version_resolver[unlock_requirement] ||=
|
160
|
+
PipenvVersionResolver.
|
161
|
+
new(resolver_args.merge(unlock_requirement: unlock_requirement))
|
162
|
+
end
|
163
|
+
|
164
|
+
def pip_compile_version_resolver(unlock_requirement: true)
|
165
|
+
@pip_compile_version_resolver ||= {}
|
166
|
+
@pip_compile_version_resolver[unlock_requirement] ||=
|
167
|
+
PipCompileVersionResolver.
|
168
|
+
new(resolver_args.merge(unlock_requirement: unlock_requirement))
|
169
|
+
end
|
170
|
+
|
171
|
+
def poetry_version_resolver(unlock_requirement: true)
|
172
|
+
@poetry_version_resolver ||= {}
|
173
|
+
@poetry_version_resolver[unlock_requirement] ||=
|
174
|
+
PoetryVersionResolver.
|
175
|
+
new(resolver_args.merge(unlock_requirement: unlock_requirement))
|
176
|
+
end
|
177
|
+
|
148
178
|
def resolver_args
|
149
179
|
{
|
150
180
|
dependency: dependency,
|
@@ -167,7 +197,8 @@ module Dependabot
|
|
167
197
|
dependency: dependency,
|
168
198
|
dependency_files: dependency_files,
|
169
199
|
credentials: credentials,
|
170
|
-
ignored_versions: ignored_versions
|
200
|
+
ignored_versions: ignored_versions,
|
201
|
+
security_advisories: security_advisories
|
171
202
|
)
|
172
203
|
end
|
173
204
|
|
@@ -13,11 +13,12 @@ module Dependabot
|
|
13
13
|
require_relative "index_finder"
|
14
14
|
|
15
15
|
def initialize(dependency:, dependency_files:, credentials:,
|
16
|
-
ignored_versions:)
|
17
|
-
@dependency
|
18
|
-
@dependency_files
|
19
|
-
@credentials
|
20
|
-
@ignored_versions
|
16
|
+
ignored_versions:, security_advisories:)
|
17
|
+
@dependency = dependency
|
18
|
+
@dependency_files = dependency_files
|
19
|
+
@credentials = credentials
|
20
|
+
@ignored_versions = ignored_versions
|
21
|
+
@security_advisories = security_advisories
|
21
22
|
end
|
22
23
|
|
23
24
|
def latest_version
|
@@ -29,10 +30,14 @@ module Dependabot
|
|
29
30
|
fetch_latest_version_with_no_unlock
|
30
31
|
end
|
31
32
|
|
33
|
+
def lowest_security_fix_version
|
34
|
+
@lowest_security_fix_version ||= fetch_lowest_security_fix_version
|
35
|
+
end
|
36
|
+
|
32
37
|
private
|
33
38
|
|
34
39
|
attr_reader :dependency, :dependency_files, :credentials,
|
35
|
-
:ignored_versions
|
40
|
+
:ignored_versions, :security_advisories
|
36
41
|
|
37
42
|
def fetch_latest_version
|
38
43
|
versions = available_versions
|
@@ -49,6 +54,15 @@ module Dependabot
|
|
49
54
|
versions.max
|
50
55
|
end
|
51
56
|
|
57
|
+
def fetch_lowest_security_fix_version
|
58
|
+
versions = available_versions
|
59
|
+
versions = filter_prerelease_versions(versions)
|
60
|
+
versions = filter_ignored_versions(versions)
|
61
|
+
versions = filter_vulnerable_versions(versions)
|
62
|
+
versions = filter_lower_versions(versions)
|
63
|
+
versions.min
|
64
|
+
end
|
65
|
+
|
52
66
|
def filter_prerelease_versions(versions_array)
|
53
67
|
return versions_array if wants_prerelease?
|
54
68
|
|
@@ -60,6 +74,16 @@ module Dependabot
|
|
60
74
|
reject { |v| ignore_reqs.any? { |r| r.satisfied_by?(v) } }
|
61
75
|
end
|
62
76
|
|
77
|
+
def filter_vulnerable_versions(versions_array)
|
78
|
+
versions_array.
|
79
|
+
reject { |v| security_advisories.any? { |a| a.vulnerable?(v) } }
|
80
|
+
end
|
81
|
+
|
82
|
+
def filter_lower_versions(versions_array)
|
83
|
+
versions_array.
|
84
|
+
select { |version| version > version_class.new(dependency.version) }
|
85
|
+
end
|
86
|
+
|
63
87
|
def filter_out_of_range_versions(versions_array)
|
64
88
|
reqs = dependency.requirements.map do |r|
|
65
89
|
requirement_class.requirements_array(r.fetch(:requirement))
|
data/lib/dependabot/python/update_checker/{pipfile_version_resolver.rb → pipenv_version_resolver.rb}
RENAMED
@@ -27,7 +27,7 @@ module Dependabot
|
|
27
27
|
# Unfortunately, Pipenv doesn't resolve how we'd expect - it appears to
|
28
28
|
# just raise if the latest version can't be resolved. Knowing that is
|
29
29
|
# still better than nothing, though.
|
30
|
-
class
|
30
|
+
class PipenvVersionResolver
|
31
31
|
VERSION_REGEX = /[0-9]+(?:\.[A-Za-z0-9\-_]+)*/.freeze
|
32
32
|
GIT_DEPENDENCY_UNREACHABLE_REGEX =
|
33
33
|
/Command "git clone -q (?<url>[^\s]+).*" failed/.freeze
|
@@ -16,18 +16,14 @@ module Dependabot
|
|
16
16
|
class UnfixableRequirement < StandardError; end
|
17
17
|
|
18
18
|
attr_reader :requirements, :update_strategy, :has_lockfile,
|
19
|
-
:
|
19
|
+
:latest_resolvable_version
|
20
20
|
|
21
21
|
def initialize(requirements:, update_strategy:, has_lockfile:,
|
22
|
-
|
22
|
+
latest_resolvable_version:)
|
23
23
|
@requirements = requirements
|
24
24
|
@update_strategy = update_strategy
|
25
25
|
@has_lockfile = has_lockfile
|
26
26
|
|
27
|
-
if latest_version
|
28
|
-
@latest_version = Python::Version.new(latest_version)
|
29
|
-
end
|
30
|
-
|
31
27
|
return unless latest_resolvable_version
|
32
28
|
|
33
29
|
@latest_resolvable_version =
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-python
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.104.
|
4
|
+
version: 0.104.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.104.
|
19
|
+
version: 0.104.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.104.
|
26
|
+
version: 0.104.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: byebug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -175,7 +175,7 @@ files:
|
|
175
175
|
- lib/dependabot/python/update_checker/index_finder.rb
|
176
176
|
- lib/dependabot/python/update_checker/latest_version_finder.rb
|
177
177
|
- lib/dependabot/python/update_checker/pip_compile_version_resolver.rb
|
178
|
-
- lib/dependabot/python/update_checker/
|
178
|
+
- lib/dependabot/python/update_checker/pipenv_version_resolver.rb
|
179
179
|
- lib/dependabot/python/update_checker/poetry_version_resolver.rb
|
180
180
|
- lib/dependabot/python/update_checker/requirements_updater.rb
|
181
181
|
- lib/dependabot/python/version.rb
|