terraspace 0.6.2 → 0.6.7
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/CHANGELOG.md +19 -0
- data/lib/terraspace/all/runner.rb +1 -1
- data/lib/terraspace/app.rb +3 -1
- data/lib/terraspace/cli.rb +18 -1
- data/lib/terraspace/cli/concerns/source_dirs.rb +13 -0
- data/lib/terraspace/cli/fmt.rb +40 -0
- data/lib/terraspace/cli/fmt/runner.rb +64 -0
- data/lib/terraspace/cli/help/fmt.md +22 -0
- data/lib/terraspace/cli/help/force_unlock.md +7 -0
- data/lib/terraspace/cli/list.rb +3 -2
- data/lib/terraspace/cli/new/helper.rb +2 -2
- data/lib/terraspace/compiler/builder.rb +3 -2
- data/lib/terraspace/compiler/helper_extender.rb +3 -3
- data/lib/terraspace/compiler/strategy/mod.rb +4 -3
- data/lib/terraspace/compiler/writer.rb +7 -1
- data/lib/terraspace/core.rb +7 -0
- data/lib/terraspace/ext.rb +1 -0
- data/lib/terraspace/ext/core/string.rb +5 -0
- data/lib/terraspace/hooks/runner.rb +25 -2
- data/lib/terraspace/terraform/args/default.rb +8 -4
- data/lib/terraspace/version.rb +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 790cbc55c399a3130eaaaa9e1e3af636a2b182cb28c2ca008e14a48d75883e47
|
4
|
+
data.tar.gz: 72d05ffb527f163d2b3be47542b77764ddbc599858e6dde6381058e992bc531c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a598f6c5e693d42c113a5aac0f4d2e63c41821a2414095ed65415fa6b11ab1636ce48d6a98ada24557c6b685642f1ac420fc9850544bd1cbda80e3de91036d48
|
7
|
+
data.tar.gz: f0a0955bbc1f7846e855141514a69b0aaffc81283081a5a90384fb85e4ec7946a65f19fa1dc3ff5df0e7c9f656ac5563fecca2c8a1a1959c83fa29d9daeae4bd
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,25 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
|
5
5
|
|
6
|
+
## [0.6.7] - 2021-05-05
|
7
|
+
- [#108](https://github.com/boltops-tools/terraspace/pull/108) provide runner context to terraspace hook
|
8
|
+
|
9
|
+
## [0.6.6] - 2021-04-15
|
10
|
+
- [#101](https://github.com/boltops-tools/terraspace/pull/101) terraspace force-unlock command
|
11
|
+
- [#102](https://github.com/boltops-tools/terraspace/pull/102) fix terraspace all summarized logging
|
12
|
+
- [#103](https://github.com/boltops-tools/terraspace/pull/103) config.build.pass_files with default files use pass strategy
|
13
|
+
|
14
|
+
## [0.6.5] - 2021-03-24
|
15
|
+
- [#96](https://github.com/boltops-tools/terraspace/pull/96) terraspace fmt: ability to specific module or stack
|
16
|
+
|
17
|
+
## [0.6.4] - 2021-03-22
|
18
|
+
- [#94](https://github.com/boltops-tools/terraspace/pull/94) terraspace fmt command
|
19
|
+
|
20
|
+
## [0.6.3] - 2021-03-12
|
21
|
+
- [#91](https://github.com/boltops-tools/terraspace/pull/91) Camelcase
|
22
|
+
- [#92](https://github.com/boltops-tools/terraspace/pull/92) disable terraform.plugin_cache by default
|
23
|
+
- skip build config/helpers
|
24
|
+
|
6
25
|
## [0.6.2] - 2021-03-05
|
7
26
|
- [#90](https://github.com/boltops-tools/terraspace/pull/90) Boot hooks: new and improved boot hooks interface
|
8
27
|
- remove old config.hooks.on_boot
|
@@ -104,7 +104,7 @@ module Terraspace::All
|
|
104
104
|
def run_terraspace(mod_name)
|
105
105
|
set_log_path!(mod_name)
|
106
106
|
name = command_map(@command)
|
107
|
-
o = @options.merge(mod: mod_name, yes: true, build: false, input: false)
|
107
|
+
o = @options.merge(mod: mod_name, yes: true, build: false, input: false, log_to_stderr: true)
|
108
108
|
o.merge!(quiet: false) if @command == "init" # noisy so can filter and summarize output
|
109
109
|
case @command
|
110
110
|
when "up"
|
data/lib/terraspace/app.rb
CHANGED
@@ -27,6 +27,8 @@ module Terraspace
|
|
27
27
|
config.build.cache_dir = ":CACHE_ROOT/:REGION/:ENV/:BUILD_DIR"
|
28
28
|
config.build.cache_root = nil # defaults to /full/path/to/.terraspace-cache
|
29
29
|
config.build.clean_cache = nil # defaults to /full/path/to/.terraspace-cache
|
30
|
+
config.build.default_pass_files = ["/files/"]
|
31
|
+
config.build.pass_files = []
|
30
32
|
config.bundle = ActiveSupport::OrderedOptions.new
|
31
33
|
config.bundle.logger = ts_logger
|
32
34
|
config.init = ActiveSupport::OrderedOptions.new
|
@@ -45,7 +47,7 @@ module Terraspace
|
|
45
47
|
config.terraform = ActiveSupport::OrderedOptions.new
|
46
48
|
config.terraform.plugin_cache = ActiveSupport::OrderedOptions.new
|
47
49
|
config.terraform.plugin_cache.dir = ENV['TF_PLUGIN_CACHE_DIR'] || "#{Terraspace.tmp_root}/plugin_cache"
|
48
|
-
config.terraform.plugin_cache.enabled =
|
50
|
+
config.terraform.plugin_cache.enabled = false
|
49
51
|
config.terraform.plugin_cache.purge_on_error = true
|
50
52
|
config.test_framework = "rspec"
|
51
53
|
config.tfc = ActiveSupport::OrderedOptions.new
|
data/lib/terraspace/cli.rb
CHANGED
@@ -27,6 +27,9 @@ module Terraspace
|
|
27
27
|
reconfigure_option = Proc.new {
|
28
28
|
option :reconfigure, type: :boolean, desc: "Add terraform -reconfigure option"
|
29
29
|
}
|
30
|
+
type_option = Proc.new {
|
31
|
+
option :type, default: "stack", aliases: %w[t], desc: "Type: stack, module, or all"
|
32
|
+
}
|
30
33
|
|
31
34
|
desc "all SUBCOMMAND", "all subcommands"
|
32
35
|
long_desc Help.text(:all)
|
@@ -82,6 +85,20 @@ module Terraspace
|
|
82
85
|
Down.new(options.merge(mod: mod)).run
|
83
86
|
end
|
84
87
|
|
88
|
+
desc "force_unlock", "Calls terrform force-unlock"
|
89
|
+
long_desc Help.text(:force_unlock)
|
90
|
+
instance_option.call
|
91
|
+
def force_unlock(mod, lock_id)
|
92
|
+
Commander.new("force-unlock", options.merge(mod: mod, lock_id: lock_id)).run
|
93
|
+
end
|
94
|
+
|
95
|
+
desc "fmt", "Run terraform fmt"
|
96
|
+
long_desc Help.text(:fmt)
|
97
|
+
type_option.call
|
98
|
+
def fmt(mod=nil)
|
99
|
+
Fmt.new(options.merge(mod: mod)).run
|
100
|
+
end
|
101
|
+
|
85
102
|
desc "info STACK", "Get info about stack."
|
86
103
|
long_desc Help.text(:info)
|
87
104
|
instance_option.call
|
@@ -100,7 +117,7 @@ module Terraspace
|
|
100
117
|
|
101
118
|
desc "list", "List stacks and modules."
|
102
119
|
long_desc Help.text(:list)
|
103
|
-
|
120
|
+
type_option.call
|
104
121
|
def list
|
105
122
|
List.new(options).run
|
106
123
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Terraspace::CLI::Concerns
|
2
|
+
module SourceDirs
|
3
|
+
# used by list
|
4
|
+
def source_dirs
|
5
|
+
Dir.glob("{app,vendor}/{modules,stacks}/*").select { |p| File.directory?(p) }.sort
|
6
|
+
end
|
7
|
+
|
8
|
+
# dont include vendor: used by fmt
|
9
|
+
def app_source_dirs
|
10
|
+
Dir.glob("{app}/{modules,stacks}/*").select { |p| File.directory?(p) }.sort
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Terraspace::CLI
|
2
|
+
class Fmt
|
3
|
+
include Concerns::SourceDirs
|
4
|
+
include Terraspace::Util::Logging
|
5
|
+
|
6
|
+
def initialize(options={})
|
7
|
+
@options = options
|
8
|
+
@mod_name = options[:mod]
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
logger.info "Formating terraform files"
|
13
|
+
dirs.each do |dir|
|
14
|
+
format(dir)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def format(dir)
|
19
|
+
Runner.new(dir).format!
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def dirs
|
24
|
+
if @mod_name
|
25
|
+
type_dirs.select { |p| p.include?(@mod_name) }
|
26
|
+
else
|
27
|
+
type_dirs
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_dirs
|
32
|
+
type = @options[:type]
|
33
|
+
if type
|
34
|
+
app_source_dirs.select { |p| p.include?("/#{type.pluralize}/") }
|
35
|
+
else
|
36
|
+
app_source_dirs
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class Terraspace::CLI::Fmt
|
2
|
+
class Runner
|
3
|
+
include Terraspace::CLI::Concerns::SourceDirs
|
4
|
+
include Terraspace::Util::Logging
|
5
|
+
SKIP_PATTERN = /\.skip$/
|
6
|
+
|
7
|
+
def initialize(dir)
|
8
|
+
@dir = dir
|
9
|
+
end
|
10
|
+
|
11
|
+
def format!
|
12
|
+
logger.info @dir.color(:green)
|
13
|
+
Dir.chdir(@dir) do
|
14
|
+
skip_rename
|
15
|
+
begin
|
16
|
+
terraform_fmt
|
17
|
+
ensure
|
18
|
+
restore_rename
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def skip_rename
|
24
|
+
tf_files.each do |path|
|
25
|
+
if !skip?(path) && erb?(path)
|
26
|
+
FileUtils.mv(path, "#{path}.skip")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def terraform_fmt
|
32
|
+
sh "terraform fmt"
|
33
|
+
end
|
34
|
+
|
35
|
+
def sh(command)
|
36
|
+
logger.debug("=> #{command}")
|
37
|
+
success = system(command)
|
38
|
+
return if success
|
39
|
+
logger.info "WARN: There were some errors running terraform fmt for files in #{@dir}:".color(:yellow)
|
40
|
+
logger.info "The errors are shown above"
|
41
|
+
end
|
42
|
+
|
43
|
+
def restore_rename
|
44
|
+
tf_files.each do |path|
|
45
|
+
if skip?(path) && erb?(path)
|
46
|
+
FileUtils.mv(path, path.sub(SKIP_PATTERN, '')) # original name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
def skip?(path)
|
53
|
+
!!(path =~ SKIP_PATTERN)
|
54
|
+
end
|
55
|
+
|
56
|
+
def erb?(path)
|
57
|
+
IO.readlines(path).detect { |l| l.include?('<%') }
|
58
|
+
end
|
59
|
+
|
60
|
+
def tf_files
|
61
|
+
Dir.glob("#{Terraspace.root}/#{@dir}/**/*.{tf,skip}").select { |p| File.file?(p) }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
## Example
|
2
|
+
|
3
|
+
Format all source files.
|
4
|
+
|
5
|
+
$ terraspace fmt
|
6
|
+
Formating terraform files
|
7
|
+
app/modules/example
|
8
|
+
main.tf
|
9
|
+
outputs.tf
|
10
|
+
variables.tf
|
11
|
+
app/stacks/demo
|
12
|
+
main.tf
|
13
|
+
|
14
|
+
Format specific module or stack.
|
15
|
+
|
16
|
+
$ terraspace fmt stack1
|
17
|
+
$ terraspace fmt module1
|
18
|
+
|
19
|
+
Format scoping to module or stack types. In case there's a module and stack with the same name.
|
20
|
+
|
21
|
+
$ terraspace fmt example -t module
|
22
|
+
$ terraspace fmt demo -t stacke
|
data/lib/terraspace/cli/list.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
class Terraspace::CLI
|
2
2
|
class List
|
3
|
+
include Concerns::SourceDirs
|
4
|
+
|
3
5
|
def initialize(options={})
|
4
6
|
@options = options
|
5
7
|
@type_dir = normalized_type
|
6
8
|
end
|
7
9
|
|
8
10
|
def run
|
9
|
-
|
10
|
-
dirs.sort.each do |path|
|
11
|
+
source_dirs.each do |path|
|
11
12
|
if @type_dir
|
12
13
|
puts path if path.include?("/#{@type_dir}/")
|
13
14
|
else
|
@@ -26,9 +26,9 @@ class Terraspace::CLI::New
|
|
26
26
|
|
27
27
|
def helper_class
|
28
28
|
if type == "project"
|
29
|
-
"Terraspace::#{type.
|
29
|
+
"Terraspace::#{type.camelcase}::#{name.camelcase}Helper"
|
30
30
|
else
|
31
|
-
"Terraspace::#{type.
|
31
|
+
"Terraspace::#{type.camelcase}::#{stack.camelcase}::#{name.camelcase}Helper"
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
@@ -74,10 +74,11 @@ module Terraspace::Compiler
|
|
74
74
|
def skip?(src_path)
|
75
75
|
return true unless File.file?(src_path)
|
76
76
|
# certain folders will be skipped
|
77
|
-
src_path.include?("#{@mod.root}/tfvars") ||
|
78
77
|
src_path.include?("#{@mod.root}/config/args") ||
|
78
|
+
src_path.include?("#{@mod.root}/config/helpers") ||
|
79
79
|
src_path.include?("#{@mod.root}/config/hooks") ||
|
80
|
-
src_path.include?("#{@mod.root}/test")
|
80
|
+
src_path.include?("#{@mod.root}/test") ||
|
81
|
+
src_path.include?("#{@mod.root}/tfvars")
|
81
82
|
end
|
82
83
|
end
|
83
84
|
end
|
@@ -5,7 +5,7 @@ module Terraspace::Compiler
|
|
5
5
|
full_dir = "#{@mod.root}/config/helpers"
|
6
6
|
Dir.glob("#{full_dir}/**/*").each do |path|
|
7
7
|
regexp = Regexp.new(".*/helpers/")
|
8
|
-
klass = path.sub(regexp, '').sub('.rb','').
|
8
|
+
klass = path.sub(regexp, '').sub('.rb','').camelcase
|
9
9
|
klass = "#{mod_namespace}::#{klass}"
|
10
10
|
require path # able to use require instead of load since each helper has unique namespace
|
11
11
|
send :extend, klass.constantize
|
@@ -15,8 +15,8 @@ module Terraspace::Compiler
|
|
15
15
|
# IE: mod_namespace = Terraspace::Module::Demo
|
16
16
|
# Use separate namespaces scope with module name so custom helper methods from different modules are isolated.
|
17
17
|
def mod_namespace
|
18
|
-
mod_name = @mod.name.
|
19
|
-
ns = "Terraspace::#{@mod.type.
|
18
|
+
mod_name = @mod.name.camelcase
|
19
|
+
ns = "Terraspace::#{@mod.type.camelcase}".constantize # IE: Terraspace::Module or Terraspace::Stack
|
20
20
|
if ns.const_defined?(mod_name.to_sym)
|
21
21
|
"#{ns}::#{mod_name}".constantize
|
22
22
|
else
|
@@ -1,14 +1,15 @@
|
|
1
1
|
module Terraspace::Compiler::Strategy
|
2
2
|
class Mod < AbstractBase
|
3
3
|
def run
|
4
|
-
|
5
|
-
klass = strategy_class(ext)
|
4
|
+
klass = strategy_class(@src_path)
|
6
5
|
strategy = klass.new(@mod, @src_path) # IE: Terraspace::Compiler::Strategy::Mod::Rb.new
|
7
6
|
strategy.run
|
8
7
|
end
|
9
8
|
|
10
|
-
def strategy_class(
|
9
|
+
def strategy_class(path)
|
10
|
+
ext = File.extname(path).sub('.','')
|
11
11
|
return Mod::Pass if ext.empty? # infinite loop without this
|
12
|
+
return Mod::Pass if Terraspace.pass_file?(path)
|
12
13
|
"Terraspace::Compiler::Strategy::Mod::#{ext.camelize}".constantize rescue Mod::Pass
|
13
14
|
end
|
14
15
|
end
|
@@ -10,11 +10,17 @@ module Terraspace::Compiler
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def dest_path
|
13
|
-
name =
|
13
|
+
name = get_name
|
14
14
|
name = basename(name)
|
15
15
|
"#{dest_dir}/#{name}"
|
16
16
|
end
|
17
17
|
|
18
|
+
def get_name
|
19
|
+
return @dest_name if @dest_name
|
20
|
+
return @src_path if Terraspace.pass_file?(@src_path)
|
21
|
+
@src_path.sub('.rb','.tf.json')
|
22
|
+
end
|
23
|
+
|
18
24
|
def dest_dir
|
19
25
|
if @mod.is_a?(Terraspace::Mod::Remote)
|
20
26
|
File.dirname(@src_path) # for Mod::Remote src is dest
|
data/lib/terraspace/core.rb
CHANGED
@@ -51,5 +51,12 @@ module Terraspace
|
|
51
51
|
def logger=(v)
|
52
52
|
@@logger = v
|
53
53
|
end
|
54
|
+
|
55
|
+
def pass_file?(path)
|
56
|
+
pass_files = config.build.pass_files + config.build.default_pass_files
|
57
|
+
pass_files.uniq.detect do |i|
|
58
|
+
i.is_a?(Regexp) ? path =~ i : path.include?(i)
|
59
|
+
end
|
60
|
+
end
|
54
61
|
end
|
55
62
|
end
|
data/lib/terraspace/ext.rb
CHANGED
@@ -2,6 +2,17 @@ module Terraspace::Hooks
|
|
2
2
|
class Runner
|
3
3
|
include Terraspace::Util
|
4
4
|
|
5
|
+
# exposing mod and hook so terraspace hooks have access to them via runner context. IE:
|
6
|
+
#
|
7
|
+
# class EnvExporter
|
8
|
+
# def call(runner)
|
9
|
+
# puts "runner.hook #{runner.hook}"
|
10
|
+
# end
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# Docs: http://terraspace.cloud/docs/config/hooks/ruby/#method-argument
|
14
|
+
#
|
15
|
+
attr_reader :mod, :hook
|
5
16
|
def initialize(mod, hook)
|
6
17
|
@mod, @hook = mod, hook
|
7
18
|
@execute = @hook["execute"]
|
@@ -12,12 +23,24 @@ module Terraspace::Hooks
|
|
12
23
|
when String
|
13
24
|
Terraspace::Shell.new(@mod, @execute, exit_on_fail: @hook["exit_on_fail"]).run
|
14
25
|
when -> (e) { e.respond_to?(:public_instance_methods) && e.public_instance_methods.include?(:call) }
|
15
|
-
@execute.new
|
26
|
+
executor = @execute.new
|
16
27
|
when -> (e) { e.respond_to?(:call) }
|
17
|
-
@execute
|
28
|
+
executor = @execute
|
18
29
|
else
|
19
30
|
logger.warn "WARN: execute option not set for hook: #{@hook.inspect}"
|
20
31
|
end
|
32
|
+
|
33
|
+
if executor
|
34
|
+
meth = executor.method(:call)
|
35
|
+
case meth.arity
|
36
|
+
when 0
|
37
|
+
executor.call # backwards compatibility
|
38
|
+
when 1
|
39
|
+
executor.call(self)
|
40
|
+
else
|
41
|
+
raise "The #{executor} call method definition has been more than 1 arguments and is not supported"
|
42
|
+
end
|
43
|
+
end
|
21
44
|
end
|
22
45
|
end
|
23
46
|
end
|
@@ -3,7 +3,7 @@ require "tempfile"
|
|
3
3
|
module Terraspace::Terraform::Args
|
4
4
|
class Default
|
5
5
|
def initialize(mod, name, options={})
|
6
|
-
@mod, @name, @options = mod, name, options
|
6
|
+
@mod, @name, @options = mod, name.underscore, options
|
7
7
|
@quiet = @options[:quiet].nil? ? true : @options[:quiet]
|
8
8
|
end
|
9
9
|
|
@@ -11,14 +11,18 @@ module Terraspace::Terraform::Args
|
|
11
11
|
# https://terraspace.cloud/docs/ci-automation/
|
12
12
|
ENV['TF_IN_AUTOMATION'] = '1' if @options[:auto]
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
send(
|
14
|
+
args_meth = "#{@name}_args"
|
15
|
+
if respond_to?(args_meth)
|
16
|
+
send(args_meth)
|
17
17
|
else
|
18
18
|
[]
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def force_unlock_args
|
23
|
+
[" -force #{@options[:lock_id]}"]
|
24
|
+
end
|
25
|
+
|
22
26
|
def apply_args
|
23
27
|
args = auto_approve_arg
|
24
28
|
var_files = @options[:var_files]
|
data/lib/terraspace/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terraspace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-05-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -482,7 +482,10 @@ files:
|
|
482
482
|
- lib/terraspace/cli/completer.rb
|
483
483
|
- lib/terraspace/cli/completer/script.rb
|
484
484
|
- lib/terraspace/cli/completer/script.sh
|
485
|
+
- lib/terraspace/cli/concerns/source_dirs.rb
|
485
486
|
- lib/terraspace/cli/down.rb
|
487
|
+
- lib/terraspace/cli/fmt.rb
|
488
|
+
- lib/terraspace/cli/fmt/runner.rb
|
486
489
|
- lib/terraspace/cli/help.rb
|
487
490
|
- lib/terraspace/cli/help/all/down.md
|
488
491
|
- lib/terraspace/cli/help/all/graph.md
|
@@ -504,6 +507,8 @@ files:
|
|
504
507
|
- lib/terraspace/cli/help/completion_script.md
|
505
508
|
- lib/terraspace/cli/help/console.md
|
506
509
|
- lib/terraspace/cli/help/down.md
|
510
|
+
- lib/terraspace/cli/help/fmt.md
|
511
|
+
- lib/terraspace/cli/help/force_unlock.md
|
507
512
|
- lib/terraspace/cli/help/info.md
|
508
513
|
- lib/terraspace/cli/help/init.md
|
509
514
|
- lib/terraspace/cli/help/list.md
|
@@ -623,6 +628,7 @@ files:
|
|
623
628
|
- lib/terraspace/ext.rb
|
624
629
|
- lib/terraspace/ext/bundler.rb
|
625
630
|
- lib/terraspace/ext/core/module.rb
|
631
|
+
- lib/terraspace/ext/core/string.rb
|
626
632
|
- lib/terraspace/hooks/builder.rb
|
627
633
|
- lib/terraspace/hooks/concern.rb
|
628
634
|
- lib/terraspace/hooks/dsl.rb
|