dependabot-terraform 0.149.3 → 0.149.4
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_updater.rb +11 -6
- data/lib/dependabot/terraform/registry_client.rb +72 -31
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e9de51bfa366e94b80943405b7083988d76080444dc177b57d9a8fd425e9292f
|
|
4
|
+
data.tar.gz: 1d4794c8175cac535813c12a8e017e3b8e3c4f96068a91e5db3c75db5945ceba
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 74431e13c158375f439e50127078fd7db31b56387cf3a2ff5d013ebff91427642c2b67874dd94a22e83d336f58efddcb6ec9edeb4181d7cadc25fe759fe12fcc
|
|
7
|
+
data.tar.gz: 384487d5ad087fee58324485f1c288ae7803f550e6b763128efadc883999931dd233182f56afc8c26ec2030d20179b234d32b0c96b535722c72fedf4cfa0e49e
|
|
@@ -99,19 +99,19 @@ module Dependabot
|
|
|
99
99
|
|
|
100
100
|
def provider_declaration_regex
|
|
101
101
|
name = Regexp.escape(dependency.name)
|
|
102
|
-
|
|
103
|
-
((source\s*=\s*["']#{name}["']|\s*#{name}\s*=\s*\{.*)
|
|
102
|
+
%r{
|
|
103
|
+
((source\s*=\s*["'](#{Regexp.escape(registry_host_for(dependency))}/)?#{name}["']|\s*#{name}\s*=\s*\{.*)
|
|
104
104
|
(?:(?!^\}).)+)
|
|
105
|
-
|
|
105
|
+
}mx
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def registry_declaration_regex
|
|
109
|
-
|
|
109
|
+
%r{
|
|
110
110
|
(?<=\{)
|
|
111
111
|
(?:(?!^\}).)*
|
|
112
|
-
source\s*=\s*["']#{Regexp.escape(dependency.name)}["']
|
|
112
|
+
source\s*=\s*["'](#{Regexp.escape(registry_host_for(dependency))}/)?#{Regexp.escape(dependency.name)}["']
|
|
113
113
|
(?:(?!^\}).)*
|
|
114
|
-
|
|
114
|
+
}mx
|
|
115
115
|
end
|
|
116
116
|
|
|
117
117
|
def git_declaration_regex(filename)
|
|
@@ -126,6 +126,11 @@ module Dependabot
|
|
|
126
126
|
(?:(?!^\}).)*
|
|
127
127
|
/mx
|
|
128
128
|
end
|
|
129
|
+
|
|
130
|
+
def registry_host_for(dependency)
|
|
131
|
+
source = dependency.requirements.map { |r| r[:source] }.compact.first
|
|
132
|
+
source[:registry_hostname] || source["registry_hostname"] || "registry.terraform.io"
|
|
133
|
+
end
|
|
129
134
|
end
|
|
130
135
|
end
|
|
131
136
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "dependabot/dependency"
|
|
4
|
+
require "dependabot/errors"
|
|
4
5
|
require "dependabot/source"
|
|
5
6
|
require "dependabot/terraform/version"
|
|
6
7
|
|
|
@@ -24,11 +25,12 @@ module Dependabot
|
|
|
24
25
|
# @param identifier [String] the identifier for the dependency, i.e:
|
|
25
26
|
# "hashicorp/aws"
|
|
26
27
|
# @return [Array<Dependabot::Terraform::Version>]
|
|
27
|
-
# @raise [
|
|
28
|
+
# @raise [Dependabot::DependabotError] when the versions cannot be retrieved
|
|
28
29
|
def all_provider_versions(identifier:)
|
|
29
|
-
|
|
30
|
+
base_url = service_url_for("providers.v1")
|
|
31
|
+
response = http_get!(URI.join(base_url, "#{identifier}/versions"))
|
|
30
32
|
|
|
31
|
-
JSON.parse(response).
|
|
33
|
+
JSON.parse(response.body).
|
|
32
34
|
fetch("versions").
|
|
33
35
|
map { |release| version_class.new(release.fetch("version")) }
|
|
34
36
|
end
|
|
@@ -39,11 +41,12 @@ module Dependabot
|
|
|
39
41
|
# @param identifier [String] the identifier for the dependency, i.e:
|
|
40
42
|
# "hashicorp/consul/aws"
|
|
41
43
|
# @return [Array<Dependabot::Terraform::Version>]
|
|
42
|
-
# @raise [
|
|
44
|
+
# @raise [Dependabot::DependabotError] when the versions cannot be retrieved
|
|
43
45
|
def all_module_versions(identifier:)
|
|
44
|
-
|
|
46
|
+
base_url = service_url_for("modules.v1")
|
|
47
|
+
response = http_get!(URI.join(base_url, "#{identifier}/versions"))
|
|
45
48
|
|
|
46
|
-
JSON.parse(response).
|
|
49
|
+
JSON.parse(response.body).
|
|
47
50
|
fetch("modules").first.fetch("versions").
|
|
48
51
|
map { |release| version_class.new(release.fetch("version")) }
|
|
49
52
|
end
|
|
@@ -56,40 +59,33 @@ module Dependabot
|
|
|
56
59
|
# @param dependency [Dependabot::Dependency] the dependency who's source
|
|
57
60
|
# we're attempting to find
|
|
58
61
|
# @return Dependabot::Source
|
|
59
|
-
# @raise [
|
|
62
|
+
# @raise [Dependabot::DependabotError] when the source cannot be retrieved
|
|
60
63
|
def source(dependency:)
|
|
61
64
|
type = dependency.requirements.first[:source][:type]
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
else
|
|
67
|
-
raise "Invalid source type"
|
|
68
|
-
end
|
|
69
|
-
response = get(endpoint: endpoint)
|
|
70
|
-
|
|
71
|
-
source_url = JSON.parse(response).fetch("source")
|
|
65
|
+
base_url = service_url_for(service_key_for(type))
|
|
66
|
+
response = http_get!(URI.join(base_url, "#{dependency.name}/#{dependency.version}"))
|
|
67
|
+
|
|
68
|
+
source_url = JSON.parse(response.body).fetch("source")
|
|
72
69
|
Source.from_url(source_url) if source_url
|
|
73
70
|
end
|
|
74
71
|
|
|
72
|
+
# Perform service discovery and return the absolute URL for
|
|
73
|
+
# the requested service.
|
|
74
|
+
# https://www.terraform.io/docs/internals/remote-service-discovery.html
|
|
75
|
+
#
|
|
76
|
+
# @param service_key [String] the service type described in https://www.terraform.io/docs/internals/remote-service-discovery.html#supported-services
|
|
77
|
+
# @param return String
|
|
78
|
+
# @raise [Dependabot::DependabotError] when the service is not available
|
|
79
|
+
def service_url_for(service_key)
|
|
80
|
+
url_for(services.fetch(service_key))
|
|
81
|
+
rescue KeyError
|
|
82
|
+
raise error("Host does not support required Terraform-native service")
|
|
83
|
+
end
|
|
84
|
+
|
|
75
85
|
private
|
|
76
86
|
|
|
77
87
|
attr_reader :hostname, :tokens
|
|
78
88
|
|
|
79
|
-
def get(endpoint:)
|
|
80
|
-
url = "https://#{hostname}/v1/#{endpoint}"
|
|
81
|
-
|
|
82
|
-
response = Excon.get(
|
|
83
|
-
url,
|
|
84
|
-
idempotent: true,
|
|
85
|
-
**SharedHelpers.excon_defaults(headers: headers_for(hostname))
|
|
86
|
-
)
|
|
87
|
-
|
|
88
|
-
raise "Response from registry was #{response.status}" unless response.status == 200
|
|
89
|
-
|
|
90
|
-
response.body
|
|
91
|
-
end
|
|
92
|
-
|
|
93
89
|
def version_class
|
|
94
90
|
Version
|
|
95
91
|
end
|
|
@@ -98,6 +94,51 @@ module Dependabot
|
|
|
98
94
|
token = tokens[hostname]
|
|
99
95
|
token ? { "Authorization" => "Bearer #{token}" } : {}
|
|
100
96
|
end
|
|
97
|
+
|
|
98
|
+
def services
|
|
99
|
+
@services ||=
|
|
100
|
+
begin
|
|
101
|
+
response = http_get(url_for("/.well-known/terraform.json"))
|
|
102
|
+
response.status == 200 ? JSON.parse(response.body) : {}
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def service_key_for(type)
|
|
107
|
+
case type
|
|
108
|
+
when "module", "modules", "registry"
|
|
109
|
+
"modules.v1"
|
|
110
|
+
when "provider", "providers"
|
|
111
|
+
"providers.v1"
|
|
112
|
+
else
|
|
113
|
+
raise error("Invalid source type")
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def http_get(url)
|
|
118
|
+
Excon.get(url.to_s, idempotent: true, **SharedHelpers.excon_defaults(headers: headers_for(hostname)))
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def http_get!(url)
|
|
122
|
+
response = http_get(url)
|
|
123
|
+
|
|
124
|
+
raise error("Response from registry was #{response.status}") unless response.status == 200
|
|
125
|
+
|
|
126
|
+
response
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def url_for(path)
|
|
130
|
+
uri = URI.parse(path)
|
|
131
|
+
return uri.to_s if uri.scheme == "https"
|
|
132
|
+
raise error("Unsupported scheme provided") if uri.host && uri.scheme
|
|
133
|
+
|
|
134
|
+
uri.host = hostname
|
|
135
|
+
uri.scheme = "https"
|
|
136
|
+
uri.to_s
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def error(message)
|
|
140
|
+
Dependabot::DependabotError.new(message)
|
|
141
|
+
end
|
|
101
142
|
end
|
|
102
143
|
end
|
|
103
144
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dependabot-terraform
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.149.
|
|
4
|
+
version: 0.149.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dependabot
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2021-
|
|
11
|
+
date: 2021-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dependabot-common
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - '='
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.149.
|
|
19
|
+
version: 0.149.4
|
|
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.149.
|
|
26
|
+
version: 0.149.4
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: byebug
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|