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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ef67b7a849480c1999047f2c364ca50cd2e3e105184a4bec3260ebe122620d1f
4
- data.tar.gz: 27ba056f8bf0cc4769ffc7e535f4b6f712a20228b845049b923451185864714f
3
+ metadata.gz: 845cc0889f2292cb4c4c1b83736b700c969630973aa12f7b5358222ee52ab509
4
+ data.tar.gz: 66792964906d8187dabeecabceab937b4b3caf478c8200bef2aec8c51f4e6157
5
5
  SHA512:
6
- metadata.gz: 8edf5db39add15821a2de09b7b1154b6efba8f23440ceb89b48896386ed37d7b296c4db4b1a8ebb7126d8ae97b2d7c696c6afd577dd00b63b3c145905bfab104
7
- data.tar.gz: 4b3d5e185215dc6f01ad26bdb98515c53d37c2249279ac6891a0e87b10f38905de256ab159743e4b1144171f380bc10ba51cbb80b1bee84b767768b93d82c91f
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?(".tf") }
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
- index_to_update =
194
- version.segments.map.with_index { |seg, i| seg.zero? ? 0 : i }.max
195
-
196
- new_segments = version.segments.map.with_index do |_, index|
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('.')}")
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "sorbet-runtime"
5
5
 
6
+ require "dependabot/utils"
6
7
  require "dependabot/version"
7
8
 
8
9
  # Terraform pre-release versions use 1.0.1-rc1 syntax, which Gem::Version
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.289.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-05 00:00:00.000000000 Z
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.289.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.289.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.289.0
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: []