dependabot-common 0.393.0 → 0.395.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 +4 -4
- data/lib/dependabot/clients/azure.rb +1 -2
- data/lib/dependabot/command_helpers.rb +3 -3
- data/lib/dependabot/errors.rb +5 -3
- data/lib/dependabot/file_fetchers/base.rb +4 -13
- data/lib/dependabot/file_filtering.rb +0 -2
- data/lib/dependabot/file_updaters/artifact_updater.rb +1 -2
- data/lib/dependabot/git_commit_checker.rb +2 -2
- data/lib/dependabot/metadata_finders/base/changelog_finder.rb +1 -2
- data/lib/dependabot/package/npm_package_manager_config.rb +72 -0
- data/lib/dependabot/package/npm_registry_package.rb +195 -0
- data/lib/dependabot/pull_request_creator/github.rb +1 -2
- data/lib/dependabot/pull_request_creator/labeler.rb +2 -4
- data/lib/dependabot/pull_request_creator/message_builder.rb +1 -2
- data/lib/dependabot.rb +1 -1
- metadata +11 -9
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d9566b1a9930f4b53e02d88a9eda5893f794bcd80b37c0a82870dab926432fba
|
|
4
|
+
data.tar.gz: 77aa3094407df4ef7627a53cb584abd0cf1b14a16e690b3ee178c8600dad2dd7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f994b68adbb197b61dfa48006b35b8cd39058d5b482393aa2c56993b86958c32364d7e6869b31b068a8fbc85375883eb33110abd9f5fdc254aff940ae4d98c51
|
|
7
|
+
data.tar.gz: f5bba21d3f012e715c1918f161ce077d1d9f2a0b2ca681e90fd87d9b321d096b710f98902f1ece9e1814c2cdb16d8b89fb68f0d7670aab3b7630e68acaa0cd9c
|
|
@@ -8,7 +8,7 @@ require "sorbet-runtime"
|
|
|
8
8
|
|
|
9
9
|
module Dependabot
|
|
10
10
|
module Clients
|
|
11
|
-
# rubocop:disable Metrics/ClassLength
|
|
11
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
12
12
|
class Azure
|
|
13
13
|
extend T::Sig
|
|
14
14
|
include JsonResponseParser
|
|
@@ -550,6 +550,5 @@ module Dependabot
|
|
|
550
550
|
sig { returns(Dependabot::Source) }
|
|
551
551
|
attr_reader :source
|
|
552
552
|
end
|
|
553
|
-
# rubocop:enable Metrics/ClassLength
|
|
554
553
|
end
|
|
555
554
|
end
|
|
@@ -11,7 +11,7 @@ module Dependabot
|
|
|
11
11
|
|
|
12
12
|
module TIMEOUTS
|
|
13
13
|
NO_TIME_OUT = -1 # No timeout
|
|
14
|
-
|
|
14
|
+
GRACEFULLY_STOP = 5 # 5 seconds for graceful termination
|
|
15
15
|
LOCAL = 30 # 30 seconds
|
|
16
16
|
NETWORK = 120 # 2 minutes
|
|
17
17
|
LONG_RUNNING = 300 # 5 minutes
|
|
@@ -185,8 +185,8 @@ module Dependabot
|
|
|
185
185
|
if observation&.dig(:gracefully_stop)
|
|
186
186
|
message = observation[:reason] || "Terminated by output_observer"
|
|
187
187
|
# If the observer indicates a graceful stop, terminate the process
|
|
188
|
-
# by adjusting the remaining timeout
|
|
189
|
-
timeout = [timeout, ((Time.now - last_output_time) +
|
|
188
|
+
# by adjusting the remaining timeout
|
|
189
|
+
timeout = [timeout, ((Time.now - last_output_time) + TIMEOUTS::GRACEFULLY_STOP).to_i].min
|
|
190
190
|
Dependabot.logger.warn("Terminating process due to observer signal: #{message}")
|
|
191
191
|
end
|
|
192
192
|
rescue EOFError
|
data/lib/dependabot/errors.rb
CHANGED
|
@@ -5,7 +5,7 @@ require "sorbet-runtime"
|
|
|
5
5
|
require "dependabot/error_details"
|
|
6
6
|
require "dependabot/utils"
|
|
7
7
|
|
|
8
|
-
# rubocop:disable Metrics/ModuleLength
|
|
8
|
+
# rubocop:disable-next Metrics/ModuleLength
|
|
9
9
|
module Dependabot
|
|
10
10
|
extend T::Sig
|
|
11
11
|
|
|
@@ -580,7 +580,10 @@ module Dependabot
|
|
|
580
580
|
end
|
|
581
581
|
def initialize(tool_name, tool_message)
|
|
582
582
|
@tool_name = tool_name
|
|
583
|
-
|
|
583
|
+
# Sanitize here as well as via `super`: the raw `tool_message` attribute is read
|
|
584
|
+
# directly during error serialization (see `updater_error_details`), so it must not
|
|
585
|
+
# carry credentials (e.g. basic-auth URLs) that the base message sanitization strips.
|
|
586
|
+
@tool_message = T.let(filter_sensitive_data(tool_message), String)
|
|
584
587
|
|
|
585
588
|
msg = "Dependabot detected that #{tool_name} is misconfigured in this repository. " \
|
|
586
589
|
"Running `#{tool_name.downcase}` results in the following error: #{tool_message}"
|
|
@@ -1007,4 +1010,3 @@ module Dependabot
|
|
|
1007
1010
|
end
|
|
1008
1011
|
end
|
|
1009
1012
|
end
|
|
1010
|
-
# rubocop:enable Metrics/ModuleLength
|
|
@@ -16,7 +16,7 @@ require "dependabot/clients/bitbucket_with_retries"
|
|
|
16
16
|
require "dependabot/clients/gitlab_with_retries"
|
|
17
17
|
require "dependabot/shared_helpers"
|
|
18
18
|
|
|
19
|
-
# rubocop:disable Metrics/ClassLength
|
|
19
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
20
20
|
module Dependabot
|
|
21
21
|
module FileFetchers
|
|
22
22
|
class RepositoryContent < T::ImmutableStruct
|
|
@@ -503,7 +503,7 @@ module Dependabot
|
|
|
503
503
|
params(path: String, fetch_submodules: T::Boolean, raise_errors: T::Boolean)
|
|
504
504
|
.returns(T::Array[RepositoryContent])
|
|
505
505
|
end
|
|
506
|
-
def _fetch_repo_contents(path, fetch_submodules: false, raise_errors: true)
|
|
506
|
+
def _fetch_repo_contents(path, fetch_submodules: false, raise_errors: true)
|
|
507
507
|
path = path.gsub(" ", "%20")
|
|
508
508
|
specification = _full_specification_for(path, fetch_submodules: fetch_submodules)
|
|
509
509
|
provider = specification.provider
|
|
@@ -512,11 +512,7 @@ module Dependabot
|
|
|
512
512
|
commit = specification.commit
|
|
513
513
|
|
|
514
514
|
entries = _fetch_repo_contents_fully_specified(provider, repo, tmp_path, commit)
|
|
515
|
-
|
|
516
|
-
filter_excluded(entries)
|
|
517
|
-
else
|
|
518
|
-
entries
|
|
519
|
-
end
|
|
515
|
+
filter_excluded(entries)
|
|
520
516
|
rescue *CLIENT_NOT_FOUND_ERRORS
|
|
521
517
|
raise Dependabot::DirectoryNotFound, directory if path == directory.gsub(%r{^/*}, "")
|
|
522
518
|
|
|
@@ -597,11 +593,7 @@ module Dependabot
|
|
|
597
593
|
size: 0 # NOTE: added for parity with github contents API
|
|
598
594
|
)
|
|
599
595
|
end
|
|
600
|
-
|
|
601
|
-
filter_excluded(entries)
|
|
602
|
-
else
|
|
603
|
-
entries
|
|
604
|
-
end
|
|
596
|
+
filter_excluded(entries)
|
|
605
597
|
end
|
|
606
598
|
|
|
607
599
|
# Filters out any entries whose paths match one of the exclude_paths globs.
|
|
@@ -1038,4 +1030,3 @@ module Dependabot
|
|
|
1038
1030
|
end
|
|
1039
1031
|
end
|
|
1040
1032
|
end
|
|
1041
|
-
# rubocop:enable Metrics/ClassLength
|
|
@@ -90,8 +90,6 @@ module Dependabot
|
|
|
90
90
|
).returns(T::Boolean)
|
|
91
91
|
end
|
|
92
92
|
def self.should_exclude_path?(path, context, exclude_paths)
|
|
93
|
-
return false unless Dependabot::Experiments.enabled?(:enable_exclude_paths_subdirectory_manifest_files)
|
|
94
|
-
|
|
95
93
|
return false if exclude_paths.nil? || exclude_paths.empty?
|
|
96
94
|
|
|
97
95
|
should_exclude = exclude_path?(path, exclude_paths)
|
|
@@ -36,9 +36,8 @@ module Dependabot
|
|
|
36
36
|
return [] unless repo_contents_path && target_directory
|
|
37
37
|
|
|
38
38
|
Dir.chdir(T.must(repo_contents_path)) do
|
|
39
|
-
# rubocop:disable Performance/DeletePrefix
|
|
39
|
+
# rubocop:disable-next Performance/DeletePrefix
|
|
40
40
|
relative_dir = Pathname.new(base_directory).sub(%r{\A/}, "").join(T.must(target_directory))
|
|
41
|
-
# rubocop:enable Performance/DeletePrefix
|
|
42
41
|
|
|
43
42
|
status = T.let(
|
|
44
43
|
SharedHelpers.run_shell_command(
|
|
@@ -23,7 +23,7 @@ require "dependabot/package/release_cooldown_options"
|
|
|
23
23
|
require "dependabot/update_checkers/cooldown_calculation"
|
|
24
24
|
require "dependabot/git_cooldown_date_resolver"
|
|
25
25
|
module Dependabot
|
|
26
|
-
# rubocop:disable Metrics/ClassLength
|
|
26
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
27
27
|
class GitCommitChecker
|
|
28
28
|
extend T::Sig
|
|
29
29
|
include Dependabot::GitCooldownDateResolver
|
|
@@ -265,6 +265,7 @@ module Dependabot
|
|
|
265
265
|
|
|
266
266
|
sig { returns(T.nilable(String)) }
|
|
267
267
|
def local_tag_for_pinned_sha
|
|
268
|
+
return @local_tag_for_pinned_sha if defined?(@local_tag_for_pinned_sha)
|
|
268
269
|
return unless pinned_ref_looks_like_commit_sha?
|
|
269
270
|
|
|
270
271
|
@local_tag_for_pinned_sha = T.let(
|
|
@@ -957,5 +958,4 @@ module Dependabot
|
|
|
957
958
|
SourceDetails.from_hash(details) if details
|
|
958
959
|
end
|
|
959
960
|
end
|
|
960
|
-
# rubocop:enable Metrics/ClassLength
|
|
961
961
|
end
|
|
@@ -24,7 +24,7 @@ module Dependabot
|
|
|
24
24
|
const :api_url, T.nilable(String), default: nil
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
# rubocop:disable Metrics/ClassLength
|
|
27
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
28
28
|
class ChangelogFinder
|
|
29
29
|
extend T::Sig
|
|
30
30
|
|
|
@@ -653,7 +653,6 @@ module Dependabot
|
|
|
653
653
|
)
|
|
654
654
|
end
|
|
655
655
|
end
|
|
656
|
-
# rubocop:enable Metrics/ClassLength
|
|
657
656
|
end
|
|
658
657
|
end
|
|
659
658
|
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "sorbet-runtime"
|
|
5
|
+
|
|
6
|
+
module Dependabot
|
|
7
|
+
module Package
|
|
8
|
+
class NpmPackageManagerConfig < T::ImmutableStruct
|
|
9
|
+
extend T::Sig
|
|
10
|
+
|
|
11
|
+
ObjectHash = T.type_alias { T::Hash[String, Object] }
|
|
12
|
+
|
|
13
|
+
const :package_manager, T.nilable(String), default: nil
|
|
14
|
+
const :engines, T.nilable(T::Hash[String, String]), default: nil
|
|
15
|
+
|
|
16
|
+
sig { params(package_json: T.nilable(Object)).returns(NpmPackageManagerConfig) }
|
|
17
|
+
def self.from_package_json(package_json)
|
|
18
|
+
return new if package_json.nil?
|
|
19
|
+
|
|
20
|
+
manifest = object_hash(package_json, "package.json")
|
|
21
|
+
|
|
22
|
+
new(
|
|
23
|
+
package_manager: optional_string(manifest["packageManager"], "packageManager"),
|
|
24
|
+
engines: parse_engines(manifest)
|
|
25
|
+
)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
sig { params(manifest: ObjectHash).returns(T.nilable(T::Hash[String, String])) }
|
|
29
|
+
def self.parse_engines(manifest)
|
|
30
|
+
return unless manifest.key?("engines")
|
|
31
|
+
|
|
32
|
+
raw_engines = manifest["engines"]
|
|
33
|
+
return if raw_engines.nil?
|
|
34
|
+
|
|
35
|
+
engines = T.let({}, T::Hash[String, String])
|
|
36
|
+
object_hash(raw_engines, "engines").each do |name, raw_requirement|
|
|
37
|
+
next if raw_requirement.nil?
|
|
38
|
+
|
|
39
|
+
raise TypeError, "engines.#{name} must be a string" unless raw_requirement.is_a?(String)
|
|
40
|
+
|
|
41
|
+
engines[name] = raw_requirement
|
|
42
|
+
end
|
|
43
|
+
engines
|
|
44
|
+
end
|
|
45
|
+
private_class_method :parse_engines
|
|
46
|
+
|
|
47
|
+
sig { params(value: Object, context: String).returns(ObjectHash) }
|
|
48
|
+
def self.object_hash(value, context)
|
|
49
|
+
raise TypeError, "#{context} must be an object" unless value.is_a?(Hash)
|
|
50
|
+
|
|
51
|
+
result = T.let({}, ObjectHash)
|
|
52
|
+
value.each do |raw_key, raw_value|
|
|
53
|
+
key = T.cast(raw_key, Object)
|
|
54
|
+
raise TypeError, "#{context} keys must be strings" unless key.is_a?(String)
|
|
55
|
+
|
|
56
|
+
result[key] = T.cast(raw_value, Object)
|
|
57
|
+
end
|
|
58
|
+
result
|
|
59
|
+
end
|
|
60
|
+
private_class_method :object_hash
|
|
61
|
+
|
|
62
|
+
sig { params(value: T.nilable(Object), context: String).returns(T.nilable(String)) }
|
|
63
|
+
def self.optional_string(value, context)
|
|
64
|
+
return if value.nil?
|
|
65
|
+
return value if value.is_a?(String)
|
|
66
|
+
|
|
67
|
+
raise TypeError, "#{context} must be a string"
|
|
68
|
+
end
|
|
69
|
+
private_class_method :optional_string
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# typed: strong
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
require "json"
|
|
5
|
+
require "time"
|
|
6
|
+
require "sorbet-runtime"
|
|
7
|
+
|
|
8
|
+
module Dependabot
|
|
9
|
+
module Package
|
|
10
|
+
class NpmRegistryPackage < T::ImmutableStruct
|
|
11
|
+
extend T::Sig
|
|
12
|
+
|
|
13
|
+
ObjectHash = T.type_alias { T::Hash[String, Object] }
|
|
14
|
+
VersionFilter = T.type_alias { T.proc.params(version: String).returns(T::Boolean) }
|
|
15
|
+
|
|
16
|
+
class Repository < T::ImmutableStruct
|
|
17
|
+
extend T::Sig
|
|
18
|
+
|
|
19
|
+
const :git, T::Boolean
|
|
20
|
+
const :url, T.nilable(String), default: nil
|
|
21
|
+
const :type, T.nilable(String), default: nil
|
|
22
|
+
|
|
23
|
+
sig { returns(T::Boolean) }
|
|
24
|
+
def git?
|
|
25
|
+
git
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class Release < T::ImmutableStruct
|
|
30
|
+
extend T::Sig
|
|
31
|
+
|
|
32
|
+
const :version, String
|
|
33
|
+
const :released_at, T.nilable(Time), default: nil
|
|
34
|
+
const :node_requirement, T.nilable(String), default: nil
|
|
35
|
+
const :repository, T.nilable(Repository), default: nil
|
|
36
|
+
const :details, ObjectHash
|
|
37
|
+
|
|
38
|
+
sig { returns(String) }
|
|
39
|
+
def package_type
|
|
40
|
+
repository&.git? ? "git" : "npm"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
const :releases, T::Hash[String, Release]
|
|
45
|
+
const :dist_tags, T.nilable(T::Hash[String, String]), default: nil
|
|
46
|
+
|
|
47
|
+
sig { params(json: String, version_filter: VersionFilter).returns(NpmRegistryPackage) }
|
|
48
|
+
def self.from_json(json, &version_filter)
|
|
49
|
+
parsed = T.cast(JSON.parse(json), Object)
|
|
50
|
+
package = object_hash(parsed, "npm registry package")
|
|
51
|
+
|
|
52
|
+
versions = package["versions"]
|
|
53
|
+
times = package["time"]
|
|
54
|
+
dist_tags = package["dist-tags"]
|
|
55
|
+
|
|
56
|
+
release_details = versions.nil? ? {} : object_hash(versions, "versions")
|
|
57
|
+
accepted_versions = T.let({}, T::Hash[String, T::Boolean])
|
|
58
|
+
release_details.each_key do |version|
|
|
59
|
+
accepted_versions[version] = true if yield(version)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
release_times = if times.nil?
|
|
63
|
+
{}
|
|
64
|
+
else
|
|
65
|
+
string_map(times, "time", included_keys: accepted_versions)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
releases = T.let({}, T::Hash[String, Release])
|
|
69
|
+
release_details.each do |version, details|
|
|
70
|
+
next unless accepted_versions.key?(version)
|
|
71
|
+
|
|
72
|
+
releases[version] = parse_release(
|
|
73
|
+
version: version,
|
|
74
|
+
details: details,
|
|
75
|
+
released_at: release_times[version]
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
new(
|
|
80
|
+
releases: releases,
|
|
81
|
+
dist_tags: dist_tags.nil? ? nil : string_map(dist_tags, "dist-tags")
|
|
82
|
+
)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
sig do
|
|
86
|
+
params(
|
|
87
|
+
version: String,
|
|
88
|
+
details: Object,
|
|
89
|
+
released_at: T.nilable(String)
|
|
90
|
+
).returns(Release)
|
|
91
|
+
end
|
|
92
|
+
def self.parse_release(version:, details:, released_at:)
|
|
93
|
+
details_hash = object_hash(details, "version #{version} details")
|
|
94
|
+
|
|
95
|
+
Release.new(
|
|
96
|
+
version: version,
|
|
97
|
+
released_at: released_at && Time.parse(released_at),
|
|
98
|
+
node_requirement: parse_node_requirement(details_hash, version),
|
|
99
|
+
repository: parse_repository(details_hash["repository"], version),
|
|
100
|
+
details: details_hash
|
|
101
|
+
)
|
|
102
|
+
end
|
|
103
|
+
private_class_method :parse_release
|
|
104
|
+
|
|
105
|
+
sig { params(details: ObjectHash, version: String).returns(T.nilable(String)) }
|
|
106
|
+
def self.parse_node_requirement(details, version)
|
|
107
|
+
engines = details["engines"]
|
|
108
|
+
return unless engines.is_a?(Hash)
|
|
109
|
+
|
|
110
|
+
engines_hash = object_hash(engines, "version #{version} engines")
|
|
111
|
+
optional_string(
|
|
112
|
+
engines_hash["node"],
|
|
113
|
+
"version #{version} engines.node"
|
|
114
|
+
)
|
|
115
|
+
end
|
|
116
|
+
private_class_method :parse_node_requirement
|
|
117
|
+
|
|
118
|
+
sig { params(value: T.nilable(Object), version: String).returns(T.nilable(Repository)) }
|
|
119
|
+
def self.parse_repository(value, version)
|
|
120
|
+
case value
|
|
121
|
+
when nil
|
|
122
|
+
nil
|
|
123
|
+
when String
|
|
124
|
+
Repository.new(url: value, git: value.start_with?("git+"))
|
|
125
|
+
when Hash
|
|
126
|
+
repository = object_hash(value, "version #{version} repository")
|
|
127
|
+
url = optional_string(repository["url"], "version #{version} repository.url")
|
|
128
|
+
type = optional_string(repository["type"], "version #{version} repository.type")
|
|
129
|
+
|
|
130
|
+
Repository.new(
|
|
131
|
+
url: url,
|
|
132
|
+
type: type,
|
|
133
|
+
git: type == "git"
|
|
134
|
+
)
|
|
135
|
+
when Array
|
|
136
|
+
repositories = T.let([], T::Array[Repository])
|
|
137
|
+
value.each do |raw_repository|
|
|
138
|
+
repository_value = T.cast(raw_repository, Object)
|
|
139
|
+
parsed_repository = parse_repository(repository_value, version)
|
|
140
|
+
repositories << parsed_repository if parsed_repository
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
repositories.find(&:git?) || repositories.first
|
|
144
|
+
else
|
|
145
|
+
raise TypeError, "version #{version} repository must be a string, object, or array"
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
private_class_method :parse_repository
|
|
149
|
+
|
|
150
|
+
sig { params(value: Object, context: String).returns(ObjectHash) }
|
|
151
|
+
def self.object_hash(value, context)
|
|
152
|
+
raise TypeError, "#{context} must be an object" unless value.is_a?(Hash)
|
|
153
|
+
|
|
154
|
+
result = T.let({}, ObjectHash)
|
|
155
|
+
value.each do |raw_key, raw_value|
|
|
156
|
+
key = T.cast(raw_key, Object)
|
|
157
|
+
raise TypeError, "#{context} keys must be strings" unless key.is_a?(String)
|
|
158
|
+
|
|
159
|
+
result[key] = T.cast(raw_value, Object)
|
|
160
|
+
end
|
|
161
|
+
result
|
|
162
|
+
end
|
|
163
|
+
private_class_method :object_hash
|
|
164
|
+
|
|
165
|
+
sig do
|
|
166
|
+
params(
|
|
167
|
+
value: Object,
|
|
168
|
+
context: String,
|
|
169
|
+
included_keys: T.nilable(T::Hash[String, T::Boolean])
|
|
170
|
+
).returns(T::Hash[String, String])
|
|
171
|
+
end
|
|
172
|
+
def self.string_map(value, context, included_keys: nil)
|
|
173
|
+
result = T.let({}, T::Hash[String, String])
|
|
174
|
+
object_hash(value, context).each do |key, raw_value|
|
|
175
|
+
next if included_keys && !included_keys.key?(key)
|
|
176
|
+
|
|
177
|
+
raise TypeError, "#{context} values must be strings" unless raw_value.is_a?(String)
|
|
178
|
+
|
|
179
|
+
result[key] = raw_value
|
|
180
|
+
end
|
|
181
|
+
result
|
|
182
|
+
end
|
|
183
|
+
private_class_method :string_map
|
|
184
|
+
|
|
185
|
+
sig { params(value: T.nilable(Object), context: String).returns(T.nilable(String)) }
|
|
186
|
+
def self.optional_string(value, context)
|
|
187
|
+
return if value.nil?
|
|
188
|
+
return value if value.is_a?(String)
|
|
189
|
+
|
|
190
|
+
raise TypeError, "#{context} must be a string"
|
|
191
|
+
end
|
|
192
|
+
private_class_method :optional_string
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -12,7 +12,7 @@ require "dependabot/pull_request_creator/commit_signer"
|
|
|
12
12
|
|
|
13
13
|
module Dependabot
|
|
14
14
|
class PullRequestCreator
|
|
15
|
-
# rubocop:disable Metrics/ClassLength
|
|
15
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
16
16
|
class Github
|
|
17
17
|
extend T::Sig
|
|
18
18
|
include Dependabot::Clients::GithubResourceParser
|
|
@@ -634,6 +634,5 @@ module Dependabot
|
|
|
634
634
|
end
|
|
635
635
|
end
|
|
636
636
|
end
|
|
637
|
-
# rubocop:enable Metrics/ClassLength
|
|
638
637
|
end
|
|
639
638
|
end
|
|
@@ -9,7 +9,7 @@ require "dependabot/credential"
|
|
|
9
9
|
|
|
10
10
|
module Dependabot
|
|
11
11
|
class PullRequestCreator
|
|
12
|
-
# rubocop:disable Metrics/ClassLength
|
|
12
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
13
13
|
class Labeler
|
|
14
14
|
extend T::Sig
|
|
15
15
|
|
|
@@ -155,9 +155,8 @@ module Dependabot
|
|
|
155
155
|
new_version_parts = T.must(version(dep)).split(/[.+]/)
|
|
156
156
|
old_version_parts = previous_version(dep)&.split(/[.+]/) || []
|
|
157
157
|
all_parts = new_version_parts.first(3) + old_version_parts.first(3)
|
|
158
|
-
# rubocop:disable Performance/RedundantEqualityComparisonBlock
|
|
158
|
+
# rubocop:disable-next Performance/RedundantEqualityComparisonBlock
|
|
159
159
|
next 0 unless all_parts.all? { |part| part.to_i.to_s == part }
|
|
160
|
-
# rubocop:enable Performance/RedundantEqualityComparisonBlock
|
|
161
160
|
next 1 if new_version_parts[0] != old_version_parts[0]
|
|
162
161
|
next 2 if new_version_parts[1] != old_version_parts[1]
|
|
163
162
|
|
|
@@ -556,6 +555,5 @@ module Dependabot
|
|
|
556
555
|
Utils.version_class_for_package_manager(package_manager)
|
|
557
556
|
end
|
|
558
557
|
end
|
|
559
|
-
# rubocop:enable Metrics/ClassLength
|
|
560
558
|
end
|
|
561
559
|
end
|
|
@@ -14,7 +14,7 @@ require "dependabot/pull_request_creator"
|
|
|
14
14
|
require "dependabot/pull_request_creator/message"
|
|
15
15
|
require "dependabot/notices"
|
|
16
16
|
|
|
17
|
-
# rubocop:disable Metrics/ClassLength
|
|
17
|
+
# rubocop:disable-next Metrics/ClassLength
|
|
18
18
|
module Dependabot
|
|
19
19
|
class PullRequestCreator
|
|
20
20
|
# MessageBuilder builds PR message for a dependency update
|
|
@@ -976,4 +976,3 @@ module Dependabot
|
|
|
976
976
|
end
|
|
977
977
|
end
|
|
978
978
|
end
|
|
979
|
-
# rubocop:enable Metrics/ClassLength
|
data/lib/dependabot.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-common
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.395.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
@@ -147,14 +147,14 @@ dependencies:
|
|
|
147
147
|
requirements:
|
|
148
148
|
- - "<"
|
|
149
149
|
- !ruby/object:Gem::Version
|
|
150
|
-
version: '2.
|
|
150
|
+
version: '2.22'
|
|
151
151
|
type: :runtime
|
|
152
152
|
prerelease: false
|
|
153
153
|
version_requirements: !ruby/object:Gem::Requirement
|
|
154
154
|
requirements:
|
|
155
155
|
- - "<"
|
|
156
156
|
- !ruby/object:Gem::Version
|
|
157
|
-
version: '2.
|
|
157
|
+
version: '2.22'
|
|
158
158
|
- !ruby/object:Gem::Dependency
|
|
159
159
|
name: nokogiri
|
|
160
160
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -441,28 +441,28 @@ dependencies:
|
|
|
441
441
|
requirements:
|
|
442
442
|
- - "~>"
|
|
443
443
|
- !ruby/object:Gem::Version
|
|
444
|
-
version: '
|
|
444
|
+
version: '1.1'
|
|
445
445
|
type: :development
|
|
446
446
|
prerelease: false
|
|
447
447
|
version_requirements: !ruby/object:Gem::Requirement
|
|
448
448
|
requirements:
|
|
449
449
|
- - "~>"
|
|
450
450
|
- !ruby/object:Gem::Version
|
|
451
|
-
version: '
|
|
451
|
+
version: '1.1'
|
|
452
452
|
- !ruby/object:Gem::Dependency
|
|
453
|
-
name:
|
|
453
|
+
name: turbo_tests2
|
|
454
454
|
requirement: !ruby/object:Gem::Requirement
|
|
455
455
|
requirements:
|
|
456
456
|
- - "~>"
|
|
457
457
|
- !ruby/object:Gem::Version
|
|
458
|
-
version:
|
|
458
|
+
version: 3.2.7
|
|
459
459
|
type: :development
|
|
460
460
|
prerelease: false
|
|
461
461
|
version_requirements: !ruby/object:Gem::Requirement
|
|
462
462
|
requirements:
|
|
463
463
|
- - "~>"
|
|
464
464
|
- !ruby/object:Gem::Version
|
|
465
|
-
version:
|
|
465
|
+
version: 3.2.7
|
|
466
466
|
- !ruby/object:Gem::Dependency
|
|
467
467
|
name: vcr
|
|
468
468
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -572,6 +572,8 @@ files:
|
|
|
572
572
|
- lib/dependabot/metadata_finders/base/commits_finder.rb
|
|
573
573
|
- lib/dependabot/metadata_finders/base/release_finder.rb
|
|
574
574
|
- lib/dependabot/notices.rb
|
|
575
|
+
- lib/dependabot/package/npm_package_manager_config.rb
|
|
576
|
+
- lib/dependabot/package/npm_registry_package.rb
|
|
575
577
|
- lib/dependabot/package/package_details.rb
|
|
576
578
|
- lib/dependabot/package/package_language.rb
|
|
577
579
|
- lib/dependabot/package/package_latest_version_finder.rb
|
|
@@ -629,7 +631,7 @@ licenses:
|
|
|
629
631
|
- MIT
|
|
630
632
|
metadata:
|
|
631
633
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
|
632
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
|
634
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.395.0
|
|
633
635
|
rdoc_options: []
|
|
634
636
|
require_paths:
|
|
635
637
|
- lib
|