dependabot-terraform 0.149.3 → 0.149.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3d1b1f161ca1de8f1f6f728cc4d28f700ea12f4407870609729fd235ad029d5
4
- data.tar.gz: 2ca0a7c87535de7b22604571e9e48a1e2e51e2027a4becab2ae65a73e29603a0
3
+ metadata.gz: e9de51bfa366e94b80943405b7083988d76080444dc177b57d9a8fd425e9292f
4
+ data.tar.gz: 1d4794c8175cac535813c12a8e017e3b8e3c4f96068a91e5db3c75db5945ceba
5
5
  SHA512:
6
- metadata.gz: c26e03c55858649e5ae2f9f7d881b7ce5ff6ee23e8bf9f66892641273cad9558af0493c45f37a9f63d74d92d50036ab6345e3bc6e5b8474d8d3257b175f73e15
7
- data.tar.gz: 359f7ac0b27e267b395352b390379713db6caa45067a452c674318e678884fab25227693dc22153a2a867747f4b7d5e00fa94d32237f6e11b2dd90e8c3088a59
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
- /mx
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
- /mx
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 [RuntimeError] when the versions cannot be retrieved
28
+ # @raise [Dependabot::DependabotError] when the versions cannot be retrieved
28
29
  def all_provider_versions(identifier:)
29
- response = get(endpoint: "providers/#{identifier}/versions")
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 [RuntimeError] when the versions cannot be retrieved
44
+ # @raise [Dependabot::DependabotError] when the versions cannot be retrieved
43
45
  def all_module_versions(identifier:)
44
- response = get(endpoint: "modules/#{identifier}/versions")
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 [RuntimeError] when the source cannot be retrieved
62
+ # @raise [Dependabot::DependabotError] when the source cannot be retrieved
60
63
  def source(dependency:)
61
64
  type = dependency.requirements.first[:source][:type]
62
- endpoint = if type == "registry"
63
- "modules/#{dependency.name}/#{dependency.version}"
64
- elsif type == "provider"
65
- "providers/#{dependency.name}/#{dependency.version}"
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.3
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-05-28 00:00:00.000000000 Z
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.3
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.3
26
+ version: 0.149.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: byebug
29
29
  requirement: !ruby/object:Gem::Requirement