dependabot-swift 0.314.0 → 0.316.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: 6a2b9732c591be3117127bc8d10d98a6244583d69d3dca23b3b8d4be835f2c5f
|
4
|
+
data.tar.gz: 8ce481f03d3dab87d2215dd1ec107f9a3cc70282c252d4d7a4e61ef0fef9f933
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 130cdcc0063affba1322e346f7fa391c3cf46e48081d2f5eeb441897b0d5876e553f9eb13d0d07cd56985413b1ade264765f3098b2ab20f35acde9972274a83d
|
7
|
+
data.tar.gz: 9bea1217ecd17a9fe96dee648db4b463e05a7389afb3ed8aa8e1c07f30a250ef748f5f978335958f127d49bbb6ab5de1a58c415ab447d664f3fe95293a941c45
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# typed: strict
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "json"
|
5
|
+
require "time"
|
6
|
+
require "cgi"
|
7
|
+
require "excon"
|
8
|
+
require "sorbet-runtime"
|
9
|
+
require "dependabot/swift"
|
10
|
+
|
11
|
+
module Dependabot
|
12
|
+
module Swift
|
13
|
+
module Package
|
14
|
+
class PackageDetailsFetcher
|
15
|
+
extend T::Sig
|
16
|
+
|
17
|
+
RELEASES_URL = "https://api.github.com/repos/"
|
18
|
+
APPLICATION_JSON = "JSON"
|
19
|
+
|
20
|
+
sig do
|
21
|
+
params(
|
22
|
+
dependency: Dependency,
|
23
|
+
credentials: T::Array[Dependabot::Credential],
|
24
|
+
git_commit_checker: Dependabot::GitCommitChecker
|
25
|
+
).void
|
26
|
+
end
|
27
|
+
def initialize(dependency:, credentials:, git_commit_checker:)
|
28
|
+
@dependency = dependency
|
29
|
+
@credentials = credentials
|
30
|
+
@git_commit_checker = git_commit_checker
|
31
|
+
end
|
32
|
+
|
33
|
+
sig { returns(Dependabot::GitCommitChecker) }
|
34
|
+
attr_reader :git_commit_checker
|
35
|
+
|
36
|
+
sig { returns(T::Array[Dependabot::Credential]) }
|
37
|
+
attr_reader :credentials
|
38
|
+
|
39
|
+
sig { returns(T::Array[GitTagWithDetail]) }
|
40
|
+
def fetch_tag_and_release_date
|
41
|
+
truncate_github_url = @dependency.name.gsub("github.com/", "")
|
42
|
+
url = RELEASES_URL + "#{truncate_github_url}/releases"
|
43
|
+
result_lines = T.let([], T::Array[GitTagWithDetail])
|
44
|
+
# Fetch the releases from the GitHub API
|
45
|
+
response = Excon.get(url, headers: { "Accept" => "application/vnd.github.v3+json" })
|
46
|
+
Dependabot.logger.error("Failed call details: #{response.body}") unless response.status == 200
|
47
|
+
return result_lines unless response.status == 200
|
48
|
+
|
49
|
+
# Parse the JSON response
|
50
|
+
releases = JSON.parse(response.body)
|
51
|
+
|
52
|
+
# Extract version names and release dates into a hash
|
53
|
+
releases.map do |release|
|
54
|
+
result_lines << GitTagWithDetail.new(
|
55
|
+
tag: release["tag_name"],
|
56
|
+
release_date: release["published_at"]
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
# sort the result lines by tag in descending order
|
61
|
+
result_lines = result_lines.sort_by(&:tag).reverse
|
62
|
+
# Log the extracted details for debugging
|
63
|
+
Dependabot.logger.info("Extracted release details: #{result_lines}")
|
64
|
+
result_lines
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "dependabot/update_checkers/base"
|
5
|
+
require "dependabot/swift/file_parser/dependency_parser"
|
6
|
+
require "dependabot/swift/file_updater/lockfile_updater"
|
7
|
+
require "dependabot/swift/package/package_details_fetcher"
|
8
|
+
require "sorbet-runtime"
|
9
|
+
require "dependabot/git_commit_checker"
|
10
|
+
|
11
|
+
module Dependabot
|
12
|
+
module Swift
|
13
|
+
class UpdateChecker < Dependabot::UpdateCheckers::Base
|
14
|
+
class LatestVersionResolver
|
15
|
+
extend T::Sig
|
16
|
+
|
17
|
+
DAY_IN_SECONDS = T.let(24 * 60 * 60, Integer)
|
18
|
+
|
19
|
+
sig do
|
20
|
+
params(
|
21
|
+
dependency: Dependabot::Dependency,
|
22
|
+
credentials: T::Array[Dependabot::Credential],
|
23
|
+
cooldown_options: T.nilable(Dependabot::Package::ReleaseCooldownOptions),
|
24
|
+
git_commit_checker: Dependabot::GitCommitChecker
|
25
|
+
).void
|
26
|
+
end
|
27
|
+
def initialize(dependency:, credentials:, cooldown_options:, git_commit_checker:)
|
28
|
+
@dependency = dependency
|
29
|
+
@credentials = credentials
|
30
|
+
@cooldown_options = cooldown_options
|
31
|
+
@git_commit_checker = T.let(
|
32
|
+
git_commit_checker,
|
33
|
+
Dependabot::GitCommitChecker
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
sig { returns(Dependabot::Dependency) }
|
38
|
+
attr_reader :dependency
|
39
|
+
|
40
|
+
# Return latest version tag for the dependency, it removes tags that are in cooldown period
|
41
|
+
# and returns the latest version tag that is not in cooldown period. If eexception occurs
|
42
|
+
# it will return the latest version tag from the git_commit_checker. as it was before
|
43
|
+
sig { returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
44
|
+
def latest_version_tag
|
45
|
+
# step one fetch allowed version tags and
|
46
|
+
allowed_version_tags = git_commit_checker.allowed_version_tags
|
47
|
+
begin
|
48
|
+
# sort the allowed version tags by name in descending order
|
49
|
+
select_version_tags_in_cooldown_period&.each do |tag_name|
|
50
|
+
# filter out if name is not in cooldown period
|
51
|
+
allowed_version_tags.reject! do |gitref_filtered|
|
52
|
+
true if gitref_filtered.name == tag_name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
Dependabot.logger.info("Allowed version tags after filtering versions in cooldown:
|
56
|
+
#{allowed_version_tags.map(&:name).join(', ')}")
|
57
|
+
git_commit_checker.max_local_tag(allowed_version_tags)
|
58
|
+
rescue StandardError => e
|
59
|
+
Dependabot.logger.error("Error fetching latest version tag: #{e.message}")
|
60
|
+
git_commit_checker.local_tag_for_latest_version
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
sig { returns(T.nilable(T::Array[String])) }
|
65
|
+
def select_version_tags_in_cooldown_period
|
66
|
+
version_tags_in_cooldown_period = T.let([], T::Array[String])
|
67
|
+
|
68
|
+
package_details_fetcher.fetch_tag_and_release_date.each do |git_tag_with_detail|
|
69
|
+
if check_if_version_in_cooldown_period?(git_tag_with_detail.release_date)
|
70
|
+
version_tags_in_cooldown_period << git_tag_with_detail.tag
|
71
|
+
end
|
72
|
+
end
|
73
|
+
version_tags_in_cooldown_period
|
74
|
+
rescue StandardError => e
|
75
|
+
Dependabot.logger.error("Error checking if version is in cooldown: #{e.message}")
|
76
|
+
version_tags_in_cooldown_period
|
77
|
+
end
|
78
|
+
|
79
|
+
sig { params(release_date: String).returns(T::Boolean) }
|
80
|
+
def check_if_version_in_cooldown_period?(release_date)
|
81
|
+
return false unless release_date.length.positive?
|
82
|
+
|
83
|
+
cooldown = @cooldown_options
|
84
|
+
return false unless cooldown
|
85
|
+
|
86
|
+
return false if cooldown.nil?
|
87
|
+
|
88
|
+
# Get maximum cooldown days based on semver parts
|
89
|
+
days = [cooldown.default_days, cooldown.semver_major_days].max
|
90
|
+
days = cooldown.semver_minor_days unless days > cooldown.semver_minor_days
|
91
|
+
days = cooldown.semver_patch_days unless days > cooldown.semver_patch_days
|
92
|
+
# Calculate the number of seconds passed since the release
|
93
|
+
passed_seconds = Time.now.to_i - release_date_to_seconds(release_date)
|
94
|
+
# Check if the release is within the cooldown period
|
95
|
+
passed_seconds < days * DAY_IN_SECONDS
|
96
|
+
end
|
97
|
+
|
98
|
+
sig { params(release_date: String).returns(Integer) }
|
99
|
+
def release_date_to_seconds(release_date)
|
100
|
+
Time.parse(release_date).to_i
|
101
|
+
rescue ArgumentError => e
|
102
|
+
Dependabot.logger.error("Invalid release date format: #{release_date} and error: #{e.message}")
|
103
|
+
0 # Default to 360 days in seconds if parsing fails, so that it will not be in cooldown
|
104
|
+
end
|
105
|
+
|
106
|
+
sig { returns(Package::PackageDetailsFetcher) }
|
107
|
+
def package_details_fetcher
|
108
|
+
@package_details_fetcher ||= T.let(
|
109
|
+
Package::PackageDetailsFetcher.new(
|
110
|
+
dependency: dependency,
|
111
|
+
credentials: credentials,
|
112
|
+
git_commit_checker: git_commit_checker
|
113
|
+
), T.nilable(Package::PackageDetailsFetcher)
|
114
|
+
)
|
115
|
+
end
|
116
|
+
|
117
|
+
sig { returns(T::Boolean) }
|
118
|
+
def cooldown_enabled?
|
119
|
+
Dependabot::Experiments.enabled?(:enable_cooldown_for_swift)
|
120
|
+
end
|
121
|
+
|
122
|
+
sig { returns(Dependabot::GitCommitChecker) }
|
123
|
+
attr_reader :git_commit_checker
|
124
|
+
|
125
|
+
sig { returns(T::Array[Dependabot::Credential]) }
|
126
|
+
attr_reader :credentials
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -16,6 +16,7 @@ module Dependabot
|
|
16
16
|
|
17
17
|
require_relative "update_checker/requirements_updater"
|
18
18
|
require_relative "update_checker/version_resolver"
|
19
|
+
require_relative "update_checker/latest_version_resolver"
|
19
20
|
|
20
21
|
sig { override.returns(T.nilable(Dependabot::Version)) }
|
21
22
|
def latest_version
|
@@ -111,6 +112,16 @@ module Dependabot
|
|
111
112
|
)
|
112
113
|
end
|
113
114
|
|
115
|
+
sig { returns(LatestVersionResolver) }
|
116
|
+
def cooldown_check_version_resolver_for
|
117
|
+
LatestVersionResolver.new(
|
118
|
+
dependency: dependency,
|
119
|
+
credentials: credentials,
|
120
|
+
cooldown_options: update_cooldown,
|
121
|
+
git_commit_checker: git_commit_checker
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
114
125
|
sig { returns(T::Array[T::Hash[Symbol, T.untyped]]) }
|
115
126
|
def unlocked_requirements
|
116
127
|
NativeRequirement.map_requirements(old_requirements) do |_old_requirement|
|
@@ -183,7 +194,7 @@ module Dependabot
|
|
183
194
|
|
184
195
|
sig { returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
185
196
|
def latest_version_tag
|
186
|
-
|
197
|
+
cooldown_check_version_resolver_for.latest_version_tag
|
187
198
|
end
|
188
199
|
|
189
200
|
sig { returns(T.nilable(T::Hash[Symbol, T.untyped])) }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-swift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.316.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: dependabot-common
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - '='
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.
|
18
|
+
version: 0.316.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.316.0
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: debug
|
28
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,9 +253,11 @@ files:
|
|
253
253
|
- lib/dependabot/swift/language.rb
|
254
254
|
- lib/dependabot/swift/metadata_finder.rb
|
255
255
|
- lib/dependabot/swift/native_requirement.rb
|
256
|
+
- lib/dependabot/swift/package/package_details_fetcher.rb
|
256
257
|
- lib/dependabot/swift/package_manager.rb
|
257
258
|
- lib/dependabot/swift/requirement.rb
|
258
259
|
- lib/dependabot/swift/update_checker.rb
|
260
|
+
- lib/dependabot/swift/update_checker/latest_version_resolver.rb
|
259
261
|
- lib/dependabot/swift/update_checker/requirements_updater.rb
|
260
262
|
- lib/dependabot/swift/update_checker/version_resolver.rb
|
261
263
|
- lib/dependabot/swift/version.rb
|
@@ -264,7 +266,7 @@ licenses:
|
|
264
266
|
- MIT
|
265
267
|
metadata:
|
266
268
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
267
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
269
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.316.0
|
268
270
|
rdoc_options: []
|
269
271
|
require_paths:
|
270
272
|
- lib
|
@@ -272,14 +274,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
272
274
|
requirements:
|
273
275
|
- - ">="
|
274
276
|
- !ruby/object:Gem::Version
|
275
|
-
version: 3.
|
277
|
+
version: 3.3.0
|
276
278
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
277
279
|
requirements:
|
278
280
|
- - ">="
|
279
281
|
- !ruby/object:Gem::Version
|
280
|
-
version: 3.
|
282
|
+
version: 3.3.0
|
281
283
|
requirements: []
|
282
|
-
rubygems_version: 3.6.
|
284
|
+
rubygems_version: 3.6.9
|
283
285
|
specification_version: 4
|
284
286
|
summary: Provides Dependabot support for Swift
|
285
287
|
test_files: []
|