dependabot-uv 0.306.0 → 0.308.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 166cde06202c6055b705c288ffd218dda571c094a5b2925e4ad244e083fc0645
|
4
|
+
data.tar.gz: 3d449a2dc01cef614d41365ad1a5f5b752ad6ea490732f45df07b29c92b4d056
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6818301e3d34d0591f6b2610ef24f661a0e6d5d0e9eb2a928975bc1ede96b64e6fe5a8d76dd3d1f30d6eb256e36cf0a52a81fee128c35d57b74101ec4d782193
|
7
|
+
data.tar.gz: 7487cfcd5eb31f0c2ab6c72fcf3fdb8a6afea73c326a2834ac95e4e022474728dcb7bdb6c130b8e2aeceff913ffa2ef91f62732e4a907e55c94823a0059f8e0e
|
@@ -88,17 +88,11 @@ module Dependabot
|
|
88
88
|
|
89
89
|
sig { returns(Ecosystem::VersionManager) }
|
90
90
|
def package_manager
|
91
|
-
if Experiments.enabled?(:enable_file_parser_python_local)
|
92
|
-
Dependabot.logger.info("Detected package manager : #{detected_package_manager.name}")
|
93
|
-
end
|
94
|
-
|
95
91
|
@package_manager ||= T.let(detected_package_manager, T.nilable(Ecosystem::VersionManager))
|
96
92
|
end
|
97
93
|
|
98
94
|
sig { returns(Ecosystem::VersionManager) }
|
99
95
|
def detected_package_manager
|
100
|
-
setup_python_environment if Experiments.enabled?(:enable_file_parser_python_local)
|
101
|
-
|
102
96
|
PackageManager.new(T.must(detect_uv_version))
|
103
97
|
end
|
104
98
|
|
@@ -146,11 +140,6 @@ module Dependabot
|
|
146
140
|
|
147
141
|
sig { returns(String) }
|
148
142
|
def python_raw_version
|
149
|
-
if Experiments.enabled?(:enable_file_parser_python_local)
|
150
|
-
Dependabot.logger.info("Detected python version: #{language_version_manager.python_version}")
|
151
|
-
Dependabot.logger.info("Detected python major minor version: #{language_version_manager.python_major_minor}")
|
152
|
-
end
|
153
|
-
|
154
143
|
language_version_manager.python_version
|
155
144
|
end
|
156
145
|
|
@@ -155,17 +155,10 @@ module Dependabot
|
|
155
155
|
begin
|
156
156
|
content = updated_pyproject_content
|
157
157
|
content = sanitize(content)
|
158
|
-
content = freeze_other_dependencies(content)
|
159
158
|
content
|
160
159
|
end
|
161
160
|
end
|
162
161
|
|
163
|
-
def freeze_other_dependencies(pyproject_content)
|
164
|
-
PyprojectPreparer
|
165
|
-
.new(pyproject_content: pyproject_content, lockfile: lockfile)
|
166
|
-
.freeze_top_level_dependencies_except(dependencies)
|
167
|
-
end
|
168
|
-
|
169
162
|
def sanitize(pyproject_content)
|
170
163
|
PyprojectPreparer
|
171
164
|
.new(pyproject_content: pyproject_content)
|
@@ -1,7 +1,8 @@
|
|
1
|
-
# typed:
|
1
|
+
# typed: strong
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require "toml-rb"
|
5
|
+
require "citrus"
|
5
6
|
|
6
7
|
require "dependabot/dependency"
|
7
8
|
require "dependabot/uv/file_parser"
|
@@ -14,41 +15,36 @@ module Dependabot
|
|
14
15
|
module Uv
|
15
16
|
class FileUpdater
|
16
17
|
class PyprojectPreparer
|
18
|
+
extend T::Sig
|
19
|
+
|
20
|
+
Credentials = T.type_alias { T::Array[T::Hash[String, String]] }
|
21
|
+
|
22
|
+
sig { params(pyproject_content: String, lockfile: T.nilable(Dependabot::DependencyFile)).void }
|
17
23
|
def initialize(pyproject_content:, lockfile: nil)
|
18
24
|
@pyproject_content = pyproject_content
|
19
25
|
@lockfile = lockfile
|
26
|
+
@lines = T.let(pyproject_content.split("\n"), T::Array[String])
|
20
27
|
end
|
21
28
|
|
22
|
-
|
23
|
-
return @pyproject_content unless lockfile
|
24
|
-
|
25
|
-
pyproject_object = TomlRB.parse(@pyproject_content)
|
26
|
-
deps_to_update_names = dependencies_to_update.map(&:name)
|
27
|
-
|
28
|
-
if pyproject_object["project"]&.key?("dependencies")
|
29
|
-
locked_deps = parsed_lockfile_dependencies || {}
|
30
|
-
|
31
|
-
pyproject_object["project"]["dependencies"] =
|
32
|
-
pyproject_object["project"]["dependencies"].map do |dep_string|
|
33
|
-
freeze_dependency(dep_string, deps_to_update_names, locked_deps)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
TomlRB.dump(pyproject_object)
|
38
|
-
end
|
39
|
-
|
29
|
+
sig { params(python_version: T.nilable(String)).returns(String) }
|
40
30
|
def update_python_requirement(python_version)
|
41
31
|
return @pyproject_content unless python_version
|
42
32
|
|
43
|
-
|
33
|
+
in_project_table = T.let(false, T::Boolean)
|
34
|
+
updated_lines = @lines.map do |line|
|
35
|
+
in_project_table = true if line.match?(/^\[project\]/)
|
44
36
|
|
45
|
-
|
46
|
-
|
37
|
+
if in_project_table && line.match?(/^requires-python\s*=/)
|
38
|
+
"requires-python = \">=#{python_version}\""
|
39
|
+
else
|
40
|
+
line
|
41
|
+
end
|
47
42
|
end
|
48
43
|
|
49
|
-
|
44
|
+
@pyproject_content = updated_lines.join("\n")
|
50
45
|
end
|
51
46
|
|
47
|
+
sig { params(credentials: T.nilable(Credentials)).returns(T.nilable(Credentials)) }
|
52
48
|
def add_auth_env_vars(credentials)
|
53
49
|
return unless credentials
|
54
50
|
|
@@ -68,6 +64,7 @@ module Dependabot
|
|
68
64
|
end
|
69
65
|
end
|
70
66
|
|
67
|
+
sig { returns(String) }
|
71
68
|
def sanitize
|
72
69
|
# No special sanitization needed for UV files at this point
|
73
70
|
@pyproject_content
|
@@ -75,67 +72,13 @@ module Dependabot
|
|
75
72
|
|
76
73
|
private
|
77
74
|
|
75
|
+
sig { returns(T.nilable(Dependabot::DependencyFile)) }
|
78
76
|
attr_reader :lockfile
|
79
77
|
|
80
|
-
|
81
|
-
@parsed_lockfile ||= lockfile ? parse_lockfile(lockfile.content) : {}
|
82
|
-
end
|
83
|
-
|
84
|
-
def parse_lockfile(content)
|
85
|
-
TomlRB.parse(content)
|
86
|
-
rescue TomlRB::ParseError
|
87
|
-
{} # Return empty hash if parsing fails
|
88
|
-
end
|
89
|
-
|
90
|
-
def parsed_lockfile_dependencies
|
91
|
-
return {} unless lockfile
|
92
|
-
|
93
|
-
deps = {}
|
94
|
-
parsed = parsed_lockfile
|
95
|
-
|
96
|
-
# Handle UV lock format (version 1)
|
97
|
-
if parsed["version"] == 1 && parsed["package"].is_a?(Array)
|
98
|
-
parsed["package"].each do |pkg|
|
99
|
-
next unless pkg["name"] && pkg["version"]
|
100
|
-
|
101
|
-
deps[pkg["name"]] = { "version" => pkg["version"] }
|
102
|
-
end
|
103
|
-
# Handle traditional Poetry-style lock format
|
104
|
-
elsif parsed["dependencies"]
|
105
|
-
deps = parsed["dependencies"]
|
106
|
-
end
|
107
|
-
|
108
|
-
deps
|
109
|
-
end
|
110
|
-
|
111
|
-
def locked_version_for_dep(locked_deps, dep_name)
|
112
|
-
locked_deps.each do |name, details|
|
113
|
-
next unless Uv::FileParser.normalize_dependency_name(name) == dep_name
|
114
|
-
return details["version"] if details.is_a?(Hash) && details["version"]
|
115
|
-
end
|
116
|
-
nil
|
117
|
-
end
|
118
|
-
|
78
|
+
sig { params(url: String).returns(String) }
|
119
79
|
def sanitize_env_name(url)
|
120
80
|
url.gsub(%r{^https?://}, "").gsub(/[^a-zA-Z0-9]/, "_").upcase
|
121
81
|
end
|
122
|
-
|
123
|
-
def freeze_dependency(dep_string, deps_to_update_names, locked_deps)
|
124
|
-
dep_match = dep_string.match(/^([^\[\]=<>!]+)(?:\[([^\]]+)\])?/)
|
125
|
-
return dep_string unless dep_match
|
126
|
-
|
127
|
-
dep_name = dep_match[1].strip
|
128
|
-
dep_extra = dep_match[2]
|
129
|
-
|
130
|
-
normalized_name = Uv::FileParser.normalize_dependency_name(dep_name)
|
131
|
-
|
132
|
-
return dep_string if deps_to_update_names.include?(normalized_name)
|
133
|
-
|
134
|
-
version = locked_version_for_dep(locked_deps, normalized_name)
|
135
|
-
return dep_string unless version
|
136
|
-
|
137
|
-
dep_extra ? "#{dep_name}[#{dep_extra}]==#{version}" : "#{dep_name}==#{version}"
|
138
|
-
end
|
139
82
|
end
|
140
83
|
end
|
141
84
|
end
|
@@ -112,10 +112,6 @@ module Dependabot
|
|
112
112
|
end
|
113
113
|
|
114
114
|
def resolver
|
115
|
-
if Dependabot::Experiments.enabled?(:enable_file_parser_python_local)
|
116
|
-
Dependabot.logger.info("Python package resolver : #{resolver_type}")
|
117
|
-
end
|
118
|
-
|
119
115
|
case resolver_type
|
120
116
|
when :pip_compile then pip_compile_version_resolver
|
121
117
|
when :requirements then pip_version_resolver
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-uv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.308.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-04-
|
10
|
+
date: 2025-04-12 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: dependabot-common
|
@@ -16,14 +15,14 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - '='
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
18
|
+
version: 0.308.0
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - '='
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
25
|
+
version: 0.308.0
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: debug
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -285,8 +284,7 @@ licenses:
|
|
285
284
|
- MIT
|
286
285
|
metadata:
|
287
286
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
288
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
289
|
-
post_install_message:
|
287
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.308.0
|
290
288
|
rdoc_options: []
|
291
289
|
require_paths:
|
292
290
|
- lib
|
@@ -301,8 +299,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
301
299
|
- !ruby/object:Gem::Version
|
302
300
|
version: 3.1.0
|
303
301
|
requirements: []
|
304
|
-
rubygems_version: 3.
|
305
|
-
signing_key:
|
302
|
+
rubygems_version: 3.6.3
|
306
303
|
specification_version: 4
|
307
304
|
summary: Provides Dependabot support for Python uv
|
308
305
|
test_files: []
|