dependabot-dotnet_sdk 0.317.0 → 0.318.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: '039adc7e5a9dc839f07b1665a9f626a367d5acca93c6403d009862a76ab5aaff'
|
4
|
+
data.tar.gz: 1bf3eb9d9a53c91ff663fe256566758e3a7a4eceed8f3acc0275ca931d64b582
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f189b5e18550bc281c0d024d2881e120436dc73be455d08a75e124ee60f9d76d6b8041852848ed9f429bb2d6df1f2d851df6e3d2469149d6f34f4732d4b21df4
|
7
|
+
data.tar.gz: 7b645cbf524315097ece68eb189695234a60d930b14904d15c2123fe95d58f6a34796539fa3463a2e91a62824ffde1b3fb73f6d36dbb57778fb70b40d6fddbf5
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
|
6
|
+
require "dependabot/package/package_details"
|
7
|
+
|
8
|
+
require "dependabot/dotnet_sdk/version"
|
9
|
+
|
10
|
+
module Dependabot
|
11
|
+
module DotnetSdk
|
12
|
+
module Package
|
13
|
+
class PackageDetailsFetcher
|
14
|
+
extend T::Sig
|
15
|
+
|
16
|
+
RELEASES_INDEX_URL = "https://dotnetcli.blob.core.windows.net/dotnet/release-metadata/releases-index.json"
|
17
|
+
|
18
|
+
sig do
|
19
|
+
params(
|
20
|
+
dependency: Dependabot::Dependency
|
21
|
+
).void
|
22
|
+
end
|
23
|
+
def initialize(dependency:)
|
24
|
+
@dependency = dependency
|
25
|
+
@package_details = T.let(nil, T.nilable(Dependabot::Package::PackageDetails))
|
26
|
+
end
|
27
|
+
|
28
|
+
sig { returns(Dependabot::Dependency) }
|
29
|
+
attr_reader :dependency
|
30
|
+
|
31
|
+
sig do
|
32
|
+
returns(T.nilable(Dependabot::Package::PackageDetails))
|
33
|
+
end
|
34
|
+
def fetch
|
35
|
+
package_releases = releases.filter_map do |release|
|
36
|
+
version = release["version"]
|
37
|
+
release_date = release["release-date"]
|
38
|
+
next unless version && release_date
|
39
|
+
|
40
|
+
package_release(
|
41
|
+
version: version,
|
42
|
+
released_at: Time.parse(release_date)
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
package_details(package_releases)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
sig { returns(T::Array[T::Hash[String, String]]) }
|
52
|
+
def releases
|
53
|
+
response = releases_response
|
54
|
+
return [] unless response.status == 200
|
55
|
+
|
56
|
+
parsed = JSON.parse(response.body)
|
57
|
+
parsed["releases-index"].flat_map do |release|
|
58
|
+
release_channel(release["releases.json"])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
sig { returns(Excon::Response) }
|
63
|
+
def releases_response
|
64
|
+
Dependabot::RegistryClient.get(
|
65
|
+
url: RELEASES_INDEX_URL,
|
66
|
+
headers: { "Accept" => "application/json" }
|
67
|
+
)
|
68
|
+
end
|
69
|
+
|
70
|
+
sig { params(url: String).returns(T::Array[T::Hash[String, String]]) }
|
71
|
+
def release_channel(url)
|
72
|
+
response = release_channel_response(url)
|
73
|
+
return [] unless response
|
74
|
+
|
75
|
+
JSON.parse(response.body)
|
76
|
+
.fetch("releases", [])
|
77
|
+
.flat_map { |release| extract_release_versions(release) }
|
78
|
+
rescue JSON::ParserError
|
79
|
+
raise Dependabot::DependencyFileNotResolvable, "Invalid JSON response from #{url}"
|
80
|
+
end
|
81
|
+
|
82
|
+
sig { params(release: T::Hash[String, T.untyped]).returns(T::Array[T::Hash[String, String]]) }
|
83
|
+
def extract_release_versions(release)
|
84
|
+
release_date = release["release-date"]
|
85
|
+
return [] unless release_date
|
86
|
+
|
87
|
+
if release["sdks"].nil?
|
88
|
+
sdk_version = release.dig("sdk", "version")
|
89
|
+
return [] unless sdk_version
|
90
|
+
|
91
|
+
[{ "version" => sdk_version, "release-date" => release_date }]
|
92
|
+
else
|
93
|
+
release["sdks"]&.filter_map do |sdk|
|
94
|
+
next unless sdk["version"]
|
95
|
+
|
96
|
+
{ "version" => sdk["version"], "release-date" => release_date }
|
97
|
+
end || []
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
sig { params(url: String).returns(T.nilable(Excon::Response)) }
|
102
|
+
def release_channel_response(url)
|
103
|
+
Dependabot::RegistryClient.get(
|
104
|
+
url: url,
|
105
|
+
headers: { "Accept" => "application/json" }
|
106
|
+
)
|
107
|
+
end
|
108
|
+
|
109
|
+
sig do
|
110
|
+
params(
|
111
|
+
version: String,
|
112
|
+
released_at: T.nilable(Time)
|
113
|
+
).returns(Dependabot::Package::PackageRelease)
|
114
|
+
end
|
115
|
+
def package_release(version:, released_at:)
|
116
|
+
Dependabot::Package::PackageRelease.new(
|
117
|
+
version: DotnetSdk::Version.new(version),
|
118
|
+
released_at: released_at
|
119
|
+
)
|
120
|
+
end
|
121
|
+
|
122
|
+
sig do
|
123
|
+
params(releases: T::Array[Dependabot::Package::PackageRelease])
|
124
|
+
.returns(Dependabot::Package::PackageDetails)
|
125
|
+
end
|
126
|
+
def package_details(releases)
|
127
|
+
@package_details ||= Dependabot::Package::PackageDetails.new(
|
128
|
+
dependency: dependency,
|
129
|
+
releases: releases.reverse.uniq(&:version)
|
130
|
+
)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -1,138 +1,62 @@
|
|
1
1
|
# typed: strict
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
require "excon"
|
5
4
|
require "sorbet-runtime"
|
6
5
|
|
7
|
-
require "dependabot/
|
8
|
-
require "dependabot/
|
6
|
+
require "dependabot/package/package_details"
|
7
|
+
require "dependabot/package/package_latest_version_finder"
|
9
8
|
require "dependabot/registry_client"
|
10
9
|
require "dependabot/update_checkers/base"
|
11
10
|
|
11
|
+
require "dependabot/dotnet_sdk/package/package_details_fetcher"
|
12
|
+
require "dependabot/dotnet_sdk/requirement"
|
13
|
+
require "dependabot/dotnet_sdk/version"
|
14
|
+
|
12
15
|
module Dependabot
|
13
16
|
module DotnetSdk
|
14
17
|
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
15
|
-
class LatestVersionFinder
|
18
|
+
class LatestVersionFinder < Dependabot::Package::PackageLatestVersionFinder
|
16
19
|
extend T::Sig
|
17
20
|
|
18
|
-
|
19
|
-
|
20
|
-
sig { params(dependency: Dependabot::Dependency, ignored_versions: T::Array[String]).void }
|
21
|
-
def initialize(dependency:, ignored_versions:)
|
22
|
-
@dependency = dependency
|
23
|
-
@ignored_versions = ignored_versions
|
21
|
+
sig do
|
22
|
+
override.returns(T.nilable(Dependabot::Package::PackageDetails))
|
24
23
|
end
|
25
|
-
|
26
|
-
|
27
|
-
def latest_version
|
28
|
-
@latest_version ||= T.let(
|
29
|
-
fetch_latest_version,
|
30
|
-
T.nilable(Dependabot::Version)
|
31
|
-
)
|
24
|
+
def package_details
|
25
|
+
@package_details ||= Package::PackageDetailsFetcher.new(dependency: dependency).fetch
|
32
26
|
end
|
33
27
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
sig { returns(T::Array[String]) }
|
40
|
-
attr_reader :ignored_versions
|
41
|
-
|
42
|
-
sig { returns(T.nilable(Dependabot::Version)) }
|
43
|
-
def fetch_latest_version
|
44
|
-
versions = available_versions
|
45
|
-
versions = filter_prerelease_versions(versions)
|
46
|
-
versions = filter_ignored_versions(versions)
|
47
|
-
versions.max
|
28
|
+
sig do
|
29
|
+
override
|
30
|
+
.params(language_version: T.nilable(T.any(String, Dependabot::Version)))
|
31
|
+
.returns(T.nilable(Dependabot::Version))
|
48
32
|
end
|
49
|
-
|
50
|
-
|
51
|
-
def available_versions
|
52
|
-
releases.map { |v| version_class.new(v) }
|
33
|
+
def latest_version(language_version: nil) # rubocop:disable Lint/UnusedMethodArgument
|
34
|
+
@latest_version ||= fetch_latest_version
|
53
35
|
end
|
54
36
|
|
55
|
-
sig
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
# This isn't entirely accurate. .NET considers release candidates to NOT be pre-releases.
|
60
|
-
# However, we want to be conservative.
|
61
|
-
# See https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core
|
62
|
-
versions.reject(&:prerelease?)
|
37
|
+
sig do
|
38
|
+
override
|
39
|
+
.params(language_version: T.nilable(T.any(String, Dependabot::Version)))
|
40
|
+
.returns(T.nilable(Dependabot::Version))
|
63
41
|
end
|
64
|
-
|
65
|
-
|
66
|
-
def filter_ignored_versions(versions)
|
67
|
-
versions.reject do |version|
|
68
|
-
ignore_requirements.any? { |r| r.satisfied_by?(version) }
|
69
|
-
end
|
42
|
+
def lowest_security_fix_version(language_version: nil) # rubocop:disable Lint/UnusedMethodArgument
|
43
|
+
@lowest_security_fix_version ||= fetch_lowest_security_fix_version
|
70
44
|
end
|
71
45
|
|
72
|
-
|
73
|
-
def releases
|
74
|
-
response = releases_response
|
75
|
-
return [] unless response.status == 200
|
46
|
+
protected
|
76
47
|
|
77
|
-
|
78
|
-
parsed["releases-index"].flat_map do |release|
|
79
|
-
release_channel(release["releases.json"])
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
sig { returns(Excon::Response) }
|
84
|
-
def releases_response
|
85
|
-
Dependabot::RegistryClient.get(
|
86
|
-
url: RELEASES_INDEX_URL,
|
87
|
-
headers: { "Accept" => "application/json" }
|
88
|
-
)
|
89
|
-
end
|
90
|
-
|
91
|
-
sig { params(url: String).returns(T::Array[String]) }
|
92
|
-
def release_channel(url)
|
93
|
-
response = release_channel_response(url)
|
94
|
-
begin
|
95
|
-
parsed = JSON.parse(T.must(response).body)
|
96
|
-
rescue JSON::ParserError
|
97
|
-
raise Dependabot::DependencyFileNotResolvable, "Invalid JSON response from #{url}"
|
98
|
-
end
|
99
|
-
|
100
|
-
parsed["releases"].map do |release|
|
101
|
-
if release["sdks"].nil?
|
102
|
-
release["sdk"]["version"]
|
103
|
-
else
|
104
|
-
release["sdks"].flat_map { |sdk| sdk["version"] }
|
105
|
-
end
|
106
|
-
end
|
107
|
-
.flatten
|
108
|
-
end
|
109
|
-
|
110
|
-
sig { params(url: String).returns(T.nilable(Excon::Response)) }
|
111
|
-
def release_channel_response(url)
|
112
|
-
Dependabot::RegistryClient.get(
|
113
|
-
url: url,
|
114
|
-
headers: { "Accept" => "application/json" }
|
115
|
-
)
|
116
|
-
end
|
117
|
-
|
118
|
-
sig { returns(T::Boolean) }
|
48
|
+
sig { override.returns(T::Boolean) }
|
119
49
|
def wants_prerelease?
|
120
|
-
dependency.metadata[:allow_prerelease]
|
50
|
+
!!dependency.metadata[:allow_prerelease]
|
121
51
|
end
|
122
52
|
|
123
|
-
sig
|
124
|
-
|
125
|
-
|
53
|
+
sig do
|
54
|
+
override
|
55
|
+
.params(releases: T::Array[Dependabot::Package::PackageRelease])
|
56
|
+
.returns(T::Array[Dependabot::Package::PackageRelease])
|
126
57
|
end
|
127
|
-
|
128
|
-
|
129
|
-
def version_class
|
130
|
-
dependency.version_class
|
131
|
-
end
|
132
|
-
|
133
|
-
sig { returns(T.class_of(Dependabot::Requirement)) }
|
134
|
-
def requirement_class
|
135
|
-
dependency.requirement_class
|
58
|
+
def apply_post_fetch_lowest_security_fix_versions_filter(releases)
|
59
|
+
filter_prerelease_versions(releases)
|
136
60
|
end
|
137
61
|
end
|
138
62
|
end
|
@@ -24,6 +24,17 @@ module Dependabot
|
|
24
24
|
latest_version
|
25
25
|
end
|
26
26
|
|
27
|
+
sig { override.returns(T.nilable(Dependabot::Version)) }
|
28
|
+
def lowest_security_fix_version
|
29
|
+
latest_version_finder.lowest_security_fix_version
|
30
|
+
end
|
31
|
+
|
32
|
+
sig { override.returns(T.nilable(Dependabot::Version)) }
|
33
|
+
def lowest_resolvable_security_fix_version
|
34
|
+
# Resolvability isn't an issue for dotnet SDKs
|
35
|
+
lowest_security_fix_version
|
36
|
+
end
|
37
|
+
|
27
38
|
sig { override.returns(T.nilable(Dependabot::Version)) }
|
28
39
|
def latest_resolvable_version_with_no_unlock
|
29
40
|
raise NotImplementedError
|
@@ -34,7 +45,7 @@ module Dependabot
|
|
34
45
|
dependency.requirements.map do |requirement|
|
35
46
|
{
|
36
47
|
file: requirement[:file],
|
37
|
-
requirement:
|
48
|
+
requirement: preferred_resolvable_version,
|
38
49
|
groups: requirement[:groups],
|
39
50
|
source: requirement[:source]
|
40
51
|
}
|
@@ -56,7 +67,15 @@ module Dependabot
|
|
56
67
|
sig { returns(LatestVersionFinder) }
|
57
68
|
def latest_version_finder
|
58
69
|
@latest_version_finder ||= T.let(
|
59
|
-
LatestVersionFinder.new(
|
70
|
+
LatestVersionFinder.new(
|
71
|
+
dependency: dependency,
|
72
|
+
dependency_files: dependency_files,
|
73
|
+
credentials: credentials,
|
74
|
+
ignored_versions: ignored_versions,
|
75
|
+
security_advisories: security_advisories,
|
76
|
+
cooldown_options: update_cooldown,
|
77
|
+
raise_on_ignored: raise_on_ignored
|
78
|
+
),
|
60
79
|
T.nilable(LatestVersionFinder)
|
61
80
|
)
|
62
81
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-dotnet_sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.318.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - '='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.
|
18
|
+
version: 0.318.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.
|
25
|
+
version: 0.318.0
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: debug
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -246,6 +246,7 @@ files:
|
|
246
246
|
- lib/dependabot/dotnet_sdk/file_updater.rb
|
247
247
|
- lib/dependabot/dotnet_sdk/language.rb
|
248
248
|
- lib/dependabot/dotnet_sdk/metadata_finder.rb
|
249
|
+
- lib/dependabot/dotnet_sdk/package/package_details_fetcher.rb
|
249
250
|
- lib/dependabot/dotnet_sdk/package_manager.rb
|
250
251
|
- lib/dependabot/dotnet_sdk/requirement.rb
|
251
252
|
- lib/dependabot/dotnet_sdk/update_checker.rb
|
@@ -256,7 +257,7 @@ licenses:
|
|
256
257
|
- MIT
|
257
258
|
metadata:
|
258
259
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
259
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
260
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.318.0
|
260
261
|
rdoc_options: []
|
261
262
|
require_paths:
|
262
263
|
- lib
|