dependabot-conda 0.385.0 → 0.386.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: 7fb5c6e80563270d7b99bb9c85ac4dac6fd01faabfdeab82ce8ea4487be3c343
4
- data.tar.gz: ef4aad9f20ee500a81382df84c103cbea2b16f9beead32ba6cd032da992e11d5
3
+ metadata.gz: 560c6d6dbe90e27642b391998040c8042c8ef4638034e8ca881e68aa9b69a8c2
4
+ data.tar.gz: 55c0056f8830372139e6b75284e38e7ce276f0228389cd67014fd8e666cada12
5
5
  SHA512:
6
- metadata.gz: 317e03137cd7cc3e193fdb8cd1124b7fe0a4f10c6676257e3f2cb8cdf73dfb10d01ca6dbd4dd356f57ed2c0f5cf9524a6f8841ac70060bc8335b5b5ee6f42a29
7
- data.tar.gz: 0c462bd7b6672c947902f031bed4001eaeea2d78fa199879cd72f4febfd28c7f40fb26ad5813377ad4fd3ec32038e2101ea6984fb8762cdd025c413105c1da20
6
+ metadata.gz: 4a9b536798cdb1fc4ccae93a47edfbb480927029cf19fd078d11c733641ae665a4849a1d4f83cbb21c7da80ca642b8ae913b96f5718ed2651279b382bc2a9a28
7
+ data.tar.gz: 3f4c7e4de79d8cdba506a547b13907c61668e2c6eaff7491eaf36c31a743f6711a85e705403d459c56a259c6a2916c47efb34d4b01f9f92712acd33640b32789
@@ -34,7 +34,7 @@ module Dependabot
34
34
 
35
35
  sig { void }
36
36
  def initialize
37
- @cache = T.let({}, T::Hash[String, T.untyped])
37
+ @cache = T.let({}, T::Hash[String, T::Hash[String, Object]])
38
38
  @not_found_cache = T.let(Set.new, T::Set[String])
39
39
  end
40
40
 
@@ -43,7 +43,7 @@ module Dependabot
43
43
  params(
44
44
  package_name: String,
45
45
  channel: String
46
- ).returns(T.nilable(T::Hash[String, T.untyped]))
46
+ ).returns(T.nilable(T::Hash[String, Object]))
47
47
  end
48
48
  def fetch_package_metadata(package_name, channel = DEFAULT_CHANNEL)
49
49
  cache_key = "#{channel}/#{package_name}"
@@ -147,7 +147,7 @@ module Dependabot
147
147
  package_name: String,
148
148
  channel: String,
149
149
  cache_key: String
150
- ).returns(T.nilable(T::Hash[String, T.untyped]))
150
+ ).returns(T.nilable(T::Hash[String, Object]))
151
151
  end
152
152
  def fetch_from_api(package_name, channel, cache_key)
153
153
  # Normalize channel name for API (e.g., 'defaults' -> 'anaconda')
@@ -187,7 +187,7 @@ module Dependabot
187
187
  response: Excon::Response,
188
188
  package_name: String,
189
189
  cache_key: String
190
- ).returns(T.nilable(T::Hash[String, T.untyped]))
190
+ ).returns(T.nilable(T::Hash[String, Object]))
191
191
  end
192
192
  def handle_response(response, package_name, cache_key)
193
193
  case response.status
@@ -44,7 +44,7 @@ module Dependabot
44
44
  raise(
45
45
  Dependabot::DependencyFileNotFound.new(
46
46
  File.join(directory, environment_file.name),
47
- unsupported_environment_message(validation[:reason])
47
+ unsupported_environment_message(T.cast(validation[:reason], T.nilable(Symbol)))
48
48
  )
49
49
  )
50
50
  end
@@ -63,7 +63,7 @@ module Dependabot
63
63
 
64
64
  # Validate that environment file is a proper conda manifest with manageable packages
65
65
  # Returns a hash with :valid (Boolean) and :reason (Symbol or nil)
66
- sig { params(file: DependencyFile).returns(T::Hash[Symbol, T.untyped]) }
66
+ sig { params(file: DependencyFile).returns(T::Hash[Symbol, T.anything]) }
67
67
  def validate_conda_environment(file)
68
68
  content = file.content
69
69
  return { valid: false, reason: :no_content } unless content
@@ -81,7 +81,7 @@ module Dependabot
81
81
  { valid: true, reason: nil }
82
82
  end
83
83
 
84
- sig { params(content: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
84
+ sig { params(content: String).returns(T.nilable(T::Hash[String, Object])) }
85
85
  def parse_and_validate_yaml(content)
86
86
  parsed_yaml = parse_yaml_content(content)
87
87
  return nil unless parsed_yaml
@@ -94,7 +94,7 @@ module Dependabot
94
94
  end
95
95
 
96
96
  # Check if there are any manageable packages (simple specs or pip)
97
- sig { params(dependencies: T.untyped).returns(T::Boolean) }
97
+ sig { params(dependencies: Object).returns(T::Boolean) }
98
98
  def manageable_packages?(dependencies)
99
99
  return false unless dependencies.is_a?(Array)
100
100
 
@@ -107,7 +107,7 @@ module Dependabot
107
107
  has_simple_conda || has_pip
108
108
  end
109
109
 
110
- sig { params(content: String).returns(T.nilable(T::Hash[T.untyped, T.untyped])) }
110
+ sig { params(content: String).returns(T.nilable(T::Hash[String, Object])) }
111
111
  def parse_yaml_content(content)
112
112
  parsed = YAML.safe_load(content)
113
113
  parsed.is_a?(Hash) ? parsed : nil
@@ -79,7 +79,7 @@ module Dependabot
79
79
 
80
80
  sig do
81
81
  params(
82
- dependencies: T::Array[T.untyped],
82
+ dependencies: T::Array[Object],
83
83
  file: Dependabot::DependencyFile
84
84
  ).returns(T::Array[Dependabot::Dependency])
85
85
  end
@@ -98,12 +98,14 @@ module Dependabot
98
98
 
99
99
  parsed_dep = parse_conda_dependency_string(dep, file)
100
100
  next unless parsed_dep
101
- next if parsed_dep[:name] == "pip"
101
+
102
+ name = T.cast(parsed_dep[:name], String)
103
+ next if name == "pip"
102
104
 
103
105
  parsed_dependencies << create_dependency(
104
- name: parsed_dep[:name],
105
- version: parsed_dep[:version],
106
- requirements: parsed_dep[:requirements],
106
+ name: name,
107
+ version: T.cast(parsed_dep[:version], T.nilable(String)),
108
+ requirements: T.cast(parsed_dep[:requirements], T::Array[T::Hash[Symbol, T.anything]]),
107
109
  package_manager: "conda"
108
110
  )
109
111
  end
@@ -111,7 +113,7 @@ module Dependabot
111
113
  parsed_dependencies
112
114
  end
113
115
 
114
- sig { params(dependencies: T.untyped).returns(T.nilable(T::Array[String])) }
116
+ sig { params(dependencies: Object).returns(T.nilable(T::Array[String])) }
115
117
  def find_pip_dependencies(dependencies)
116
118
  return nil unless dependencies.is_a?(Array)
117
119
 
@@ -135,9 +137,9 @@ module Dependabot
135
137
  next unless parsed_dep
136
138
 
137
139
  parsed_dependencies << create_dependency(
138
- name: parsed_dep[:name],
139
- version: parsed_dep[:version],
140
- requirements: parsed_dep[:requirements],
140
+ name: T.cast(parsed_dep[:name], String),
141
+ version: T.cast(parsed_dep[:version], T.nilable(String)),
142
+ requirements: T.cast(parsed_dep[:requirements], T::Array[T::Hash[Symbol, T.anything]]),
141
143
  package_manager: "pip"
142
144
  )
143
145
  end
@@ -146,7 +148,7 @@ module Dependabot
146
148
  end
147
149
 
148
150
  sig do
149
- params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.untyped]))
151
+ params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.anything]))
150
152
  end
151
153
  def parse_conda_dependency_string(dep_string, file)
152
154
  return nil if dep_string.nil?
@@ -219,7 +221,7 @@ module Dependabot
219
221
  constraint: T.nilable(String),
220
222
  file: Dependabot::DependencyFile,
221
223
  channel: T.nilable(String)
222
- ).returns(T::Array[T::Hash[Symbol, T.untyped]])
224
+ ).returns(T::Array[T::Hash[Symbol, T.anything]])
223
225
  end
224
226
  def build_conda_requirements(constraint, file, channel = nil)
225
227
  source = channel ? { channel: channel } : nil
@@ -233,7 +235,7 @@ module Dependabot
233
235
  end
234
236
 
235
237
  sig do
236
- params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.untyped]))
238
+ params(dep_string: String, file: Dependabot::DependencyFile).returns(T.nilable(T::Hash[Symbol, T.anything]))
237
239
  end
238
240
  def parse_pip_dependency_string(dep_string, file)
239
241
  match = dep_string.match(/^([a-zA-Z0-9_.-]+)(?:\s*(==|>=|>|<=|<|!=|~=)\s*([0-9][a-zA-Z0-9._+-]*))?$/)
@@ -279,7 +281,7 @@ module Dependabot
279
281
  params(
280
282
  name: String,
281
283
  version: T.nilable(String),
282
- requirements: T::Array[T::Hash[Symbol, T.untyped]],
284
+ requirements: T::Array[T::Hash[Symbol, T.anything]],
283
285
  package_manager: String
284
286
  ).returns(Dependabot::Dependency)
285
287
  end
@@ -20,14 +20,14 @@ module Dependabot
20
20
  lambda do |name|
21
21
  /^(\s{2,4}-\s+[a-zA-Z0-9_.-]+::)(#{Regexp.escape(name)})#{VERSION_CONSTRAINT_PATTERN}(\s*)(#.*)?$/
22
22
  end,
23
- T.proc.params(arg0: T.untyped).returns(Regexp)
23
+ T.proc.params(arg0: String).returns(Regexp)
24
24
  )
25
25
 
26
26
  CONDA_SIMPLE_PATTERN = T.let(
27
27
  lambda do |name|
28
28
  /^(\s{2,4}-\s+)(#{Regexp.escape(name)})#{VERSION_CONSTRAINT_PATTERN}(\s*)(#.*)?$/
29
29
  end,
30
- T.proc.params(arg0: T.untyped).returns(Regexp)
30
+ T.proc.params(arg0: String).returns(Regexp)
31
31
  )
32
32
 
33
33
  # Bracket syntax: package[version='>=1.0']
@@ -35,21 +35,21 @@ module Dependabot
35
35
  lambda do |name|
36
36
  /^(\s{2,4}-\s+)(#{Regexp.escape(name)})(\[version=['"])[^'"]+(['"]\])(\s*)(#.*)?$/
37
37
  end,
38
- T.proc.params(arg0: T.untyped).returns(Regexp)
38
+ T.proc.params(arg0: String).returns(Regexp)
39
39
  )
40
40
 
41
41
  CONDA_CHANNEL_BRACKET_PATTERN = T.let(
42
42
  lambda do |name|
43
43
  /^(\s{2,4}-\s+[a-zA-Z0-9_.-]+::)(#{Regexp.escape(name)})(\[version=['"])[^'"]+(['"]\])(\s*)(#.*)?$/
44
44
  end,
45
- T.proc.params(arg0: T.untyped).returns(Regexp)
45
+ T.proc.params(arg0: String).returns(Regexp)
46
46
  )
47
47
 
48
48
  PIP_PATTERN = T.let(
49
49
  lambda do |name|
50
50
  /^(\s{5,}-\s+)(#{Regexp.escape(name)})#{VERSION_CONSTRAINT_PATTERN}(\s*)(#.*)?$/
51
51
  end,
52
- T.proc.params(arg0: T.untyped).returns(Regexp)
52
+ T.proc.params(arg0: String).returns(Regexp)
53
53
  )
54
54
 
55
55
  sig { override.returns(T::Array[Dependabot::DependencyFile]) }
@@ -129,7 +129,7 @@ module Dependabot
129
129
  params(
130
130
  content: String,
131
131
  dependency: Dependabot::Dependency
132
- ).returns(T::Hash[Symbol, T.untyped])
132
+ ).returns(T::Hash[Symbol, T.anything])
133
133
  end
134
134
  def update_dependency_in_content(content, dependency)
135
135
  return { updated: false, content: content, not_found: false } unless dependency.version
@@ -150,7 +150,7 @@ module Dependabot
150
150
  params(
151
151
  content: String,
152
152
  dependency: Dependabot::Dependency
153
- ).returns(T::Hash[Symbol, T.untyped])
153
+ ).returns(T::Hash[Symbol, T.anything])
154
154
  end
155
155
  def update_conda_dependency_in_content(content, dependency)
156
156
  # Try standard patterns first (most common)
@@ -202,7 +202,7 @@ module Dependabot
202
202
  params(
203
203
  content: String,
204
204
  dependency: Dependabot::Dependency
205
- ).returns(T::Hash[Symbol, T.untyped])
205
+ ).returns(T::Hash[Symbol, T.anything])
206
206
  end
207
207
  def update_pip_dependency_in_content(content, dependency)
208
208
  pip_pattern = PIP_PATTERN.call(dependency.name)
@@ -22,7 +22,7 @@ module Dependabot
22
22
  "==" => ->(v, r) { v == r }, # pip equality
23
23
  "~=" => ->(v, r) { v >= r && v.release < r.bump } # pip compatible release
24
24
  ),
25
- T::Hash[String, T.proc.params(arg0: T.untyped, arg1: T.untyped).returns(T.untyped)]
25
+ T::Hash[String, T.proc.params(arg0: Gem::Version, arg1: Gem::Version).returns(T::Boolean)]
26
26
  )
27
27
 
28
28
  quoted = OPS.keys.sort_by(&:length).reverse
@@ -117,7 +117,7 @@ module Dependabot
117
117
  def extract_channel_from_source
118
118
  return nil unless dependency.requirements.first
119
119
 
120
- source = T.let(T.must(dependency.requirements.first)[:source], T.nilable(T::Hash[Symbol, T.untyped]))
120
+ source = T.let(T.must(dependency.requirements.first)[:source], T.nilable(T::Hash[Symbol, Object]))
121
121
  return nil unless source
122
122
 
123
123
  channel = source[:channel]
@@ -185,7 +185,7 @@ module Dependabot
185
185
  )
186
186
  end
187
187
 
188
- sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
188
+ sig { returns(T::Array[T::Hash[Symbol, T.anything]]) }
189
189
  def python_compatible_requirements
190
190
  dependency.requirements.map do |req|
191
191
  req.merge(
@@ -25,7 +25,7 @@ module Dependabot
25
25
  requirements_update_strategy: T.nilable(Dependabot::RequirementsUpdateStrategy),
26
26
  dependency_group: T.nilable(Dependabot::DependencyGroup),
27
27
  update_cooldown: T.nilable(Dependabot::Package::ReleaseCooldownOptions),
28
- options: T::Hash[Symbol, T.untyped]
28
+ options: T::Hash[Symbol, T.anything]
29
29
  )
30
30
  .void
31
31
  end
@@ -50,7 +50,11 @@ module Dependabot
50
50
  sig { returns(T.nilable(T::Array[T.any(Integer, String)])) }
51
51
  attr_reader :local_parts
52
52
 
53
- VersionParts = T.let(Struct.new(:epoch, :main, :local), T.untyped)
53
+ class VersionParts < T::Struct
54
+ const :epoch, String
55
+ const :main, String
56
+ const :local, T.nilable(String)
57
+ end
54
58
  private_constant :VersionParts
55
59
 
56
60
  sig { override.params(version: VersionParameter).void }
@@ -68,14 +72,14 @@ module Dependabot
68
72
  @epoch = T.let(parts.epoch.to_i, Integer)
69
73
  @version_parts = T.let(parse_components(parts.main), T::Array[T.any(Integer, String)])
70
74
  @local_parts = T.let(
71
- parts.local ? parse_components(parts.local) : nil,
75
+ parts.local ? parse_components(T.must(parts.local)) : nil,
72
76
  T.nilable(T::Array[T.any(Integer, String)])
73
77
  )
74
78
 
75
79
  super
76
80
  end
77
81
 
78
- sig { override.params(other: T.untyped).returns(T.nilable(Integer)) }
82
+ sig { params(other: VersionParameter).returns(T.nilable(Integer)) }
79
83
  def <=>(other)
80
84
  return nil unless other.is_a?(Dependabot::Conda::Version)
81
85
 
@@ -106,12 +110,12 @@ module Dependabot
106
110
 
107
111
  # Parses epoch and local version from version string
108
112
  # Returns VersionParts struct with epoch, main, and local fields
109
- sig { params(version_str: String).returns(T.untyped) }
113
+ sig { params(version_str: String).returns(VersionParts) }
110
114
  def parse_epoch_and_local(version_str)
111
115
  # Split on '!' for epoch
112
116
  parts = version_str.split("!", 2)
113
117
  if parts.length == 2
114
- epoch_str = parts[0]
118
+ epoch_str = T.must(parts[0])
115
119
  remainder = T.must(parts[1])
116
120
  else
117
121
  epoch_str = "0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dependabot-conda
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.385.0
4
+ version: 0.386.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dependabot
@@ -15,28 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - '='
17
17
  - !ruby/object:Gem::Version
18
- version: 0.385.0
18
+ version: 0.386.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - '='
24
24
  - !ruby/object:Gem::Version
25
- version: 0.385.0
25
+ version: 0.386.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: dependabot-python
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
30
  - - '='
31
31
  - !ruby/object:Gem::Version
32
- version: 0.385.0
32
+ version: 0.386.0
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - '='
38
38
  - !ruby/object:Gem::Version
39
- version: 0.385.0
39
+ version: 0.386.0
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: debug
42
42
  requirement: !ruby/object:Gem::Requirement
@@ -274,7 +274,7 @@ licenses:
274
274
  - MIT
275
275
  metadata:
276
276
  bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
277
- changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.385.0
277
+ changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.386.0
278
278
  rdoc_options: []
279
279
  require_paths:
280
280
  - lib