dependabot-terraform 0.148.7 → 0.148.8
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/terraform/file_parser.rb +48 -16
- data/lib/dependabot/terraform/file_updater.rb +2 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cfde4822b690f9e4a302a1c9128ab55445f5143bc20c02de5b8ad1cafab64836
|
4
|
+
data.tar.gz: 26cb654b6ad3b04b35268d1d5b96bdb7e4203bb9dec061508892dc3537e97e90
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d58215f50bafc56bd50bd6a78a897a857be6afb219e5c6140705aef283d5d4c646c29d216d725bcf1ee15714f83e5a8d1bfda8f6849ca460d5c71357dab67831
|
7
|
+
data.tar.gz: 7eea2d1dff06c749a432cf57ce1706a12fdc71867dd8cc0a30b846c68ab37113b9f3ed69927e7d4b29843215e2c26cc75f632ad257c029edd582a39fde4dc2d8
|
@@ -20,6 +20,10 @@ module Dependabot
|
|
20
20
|
include FileSelector
|
21
21
|
|
22
22
|
ARCHIVE_EXTENSIONS = %w(.zip .tbz2 .tgz .txz).freeze
|
23
|
+
DEFAULT_REGISTRY = "registry.terraform.io"
|
24
|
+
DEFAULT_NAMESPACE = "hashicorp"
|
25
|
+
# https://www.terraform.io/docs/language/providers/requirements.html#source-addresses
|
26
|
+
PROVIDER_SOURCE_ADDRESS = %r{\A((?<hostname>.+)/)?(?<namespace>.+)/(?<name>.+)\z}.freeze
|
23
27
|
|
24
28
|
def parse
|
25
29
|
dependency_set = DependencySet.new
|
@@ -27,14 +31,14 @@ module Dependabot
|
|
27
31
|
terraform_files.each do |file|
|
28
32
|
modules = parsed_file(file).fetch("module", {})
|
29
33
|
modules.each do |name, details|
|
30
|
-
dependency_set << build_terraform_dependency(file, name, details
|
34
|
+
dependency_set << build_terraform_dependency(file, name, details)
|
31
35
|
end
|
32
36
|
|
33
37
|
parsed_file(file).fetch("terraform", []).each do |terraform|
|
34
38
|
required_providers = terraform.fetch("required_providers", {})
|
35
39
|
required_providers.each do |provider|
|
36
40
|
provider.each do |name, details|
|
37
|
-
dependency_set <<
|
41
|
+
dependency_set << build_provider_dependency(file, name, details)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
@@ -54,10 +58,10 @@ module Dependabot
|
|
54
58
|
|
55
59
|
private
|
56
60
|
|
57
|
-
def build_terraform_dependency(file, name, details
|
58
|
-
details = details.
|
61
|
+
def build_terraform_dependency(file, name, details)
|
62
|
+
details = details.first
|
59
63
|
|
60
|
-
source = source_from(details
|
64
|
+
source = source_from(details)
|
61
65
|
dep_name = case source[:type]
|
62
66
|
when "registry" then source[:module_identifier]
|
63
67
|
when "provider" then details["source"]
|
@@ -82,8 +86,31 @@ module Dependabot
|
|
82
86
|
)
|
83
87
|
end
|
84
88
|
|
89
|
+
def build_provider_dependency(file, name, details = {})
|
90
|
+
source_address = details.fetch("source", nil)
|
91
|
+
version = details["version"]&.strip
|
92
|
+
hostname, namespace, name = provider_source_from(source_address, name)
|
93
|
+
dependency_name = source_address ? "#{namespace}/#{name}" : name
|
94
|
+
|
95
|
+
Dependency.new(
|
96
|
+
name: dependency_name,
|
97
|
+
version: version, # resolved version should come from `.terraform.lock.hcl`.
|
98
|
+
package_manager: "terraform",
|
99
|
+
requirements: [
|
100
|
+
requirement: version,
|
101
|
+
groups: [],
|
102
|
+
file: file.name,
|
103
|
+
source: {
|
104
|
+
type: "provider",
|
105
|
+
registry_hostname: hostname,
|
106
|
+
module_identifier: "#{namespace}/#{name}"
|
107
|
+
}
|
108
|
+
]
|
109
|
+
)
|
110
|
+
end
|
111
|
+
|
85
112
|
def build_terragrunt_dependency(file, details)
|
86
|
-
source = source_from(details
|
113
|
+
source = source_from(details)
|
87
114
|
dep_name =
|
88
115
|
if Source.from_url(source[:url])
|
89
116
|
Source.from_url(source[:url]).repo
|
@@ -107,7 +134,7 @@ module Dependabot
|
|
107
134
|
end
|
108
135
|
|
109
136
|
# Full docs at https://www.terraform.io/docs/modules/sources.html
|
110
|
-
def source_from(details_hash
|
137
|
+
def source_from(details_hash)
|
111
138
|
raw_source = details_hash.fetch("source")
|
112
139
|
bare_source = get_proxied_source(raw_source)
|
113
140
|
|
@@ -118,23 +145,28 @@ module Dependabot
|
|
118
145
|
when :github, :bitbucket, :git
|
119
146
|
git_source_details_from(bare_source)
|
120
147
|
when :registry
|
121
|
-
registry_source_details_from(bare_source
|
148
|
+
registry_source_details_from(bare_source)
|
122
149
|
end
|
123
150
|
|
124
151
|
source_details[:proxy_url] = raw_source if raw_source != bare_source
|
125
152
|
source_details
|
126
153
|
end
|
127
154
|
|
128
|
-
def
|
155
|
+
def provider_source_from(source_address, name)
|
156
|
+
return [DEFAULT_REGISTRY, DEFAULT_NAMESPACE, name] unless source_address
|
157
|
+
|
158
|
+
matches = source_address.match(PROVIDER_SOURCE_ADDRESS)
|
159
|
+
[
|
160
|
+
matches[:hostname] || DEFAULT_REGISTRY,
|
161
|
+
matches[:namespace],
|
162
|
+
matches[:name] || name
|
163
|
+
]
|
164
|
+
end
|
165
|
+
|
166
|
+
def registry_source_details_from(source_string)
|
129
167
|
parts = source_string.split("//").first.split("/")
|
130
168
|
|
131
|
-
if
|
132
|
-
{
|
133
|
-
"type": "provider",
|
134
|
-
"registry_hostname": "registry.terraform.io",
|
135
|
-
"module_identifier": source_string
|
136
|
-
}
|
137
|
-
elsif parts.count == 3
|
169
|
+
if parts.count == 3
|
138
170
|
{
|
139
171
|
type: "registry",
|
140
172
|
registry_hostname: "registry.terraform.io",
|
@@ -98,9 +98,9 @@ module Dependabot
|
|
98
98
|
end
|
99
99
|
|
100
100
|
def provider_declaration_regex
|
101
|
+
name = Regexp.escape(dependency.name)
|
101
102
|
/
|
102
|
-
(
|
103
|
-
(source\s*=\s*["']#{Regexp.escape(dependency.name)}["']
|
103
|
+
((source\s*=\s*["']#{name}["']|\s*#{name}\s*=\s*\{.*)
|
104
104
|
(?:(?!^\}).)+)
|
105
105
|
/mx
|
106
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependabot-terraform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.148.
|
4
|
+
version: 0.148.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.148.
|
19
|
+
version: 0.148.8
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.148.
|
26
|
+
version: 0.148.8
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: byebug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|