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: f2ea490392f8ab11b2c8ed9697e051c2ddd16b6810138a696aaa2dd4b173d1a8
4
- data.tar.gz: 5f4a5d11257479883d003a342b31d602aa351ddfacd85827790d26e6037dab7b
3
+ metadata.gz: 166cde06202c6055b705c288ffd218dda571c094a5b2925e4ad244e083fc0645
4
+ data.tar.gz: 3d449a2dc01cef614d41365ad1a5f5b752ad6ea490732f45df07b29c92b4d056
5
5
  SHA512:
6
- metadata.gz: 024febe2bc6d12b9313c5c15102aa95da46e039ee22aaa40c54d16341091fe79e923bd531bf417424d30cee08ddb3b7dd11e82a0bbb45e442db1895293f48deb
7
- data.tar.gz: bbb5c095c0a6fff4e55c930fa6941bdcfeb1f6c104a4997cf3c8af9c97b941a653f370fed67656dd97fd98ea90d0730eceeee1c18e01006f27df6446e1716a92
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: true
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
- def freeze_top_level_dependencies_except(dependencies_to_update)
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
- pyproject_object = TomlRB.parse(@pyproject_content)
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
- if pyproject_object["project"]&.key?("requires-python")
46
- pyproject_object["project"]["requires-python"] = ">=#{python_version}"
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
- TomlRB.dump(pyproject_object)
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
- def parsed_lockfile
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.306.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 00:00:00.000000000 Z
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.306.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.306.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.306.0
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.5.22
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: []