dependabot-terraform 0.289.0 → 0.291.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/terraform/file_parser.rb +38 -0
- data/lib/dependabot/terraform/file_selector.rb +35 -1
- data/lib/dependabot/terraform/package_manager.rb +41 -0
- data/lib/dependabot/terraform/requirements_updater.rb +12 -9
- data/lib/dependabot/terraform/version.rb +1 -0
- metadata +9 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 845cc0889f2292cb4c4c1b83736b700c969630973aa12f7b5358222ee52ab509
|
4
|
+
data.tar.gz: 66792964906d8187dabeecabceab937b4b3caf478c8200bef2aec8c51f4e6157
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d97473c3b0133b6e03ebd7b5c0afa22a123768c21575756e074549948f7ac7f725cc83b61d4085bd9734a1d05ef7cad7736adb10fc15aaac3726f9d3e2e00b1c
|
7
|
+
data.tar.gz: 85a7e71469e14afffb5eec88cb3b6d8bf18da1d9f9c5da6e890b762e40505994b0bfb42e4be7b8a02491e67e5b874353da15c969fa6aad25a23ad6e170be83f6
|
@@ -15,6 +15,7 @@ require "dependabot/shared_helpers"
|
|
15
15
|
require "dependabot/errors"
|
16
16
|
require "dependabot/terraform/file_selector"
|
17
17
|
require "dependabot/terraform/registry_client"
|
18
|
+
require "dependabot/terraform/package_manager"
|
18
19
|
|
19
20
|
module Dependabot
|
20
21
|
module Terraform
|
@@ -41,12 +42,30 @@ module Dependabot
|
|
41
42
|
dependency_set.dependencies.sort_by(&:name)
|
42
43
|
end
|
43
44
|
|
45
|
+
sig { returns(Ecosystem) }
|
46
|
+
def ecosystem
|
47
|
+
@ecosystem ||= T.let(begin
|
48
|
+
Ecosystem.new(
|
49
|
+
name: ECOSYSTEM,
|
50
|
+
package_manager: package_manager
|
51
|
+
)
|
52
|
+
end, T.nilable(Dependabot::Ecosystem))
|
53
|
+
end
|
54
|
+
|
44
55
|
private
|
45
56
|
|
46
57
|
sig { params(dependency_set: Dependabot::FileParsers::Base::DependencySet).void }
|
47
58
|
def parse_terraform_files(dependency_set)
|
48
59
|
terraform_files.each do |file|
|
49
60
|
modules = parsed_file(file).fetch("module", {})
|
61
|
+
# If override.tf files are present, we need to merge the modules
|
62
|
+
if override_terraform_files.any?
|
63
|
+
override_terraform_files.each do |override_file|
|
64
|
+
override_modules = parsed_file(override_file).fetch("module", {})
|
65
|
+
modules = merge_modules(override_modules, modules)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
50
69
|
modules.each do |name, details|
|
51
70
|
details = details.first
|
52
71
|
|
@@ -421,6 +440,25 @@ module Dependabot
|
|
421
440
|
T.nilable(T::Hash[String, T.untyped])
|
422
441
|
)
|
423
442
|
end
|
443
|
+
|
444
|
+
sig { returns(Ecosystem::VersionManager) }
|
445
|
+
def package_manager
|
446
|
+
@package_manager ||= T.let(
|
447
|
+
PackageManager.new(T.must(terraform_version)),
|
448
|
+
T.nilable(Dependabot::Terraform::PackageManager)
|
449
|
+
)
|
450
|
+
end
|
451
|
+
|
452
|
+
sig { returns(T.nilable(String)) }
|
453
|
+
def terraform_version
|
454
|
+
@terraform_version ||= T.let(
|
455
|
+
begin
|
456
|
+
version = SharedHelpers.run_shell_command("terraform --version")
|
457
|
+
version.match(Dependabot::Ecosystem::VersionManager::DEFAULT_VERSION_PATTERN)&.captures&.first
|
458
|
+
end,
|
459
|
+
T.nilable(String)
|
460
|
+
)
|
461
|
+
end
|
424
462
|
end
|
425
463
|
end
|
426
464
|
end
|
@@ -11,6 +11,9 @@ module Dependabot
|
|
11
11
|
extend T::Sig
|
12
12
|
extend T::Helpers
|
13
13
|
|
14
|
+
TF_EXTENSION = ".tf"
|
15
|
+
OVERRIDE_TF_EXTENSION = "override.tf"
|
16
|
+
|
14
17
|
abstract!
|
15
18
|
|
16
19
|
sig { abstract.returns(T::Array[Dependabot::DependencyFile]) }
|
@@ -22,7 +25,12 @@ module Dependabot
|
|
22
25
|
|
23
26
|
sig { returns(T::Array[Dependabot::DependencyFile]) }
|
24
27
|
def terraform_files
|
25
|
-
dependency_files.select { |f| f.name.end_with?(
|
28
|
+
dependency_files.select { |f| f.name.end_with?(TF_EXTENSION) && !f.name.end_with?(OVERRIDE_TF_EXTENSION) }
|
29
|
+
end
|
30
|
+
|
31
|
+
sig { returns(T::Array[Dependabot::DependencyFile]) }
|
32
|
+
def override_terraform_files
|
33
|
+
dependency_files.select { |f| f.name.end_with?(OVERRIDE_TF_EXTENSION) }
|
26
34
|
end
|
27
35
|
|
28
36
|
sig { returns(T::Array[Dependabot::DependencyFile]) }
|
@@ -34,6 +42,32 @@ module Dependabot
|
|
34
42
|
def lockfile
|
35
43
|
dependency_files.find { |f| lockfile?(f.name) }
|
36
44
|
end
|
45
|
+
|
46
|
+
sig do
|
47
|
+
params(modules: T::Hash[String, T::Array[T::Hash[String, T.untyped]]],
|
48
|
+
base_modules: T::Hash[String,
|
49
|
+
T::Array[T::Hash[String,
|
50
|
+
T.untyped]]])
|
51
|
+
.returns(T::Hash[String,
|
52
|
+
T::Array[T::Hash[String,
|
53
|
+
T.untyped]]])
|
54
|
+
end
|
55
|
+
def merge_modules(modules, base_modules)
|
56
|
+
merged_modules = base_modules.dup
|
57
|
+
|
58
|
+
modules.each do |key, value|
|
59
|
+
merged_modules[key] =
|
60
|
+
if merged_modules.key?(key)
|
61
|
+
T.must(merged_modules[key]).map do |base_value|
|
62
|
+
base_value.merge(T.must(value.first))
|
63
|
+
end
|
64
|
+
else
|
65
|
+
value
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
merged_modules
|
70
|
+
end
|
37
71
|
end
|
38
72
|
end
|
39
73
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# typed: strong
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require "sorbet-runtime"
|
5
|
+
require "dependabot/ecosystem"
|
6
|
+
require "dependabot/terraform/version"
|
7
|
+
|
8
|
+
module Dependabot
|
9
|
+
module Terraform
|
10
|
+
ECOSYSTEM = "terraform"
|
11
|
+
PACKAGE_MANAGER = "terraform"
|
12
|
+
SUPPORTED_TERRAFORM_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
|
13
|
+
|
14
|
+
# When a version is going to be unsupported, it will be added here
|
15
|
+
DEPRECATED_TERRAFORM_VERSIONS = T.let([].freeze, T::Array[Dependabot::Version])
|
16
|
+
|
17
|
+
class PackageManager < Dependabot::Ecosystem::VersionManager
|
18
|
+
extend T::Sig
|
19
|
+
|
20
|
+
sig { params(raw_version: String).void }
|
21
|
+
def initialize(raw_version)
|
22
|
+
super(
|
23
|
+
PACKAGE_MANAGER,
|
24
|
+
Version.new(raw_version),
|
25
|
+
DEPRECATED_TERRAFORM_VERSIONS,
|
26
|
+
SUPPORTED_TERRAFORM_VERSIONS
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
sig { returns(T::Boolean) }
|
31
|
+
def deprecated?
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
sig { returns(T::Boolean) }
|
36
|
+
def unsupported?
|
37
|
+
false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -190,17 +190,20 @@ module Dependabot
|
|
190
190
|
op, version = requirement.requirements.first
|
191
191
|
version = version.release if version.prerelease?
|
192
192
|
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
if index < index_to_update
|
193
|
+
# When 'less than'/'<',
|
194
|
+
# increment the last available segment only so that the new version is within the constraint
|
195
|
+
if op == "<"
|
196
|
+
new_segments = version.segments.map.with_index do |_, index|
|
198
197
|
version_to_be_permitted.segments[index]
|
199
|
-
elsif index == index_to_update
|
200
|
-
version_to_be_permitted.segments[index].to_i + 1
|
201
|
-
else
|
202
|
-
0
|
203
198
|
end
|
199
|
+
new_segments[-1] += 1
|
200
|
+
# When 'less-than/equal'/'<=', use the new version as-is even when previously set as a non-semver version
|
201
|
+
# Terraform treats shortened versions the same as a version with any remaining segments as 0
|
202
|
+
# Example: '0.2' is treated as '0.2.0' | '1' is treated as '1.0.0'
|
203
|
+
elsif op == "<="
|
204
|
+
new_segments = version_to_be_permitted.segments
|
205
|
+
else
|
206
|
+
raise "Unexpected operation: #{op}"
|
204
207
|
end
|
205
208
|
|
206
209
|
requirement_class.new("#{op} #{new_segments.join('.')}")
|
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.
|
4
|
+
version: 0.291.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dependabot
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-19 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.
|
19
|
+
version: 0.291.0
|
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.
|
26
|
+
version: 0.291.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: debug
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -250,6 +250,7 @@ files:
|
|
250
250
|
- lib/dependabot/terraform/file_selector.rb
|
251
251
|
- lib/dependabot/terraform/file_updater.rb
|
252
252
|
- lib/dependabot/terraform/metadata_finder.rb
|
253
|
+
- lib/dependabot/terraform/package_manager.rb
|
253
254
|
- lib/dependabot/terraform/registry_client.rb
|
254
255
|
- lib/dependabot/terraform/requirement.rb
|
255
256
|
- lib/dependabot/terraform/requirements_updater.rb
|
@@ -260,8 +261,8 @@ licenses:
|
|
260
261
|
- MIT
|
261
262
|
metadata:
|
262
263
|
bug_tracker_uri: https://github.com/dependabot/dependabot-core/issues
|
263
|
-
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.
|
264
|
-
post_install_message:
|
264
|
+
changelog_uri: https://github.com/dependabot/dependabot-core/releases/tag/v0.291.0
|
265
|
+
post_install_message:
|
265
266
|
rdoc_options: []
|
266
267
|
require_paths:
|
267
268
|
- lib
|
@@ -277,7 +278,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
277
278
|
version: 3.1.0
|
278
279
|
requirements: []
|
279
280
|
rubygems_version: 3.5.9
|
280
|
-
signing_key:
|
281
|
+
signing_key:
|
281
282
|
specification_version: 4
|
282
283
|
summary: Provides Dependabot support for Terraform
|
283
284
|
test_files: []
|