devkitkat 0.1.21 → 0.1.22
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/Gemfile.lock +13 -11
- data/README.md +2 -2
- data/bin/devkitkat +1 -1
- data/devkitkat.gemspec +2 -1
- data/lib/devkitkat/command.rb +6 -8
- data/lib/devkitkat/config.rb +33 -20
- data/lib/devkitkat/processor.rb +48 -0
- data/lib/devkitkat/service/concerns/service_initializer.rb +17 -0
- data/lib/devkitkat/service/driver/base.rb +23 -0
- data/lib/devkitkat/service/driver/docker/container.rb +163 -0
- data/lib/devkitkat/service/driver/docker/image.rb +33 -0
- data/lib/devkitkat/service/driver/docker.rb +45 -0
- data/lib/devkitkat/service/driver/none.rb +19 -0
- data/lib/devkitkat/service/executor/logger.rb +22 -0
- data/lib/devkitkat/service/executor/scripter.rb +48 -0
- data/lib/devkitkat/service/executor/variables.rb +82 -0
- data/lib/devkitkat/service/executor.rb +102 -0
- data/lib/devkitkat/service/predefined_command/add_example.rb +33 -0
- data/lib/devkitkat/service/predefined_command/add_git_ignore.rb +29 -0
- data/lib/devkitkat/service/predefined_command/add_script.rb +35 -0
- data/lib/devkitkat/service/predefined_command/add_shared_script.rb +21 -0
- data/lib/devkitkat/service/predefined_command/base.rb +17 -0
- data/lib/devkitkat/service/predefined_command/clean.rb +22 -0
- data/lib/devkitkat/service/predefined_command/clone.rb +25 -0
- data/lib/devkitkat/service/predefined_command/exec.rb +18 -0
- data/lib/devkitkat/service/predefined_command/poop.rb +17 -0
- data/lib/devkitkat/service/predefined_command/pull.rb +19 -0
- data/lib/devkitkat/service/predefined_command/reconfigure.rb +26 -0
- data/lib/devkitkat/service/predefined_command/show_variables.rb +17 -0
- data/lib/devkitkat/service.rb +13 -214
- data/lib/devkitkat/version.rb +1 -1
- data/lib/devkitkat.rb +12 -5
- metadata +41 -12
- data/docs/READ.md +0 -1
- data/docs/config/READ.md +0 -1
- data/docs/machine/READ.md +0 -1
- data/docs/service/READ.md +0 -1
- data/lib/devkitkat/executor/docker.rb +0 -154
- data/lib/devkitkat/executor/local.rb +0 -25
- data/lib/devkitkat/executor.rb +0 -62
- data/lib/devkitkat/main.rb +0 -50
@@ -0,0 +1,82 @@
|
|
1
|
+
module Devkitkat
|
2
|
+
class Service
|
3
|
+
class Executor
|
4
|
+
class Variables
|
5
|
+
include Concerns::ServiceInitializer
|
6
|
+
|
7
|
+
def to_script
|
8
|
+
[predefined_global_variables,
|
9
|
+
predefined_service_variables,
|
10
|
+
predefined_service_specific_variables,
|
11
|
+
config_global_variables,
|
12
|
+
config_service_variables,
|
13
|
+
command_variables].flatten.join("\n")
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def predefined_global_variables
|
19
|
+
variables = []
|
20
|
+
variables << "export DK_ROOT_DIR=#{command.kit_root}"
|
21
|
+
variables << "export DK_MACHINE_DRIVER=#{config.machine_driver.to_s}"
|
22
|
+
variables << "export DK_MACHINE_LOCATION=#{config.machine_location.to_s}"
|
23
|
+
variables << "export DK_MACHINE_IMAGE=#{config.machine_image.to_s}"
|
24
|
+
variables << "export DK_APPLICATION=#{config.application.to_s}"
|
25
|
+
variables
|
26
|
+
end
|
27
|
+
|
28
|
+
def predefined_service_variables
|
29
|
+
variables = []
|
30
|
+
|
31
|
+
all_services.each do |service|
|
32
|
+
variables << "export DK_#{service.name.upcase}_DIR=#{service.dir}"
|
33
|
+
|
34
|
+
DIVISIONS.each do |division|
|
35
|
+
variables << "export DK_#{service.name.upcase}_#{division.upcase}_DIR=#{service.send("#{division}_dir")}"
|
36
|
+
end
|
37
|
+
|
38
|
+
config.service_hash(service.name).each do |key, value|
|
39
|
+
variables << "export DK_#{service.name.upcase}_#{key.upcase}=#{value}"
|
40
|
+
end
|
41
|
+
|
42
|
+
if service.system?
|
43
|
+
variables << "export DK_#{service.name.upcase}_SHARED_SCRIPT_PATH=#{service.shared_script_path}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
variables
|
48
|
+
end
|
49
|
+
|
50
|
+
def predefined_service_specific_variables
|
51
|
+
variables = []
|
52
|
+
|
53
|
+
variables << "export DK_SELF_DIR=#{service.dir}"
|
54
|
+
|
55
|
+
DIVISIONS.each do |division|
|
56
|
+
variables << "export DK_SELF_#{division.upcase}_DIR=#{service.send("#{division}_dir")}"
|
57
|
+
end
|
58
|
+
|
59
|
+
variables
|
60
|
+
end
|
61
|
+
|
62
|
+
def config_global_variables
|
63
|
+
config.variables.map { |key, value| "export #{key}=#{value}" }
|
64
|
+
end
|
65
|
+
|
66
|
+
def config_service_variables
|
67
|
+
config.service_hash(service.name).map do |key, value|
|
68
|
+
"export #{key}=#{value}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def command_variables
|
73
|
+
command.variables&.map { |key, value| "export #{key}=#{value}" }
|
74
|
+
end
|
75
|
+
|
76
|
+
def all_services
|
77
|
+
@all_services ||= config.all_services.map { |service| Service.new(service, config, command) }
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'require_all'
|
2
|
+
require_rel 'concerns/*.rb'
|
3
|
+
require_rel 'driver/*.rb'
|
4
|
+
require_rel 'executor/*.rb'
|
5
|
+
require_rel 'predefined_command/*.rb'
|
6
|
+
|
7
|
+
module Devkitkat
|
8
|
+
class Service
|
9
|
+
class Executor
|
10
|
+
include Concerns::ServiceInitializer
|
11
|
+
|
12
|
+
ScriptError = Class.new(StandardError)
|
13
|
+
|
14
|
+
def initialize(service)
|
15
|
+
@service = service
|
16
|
+
end
|
17
|
+
|
18
|
+
def execute
|
19
|
+
logger.new_file
|
20
|
+
|
21
|
+
scripter.new_file do
|
22
|
+
if prepare_script
|
23
|
+
execute!
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
true
|
28
|
+
rescue ScriptError => e
|
29
|
+
puts "Failure: #{e}".colorize(:red)
|
30
|
+
|
31
|
+
false
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def prepare_script
|
37
|
+
scripter.write(variables.to_script)
|
38
|
+
scripter.write(logger.to_script) if logger.available?
|
39
|
+
|
40
|
+
if File.exist?(service.script_path)
|
41
|
+
scripter.write(%Q{echo "INFO: This script is a custom script."})
|
42
|
+
scripter.write(service.script_path)
|
43
|
+
elsif predefined_command_available?
|
44
|
+
scripter.write(%Q{echo "INFO: This script is a predefined script in devkitkat."})
|
45
|
+
scripter.write(predefined_command.to_script)
|
46
|
+
else
|
47
|
+
false
|
48
|
+
end
|
49
|
+
|
50
|
+
true
|
51
|
+
end
|
52
|
+
|
53
|
+
def execute!
|
54
|
+
driver.prepare
|
55
|
+
|
56
|
+
driver.execute(scripter.file_path).tap do |result|
|
57
|
+
raise ScriptError, process_error_message($?) unless result
|
58
|
+
end
|
59
|
+
ensure
|
60
|
+
driver.cleanup
|
61
|
+
end
|
62
|
+
|
63
|
+
def driver
|
64
|
+
@driver ||= driver_klass.new(service)
|
65
|
+
end
|
66
|
+
|
67
|
+
def scripter
|
68
|
+
@scripter ||= Scripter.new(service)
|
69
|
+
end
|
70
|
+
|
71
|
+
def logger
|
72
|
+
@logger ||= Logger.new(service)
|
73
|
+
end
|
74
|
+
|
75
|
+
def variables
|
76
|
+
@variables ||= Variables.new(service)
|
77
|
+
end
|
78
|
+
|
79
|
+
def predefined_command
|
80
|
+
@predefined_command ||= predefined_command_klass.new(service)
|
81
|
+
end
|
82
|
+
|
83
|
+
def driver_klass
|
84
|
+
Object.const_get("Devkitkat::Service::Driver::#{config.machine_driver.camelize}")
|
85
|
+
end
|
86
|
+
|
87
|
+
def predefined_command_klass
|
88
|
+
Object.const_get("Devkitkat::Service::PredefinedCommand::#{command.name.camelize}")
|
89
|
+
end
|
90
|
+
|
91
|
+
def predefined_command_available?
|
92
|
+
Object.const_defined?("Devkitkat::Service::PredefinedCommand::#{command.name.camelize}") &&
|
93
|
+
predefined_command.available?
|
94
|
+
end
|
95
|
+
|
96
|
+
def process_error_message(exit_code)
|
97
|
+
%Q[The command "#{command.script}" for "#{service.name}" exited with non-zero code: #{exit_code}.
|
98
|
+
See the log file: #{service.log_path}]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class AddExample < Base
|
7
|
+
def to_script
|
8
|
+
names = command.args
|
9
|
+
|
10
|
+
raise ArgumentError, 'Please specify at least one example name' if names.empty?
|
11
|
+
|
12
|
+
FileUtils.mkdir_p(service.example_dir)
|
13
|
+
|
14
|
+
names.map do |name|
|
15
|
+
file_path = File.join(service.example_dir, name)
|
16
|
+
|
17
|
+
<<-EOS
|
18
|
+
if [[ ! -f "#{file_path}" ]]; then
|
19
|
+
touch #{file_path}
|
20
|
+
chmod 755 #{file_path}
|
21
|
+
fi
|
22
|
+
EOS
|
23
|
+
end.join("\n")
|
24
|
+
end
|
25
|
+
|
26
|
+
def available?
|
27
|
+
true
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class AddGitIgnore < Base
|
7
|
+
def to_script
|
8
|
+
<<~EOS
|
9
|
+
cat > #{file_path} << EOL
|
10
|
+
services/**/script-*
|
11
|
+
services/**/src
|
12
|
+
services/**/log
|
13
|
+
services/**/cache
|
14
|
+
services/**/data
|
15
|
+
EOL
|
16
|
+
EOS
|
17
|
+
end
|
18
|
+
|
19
|
+
def available?
|
20
|
+
service.system? && !File.exist?(file_path)
|
21
|
+
end
|
22
|
+
|
23
|
+
def file_path
|
24
|
+
File.join(command.kit_root, '.gitignore')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class AddScript < Base
|
7
|
+
def to_script
|
8
|
+
names = command.args.any? ? command.args : %w[configure unconfigure start]
|
9
|
+
|
10
|
+
FileUtils.mkdir_p(service.script_dir)
|
11
|
+
|
12
|
+
names.map do |name|
|
13
|
+
file_path = File.join(service.script_dir, name)
|
14
|
+
|
15
|
+
<<-EOS
|
16
|
+
if [[ ! -f "#{file_path}" ]]; then
|
17
|
+
cat > #{file_path} << EOL
|
18
|
+
#!/bin/bash
|
19
|
+
set -e
|
20
|
+
|
21
|
+
# TODO: Define scripts
|
22
|
+
EOL
|
23
|
+
chmod 755 #{file_path}
|
24
|
+
fi
|
25
|
+
EOS
|
26
|
+
end.join("\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
def available?
|
30
|
+
true
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class AddSharedScript < Base
|
7
|
+
def to_script
|
8
|
+
<<~EOS
|
9
|
+
mkdir -p #{service.script_dir}
|
10
|
+
touch #{service.shared_script_path}
|
11
|
+
chmod 755 #{service.shared_script_path}
|
12
|
+
EOS
|
13
|
+
end
|
14
|
+
|
15
|
+
def available?
|
16
|
+
service.system? && !File.exist?(service.shared_script_path)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Devkitkat
|
2
|
+
class Service
|
3
|
+
class PredefinedCommand
|
4
|
+
class Base
|
5
|
+
include Concerns::ServiceInitializer
|
6
|
+
|
7
|
+
def to_script
|
8
|
+
raise NotImplementedError
|
9
|
+
end
|
10
|
+
|
11
|
+
def available?
|
12
|
+
raise NotImplementedError
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class Clean < Base
|
7
|
+
def to_script
|
8
|
+
<<~EOS
|
9
|
+
rm -rf #{service.src_dir}
|
10
|
+
rm -rf #{service.data_dir}
|
11
|
+
rm -rf #{service.cache_dir}
|
12
|
+
rm -rf #{service.log_dir}
|
13
|
+
EOS
|
14
|
+
end
|
15
|
+
|
16
|
+
def available?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'devkitkat/service/predefined_command/base'
|
2
|
+
|
3
|
+
module Devkitkat
|
4
|
+
class Service
|
5
|
+
class PredefinedCommand
|
6
|
+
class Clone < Base
|
7
|
+
def to_script
|
8
|
+
<<~EOS
|
9
|
+
set -e
|
10
|
+
|
11
|
+
if [ -n "$GIT_DEPTH" ]; then
|
12
|
+
git clone #{service.repo} #{service.src_dir} --depth $GIT_DEPTH
|
13
|
+
else
|
14
|
+
git clone #{service.repo} #{service.src_dir}
|
15
|
+
fi
|
16
|
+
EOS
|
17
|
+
end
|
18
|
+
|
19
|
+
def available?
|
20
|
+
service.repo_defined?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Devkitkat
|
2
|
+
class Service
|
3
|
+
class PredefinedCommand
|
4
|
+
class Pull < Base
|
5
|
+
def to_script
|
6
|
+
<<~EOS
|
7
|
+
cd #{service.src_dir}
|
8
|
+
git checkout master
|
9
|
+
git pull origin master
|
10
|
+
EOS
|
11
|
+
end
|
12
|
+
|
13
|
+
def available?
|
14
|
+
service.repo_defined?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Devkitkat
|
2
|
+
class Service
|
3
|
+
class PredefinedCommand
|
4
|
+
class Reconfigure < Base
|
5
|
+
def to_script
|
6
|
+
unconfigure_path = File.join(service.script_dir, 'unconfigure')
|
7
|
+
configure_path = File.join(service.script_dir, 'configure')
|
8
|
+
|
9
|
+
<<~EOS
|
10
|
+
if [[ -f "#{unconfigure_path}" ]]; then
|
11
|
+
#{unconfigure_path}
|
12
|
+
fi
|
13
|
+
|
14
|
+
if [[ -f "#{configure_path}" ]]; then
|
15
|
+
#{configure_path}
|
16
|
+
fi
|
17
|
+
EOS
|
18
|
+
end
|
19
|
+
|
20
|
+
def available?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|