roku_builder 3.12.8 → 3.13.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/.rubocop.yml +2 -2
- data/CHANGELOG +9 -0
- data/Gemfile.lock +17 -11
- data/bin/roku +4 -8
- data/lib/roku_builder.rb +16 -24
- data/lib/roku_builder/config.rb +213 -0
- data/lib/roku_builder/config_parser.rb +304 -267
- data/lib/roku_builder/config_validator.rb +149 -126
- data/lib/roku_builder/controller.rb +34 -184
- data/lib/roku_builder/controller_commands.rb +85 -79
- data/lib/roku_builder/error_handler.rb +0 -11
- data/lib/roku_builder/errors.rb +12 -0
- data/lib/roku_builder/inspector.rb +6 -4
- data/lib/roku_builder/keyer.rb +1 -1
- data/lib/roku_builder/loader.rb +1 -1
- data/lib/roku_builder/logger.rb +32 -0
- data/lib/roku_builder/manifest_manager.rb +2 -2
- data/lib/roku_builder/monitor.rb +1 -1
- data/lib/roku_builder/options.rb +113 -0
- data/lib/roku_builder/stager.rb +2 -2
- data/lib/roku_builder/tester.rb +57 -11
- data/lib/roku_builder/util.rb +3 -4
- data/lib/roku_builder/version.rb +1 -1
- data/roku_builder.gemspec +2 -1
- data/test/roku_builder/test_config.rb +168 -0
- data/test/roku_builder/test_config_parser.rb +347 -394
- data/test/roku_builder/test_config_validator.rb +193 -190
- data/test/roku_builder/test_controller.rb +59 -178
- data/test/roku_builder/test_controller_commands.rb +407 -394
- data/test/roku_builder/test_error_handler.rb +67 -69
- data/test/roku_builder/test_files/config_test/bad.json +2 -0
- data/test/roku_builder/test_files/config_test/child.json +11 -0
- data/test/roku_builder/test_files/config_test/config.json +29 -0
- data/test/roku_builder/test_files/config_test/non_json.json +1 -0
- data/test/roku_builder/test_files/config_test/parent.json +21 -0
- data/test/roku_builder/test_files/config_test/parent_projects.json +35 -0
- data/test/roku_builder/test_files/manifest_manager_test/manifest_template_2 +1 -1
- data/test/roku_builder/test_helper.rb +55 -45
- data/test/roku_builder/test_inspector.rb +278 -213
- data/test/roku_builder/test_keyer.rb +144 -147
- data/test/roku_builder/test_linker.rb +91 -95
- data/test/roku_builder/test_loader.rb +279 -289
- data/test/roku_builder/test_logger.rb +47 -0
- data/test/roku_builder/test_manifest_manager.rb +92 -94
- data/test/roku_builder/test_monitor.rb +101 -103
- data/test/roku_builder/test_navigator.rb +240 -245
- data/test/roku_builder/test_options.rb +156 -0
- data/test/roku_builder/test_packager.rb +108 -108
- data/test/roku_builder/test_profiler.rb +20 -19
- data/test/roku_builder/test_scripter.rb +83 -81
- data/test/roku_builder/test_stager.rb +299 -311
- data/test/roku_builder/test_tester.rb +112 -115
- data/test/roku_builder/test_util.rb +18 -17
- metadata +39 -6
- data/lib/roku_builder/config_manager.rb +0 -161
- data/test/roku_builder/test_config_manager.rb +0 -372
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dd32080b9b4c8246240b9aaf4a7a2dae7d0e18e9
|
|
4
|
+
data.tar.gz: 421453a021d14e16253702b07d8dfb356a750a2c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 70e119253bf7a0379f466070e0fd97e69d2c50c2f353d32cc7985e6e6a69841840674c831f0c1873c39920453d234dc0501b93218eb34c3fae541ad38ad36465
|
|
7
|
+
data.tar.gz: ee473164b0297a43f6034b25adb3e8d75e2dd275db33d2c3bf8fbd231cfb51720645569f0c2da1c96ef2f768a2cb67d53261c5f0342cbe2c79dca68375ed38fb
|
data/.rubocop.yml
CHANGED
|
@@ -221,9 +221,9 @@ Metrics/BlockNesting:
|
|
|
221
221
|
Max: 4
|
|
222
222
|
|
|
223
223
|
Metrics/ClassLength:
|
|
224
|
-
Description: 'Avoid classes longer than
|
|
224
|
+
Description: 'Avoid classes longer than 350 lines of code.'
|
|
225
225
|
Enabled: true
|
|
226
|
-
Max:
|
|
226
|
+
Max: 350
|
|
227
227
|
|
|
228
228
|
Metrics/CyclomaticComplexity:
|
|
229
229
|
Description: >-
|
data/CHANGELOG
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
roku_builder (3.
|
|
4
|
+
roku_builder (3.13.0)
|
|
5
5
|
faraday (~> 0.12)
|
|
6
6
|
faraday-digestauth (~> 0.2)
|
|
7
7
|
git (~> 1.3)
|
|
@@ -9,25 +9,28 @@ PATH
|
|
|
9
9
|
net-telnet (~> 0.1)
|
|
10
10
|
nokogiri (~> 1.7)
|
|
11
11
|
rubyzip (~> 1.2)
|
|
12
|
+
win32-security (~> 0.5)
|
|
12
13
|
|
|
13
14
|
GEM
|
|
14
15
|
remote: https://rubygems.org/
|
|
15
16
|
specs:
|
|
16
17
|
byebug (9.0.6)
|
|
17
18
|
coderay (1.1.1)
|
|
18
|
-
coveralls (0.8.
|
|
19
|
+
coveralls (0.8.21)
|
|
19
20
|
json (>= 1.8, < 3)
|
|
20
21
|
simplecov (~> 0.14.1)
|
|
21
22
|
term-ansicolor (~> 1.3)
|
|
22
23
|
thor (~> 0.19.4)
|
|
23
24
|
tins (~> 1.6)
|
|
24
25
|
docile (1.1.5)
|
|
25
|
-
faraday (0.12.
|
|
26
|
+
faraday (0.12.1)
|
|
26
27
|
multipart-post (>= 1.2, < 3)
|
|
27
28
|
faraday-digestauth (0.2.1)
|
|
28
29
|
faraday (~> 0.7)
|
|
29
30
|
net-http-digest_auth (~> 1.4)
|
|
30
|
-
ffi (1.9.
|
|
31
|
+
ffi (1.9.18)
|
|
32
|
+
ffi-win32-extensions (1.0.3)
|
|
33
|
+
ffi
|
|
31
34
|
formatador (0.2.5)
|
|
32
35
|
git (1.3.0)
|
|
33
36
|
guard (2.14.1)
|
|
@@ -43,18 +46,18 @@ GEM
|
|
|
43
46
|
guard-minitest (2.4.6)
|
|
44
47
|
guard-compat (~> 1.2)
|
|
45
48
|
minitest (>= 3.0)
|
|
46
|
-
json (2.0
|
|
49
|
+
json (2.1.0)
|
|
47
50
|
listen (3.1.5)
|
|
48
51
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
49
52
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
50
53
|
ruby_dep (~> 1.2)
|
|
51
|
-
lumberjack (1.0.
|
|
54
|
+
lumberjack (1.0.12)
|
|
52
55
|
m (1.5.0)
|
|
53
56
|
method_source (>= 0.6.7)
|
|
54
57
|
rake (>= 0.9.2.2)
|
|
55
58
|
method_source (0.8.2)
|
|
56
59
|
mini_portile2 (2.1.0)
|
|
57
|
-
minitest (5.10.
|
|
60
|
+
minitest (5.10.2)
|
|
58
61
|
minitest-autotest (1.0.3)
|
|
59
62
|
minitest-server (~> 1.0)
|
|
60
63
|
minitest-server (1.0.4)
|
|
@@ -64,7 +67,7 @@ GEM
|
|
|
64
67
|
net-http-digest_auth (1.4.1)
|
|
65
68
|
net-ping (2.0.1)
|
|
66
69
|
net-telnet (0.1.1)
|
|
67
|
-
nokogiri (1.7.
|
|
70
|
+
nokogiri (1.7.2)
|
|
68
71
|
mini_portile2 (~> 2.1.0)
|
|
69
72
|
notiffany (0.1.1)
|
|
70
73
|
nenv (~> 0.1)
|
|
@@ -86,11 +89,14 @@ GEM
|
|
|
86
89
|
simplecov-html (~> 0.10.0)
|
|
87
90
|
simplecov-html (0.10.0)
|
|
88
91
|
slop (3.6.0)
|
|
89
|
-
term-ansicolor (1.
|
|
92
|
+
term-ansicolor (1.6.0)
|
|
90
93
|
tins (~> 1.0)
|
|
91
94
|
thor (0.19.4)
|
|
92
|
-
tins (1.
|
|
93
|
-
|
|
95
|
+
tins (1.14.0)
|
|
96
|
+
win32-security (0.5.0)
|
|
97
|
+
ffi
|
|
98
|
+
ffi-win32-extensions
|
|
99
|
+
yard (0.9.9)
|
|
94
100
|
|
|
95
101
|
PLATFORMS
|
|
96
102
|
ruby
|
data/bin/roku
CHANGED
|
@@ -12,10 +12,6 @@ options = {}
|
|
|
12
12
|
options[:config] = '~/.roku_config.json'
|
|
13
13
|
options[:update_manifest] = false
|
|
14
14
|
|
|
15
|
-
logger = Logger.new(STDOUT)
|
|
16
|
-
logger.formatter = proc {|severity, datetime, _progname, msg|
|
|
17
|
-
"[%s #%s] %5s: %s\n\r" % [datetime.strftime("%Y-%m-%d %H:%M:%S.%4N"), $$, severity, msg]
|
|
18
|
-
}
|
|
19
15
|
|
|
20
16
|
parser = OptionParser.new do |opts|
|
|
21
17
|
opts.banner = "Usage: roku <command> [options]"
|
|
@@ -133,7 +129,7 @@ parser = OptionParser.new do |opts|
|
|
|
133
129
|
options[:set_stage] = true
|
|
134
130
|
end
|
|
135
131
|
|
|
136
|
-
opts.on("-M", "--manifest-update", "Update the manifest file while packaging") do
|
|
132
|
+
opts.on("-M", "--manifest-update", "Update the manifest file while building or packaging") do
|
|
137
133
|
options[:update_manifest] = true
|
|
138
134
|
end
|
|
139
135
|
|
|
@@ -199,8 +195,8 @@ end
|
|
|
199
195
|
|
|
200
196
|
begin
|
|
201
197
|
parser.parse!
|
|
202
|
-
RokuBuilder::Controller.run(options: options
|
|
203
|
-
rescue
|
|
204
|
-
|
|
198
|
+
RokuBuilder::Controller.run(options: options)
|
|
199
|
+
rescue StandardError => e
|
|
200
|
+
RokuBuilder::Logger.instance.fatal e.message
|
|
205
201
|
end
|
|
206
202
|
|
data/lib/roku_builder.rb
CHANGED
|
@@ -10,6 +10,7 @@ require "net/ping"
|
|
|
10
10
|
require "net/telnet"
|
|
11
11
|
require "fileutils"
|
|
12
12
|
require "tempfile"
|
|
13
|
+
require "tmpdir"
|
|
13
14
|
require "zip"
|
|
14
15
|
require "git"
|
|
15
16
|
#config_manager
|
|
@@ -23,28 +24,13 @@ require 'io/console'
|
|
|
23
24
|
#monitor
|
|
24
25
|
require 'readline'
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
require
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
require "roku_builder/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
require "roku_builder/packager"
|
|
34
|
-
require "roku_builder/linker"
|
|
35
|
-
require "roku_builder/tester"
|
|
36
|
-
require "roku_builder/scripter"
|
|
37
|
-
require "roku_builder/profiler"
|
|
38
|
-
require "roku_builder/manifest_manager"
|
|
39
|
-
require "roku_builder/config_manager"
|
|
40
|
-
require "roku_builder/config_validator"
|
|
41
|
-
require "roku_builder/config_parser"
|
|
42
|
-
require "roku_builder/error_handler"
|
|
43
|
-
require "roku_builder/navigator"
|
|
44
|
-
require "roku_builder/monitor"
|
|
45
|
-
require "roku_builder/version"
|
|
46
|
-
|
|
47
|
-
# Wrapping module for the Roku Builder Gem
|
|
27
|
+
|
|
28
|
+
require 'roku_builder/util'
|
|
29
|
+
Dir.glob(File.join(File.dirname(__FILE__), "roku_builder", "*")).each do |path|
|
|
30
|
+
file = "roku_builder/"+File.basename(path, ".rb")
|
|
31
|
+
require file unless file == "roku_builder/util"
|
|
32
|
+
end
|
|
33
|
+
|
|
48
34
|
module RokuBuilder
|
|
49
35
|
|
|
50
36
|
### Global Codes ###
|
|
@@ -159,13 +145,19 @@ module RokuBuilder
|
|
|
159
145
|
end
|
|
160
146
|
|
|
161
147
|
class ::String
|
|
162
|
-
def underscore
|
|
163
|
-
word = self
|
|
148
|
+
def underscore!
|
|
149
|
+
word = self
|
|
164
150
|
word.gsub!(/::/, '/')
|
|
165
151
|
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
|
166
152
|
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
|
167
153
|
word.tr!("-", "_")
|
|
168
154
|
word.downcase!
|
|
155
|
+
nil
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def underscore
|
|
159
|
+
word = self.dup
|
|
160
|
+
word.underscore!
|
|
169
161
|
word
|
|
170
162
|
end
|
|
171
163
|
end
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
|
2
|
+
|
|
3
|
+
module RokuBuilder
|
|
4
|
+
|
|
5
|
+
# Load and validate config files.
|
|
6
|
+
class Config
|
|
7
|
+
|
|
8
|
+
attr_reader :parsed
|
|
9
|
+
|
|
10
|
+
def initialize(options:)
|
|
11
|
+
@options = options
|
|
12
|
+
@logger = Logger.instance
|
|
13
|
+
@config = nil
|
|
14
|
+
@parsed = nil
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def raw
|
|
18
|
+
@config
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def load
|
|
22
|
+
check_config_file
|
|
23
|
+
load_config
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def parse
|
|
27
|
+
@parsed = ConfigParser.parse(options: @options, config: @config)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def validate
|
|
31
|
+
validator = ConfigValidator.new(config: @config)
|
|
32
|
+
validator.print_errors
|
|
33
|
+
raise InvalidConfig if validator.is_fatal?
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def edit
|
|
37
|
+
load
|
|
38
|
+
apply_options
|
|
39
|
+
config_string = JSON.pretty_generate(@config)
|
|
40
|
+
file = File.open(@options[:config], "w")
|
|
41
|
+
file.write(config_string)
|
|
42
|
+
file.close
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def update
|
|
46
|
+
if @options[:build_version]
|
|
47
|
+
update_package_config
|
|
48
|
+
update_build_config
|
|
49
|
+
update_sideload_config
|
|
50
|
+
update_inspect_config
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def configure
|
|
55
|
+
if @options[:configure]
|
|
56
|
+
source_config = File.expand_path(File.join(File.dirname(__FILE__), "..", '..', 'config.json.example'))
|
|
57
|
+
target_config = File.expand_path(@options[:config])
|
|
58
|
+
if File.exist?(target_config)
|
|
59
|
+
unless @options[:edit_params]
|
|
60
|
+
raise InvalidOptions, "Not overwriting config. Add --edit options to do so."
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
FileUtils.copy(source_config, target_config)
|
|
64
|
+
edit if @options[:edit_params]
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
private
|
|
69
|
+
|
|
70
|
+
def check_config_file
|
|
71
|
+
config_file = File.expand_path(@options[:config])
|
|
72
|
+
raise ArgumentError, "Missing Config" unless File.exist?(config_file)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def load_config
|
|
77
|
+
@config = {parent_config: @options[:config]}
|
|
78
|
+
depth = 1
|
|
79
|
+
while @config[:parent_config]
|
|
80
|
+
parent_config_hash = get_parent_config
|
|
81
|
+
@config[:child_config] = @config[:parent_config]
|
|
82
|
+
@config.delete(:parent_config)
|
|
83
|
+
@config.merge!(parent_config_hash) {|_key, v1, _v2| v1}
|
|
84
|
+
depth += 1
|
|
85
|
+
raise InvalidConfig, "Parent Configs Too Deep." if depth > 10
|
|
86
|
+
end
|
|
87
|
+
fix_config_symbol_values
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def get_parent_config
|
|
91
|
+
begin
|
|
92
|
+
JSON.parse(parent_io.read, {symbolize_names: true})
|
|
93
|
+
rescue JSON::ParserError
|
|
94
|
+
raise InvalidConfig, "Config file is not valid JSON"
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def parent_io
|
|
99
|
+
expand_parent_file_path
|
|
100
|
+
File.open(@config[:parent_config])
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def expand_parent_file_path
|
|
104
|
+
if @config[:child_config]
|
|
105
|
+
@config[:parent_config] = File.expand_path(@config[:parent_config], File.dirname(@config[:child_config]))
|
|
106
|
+
else
|
|
107
|
+
@config[:parent_config] = File.expand_path(@config[:parent_config])
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def fix_config_symbol_values
|
|
112
|
+
if @config[:devices]
|
|
113
|
+
@config[:devices][:default] = @config[:devices][:default].to_sym
|
|
114
|
+
end
|
|
115
|
+
if @config[:projects]
|
|
116
|
+
fix_project_config_symbol_values
|
|
117
|
+
build_inhearited_project_configs
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def fix_project_config_symbol_values
|
|
122
|
+
@config[:projects][:default] = @config[:projects][:default].to_sym
|
|
123
|
+
@config[:projects].each_pair do |key,value|
|
|
124
|
+
next if is_skippable_project_key? key
|
|
125
|
+
if value[:stage_method]
|
|
126
|
+
value[:stage_method] = value[:stage_method].to_sym
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def build_inhearited_project_configs
|
|
132
|
+
@config[:projects].each_pair do |key,value|
|
|
133
|
+
next if is_skippable_project_key? key
|
|
134
|
+
while value[:parent] and @config[:projects][value[:parent].to_sym]
|
|
135
|
+
new_value = @config[:projects][value[:parent].to_sym]
|
|
136
|
+
value.delete(:parent)
|
|
137
|
+
new_value = new_value.deep_merge value
|
|
138
|
+
@config[:projects][key] = new_value
|
|
139
|
+
value = new_value
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def is_skippable_project_key?(key)
|
|
145
|
+
[:project_dir, :default].include?(key)
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def build_edit_state
|
|
149
|
+
{
|
|
150
|
+
project: get_key_for(:project),
|
|
151
|
+
device: get_key_for(:device),
|
|
152
|
+
stage: get_stage_key(project: get_key_for(:project))
|
|
153
|
+
}
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
def get_key_for(type)
|
|
157
|
+
project = @options[type].to_sym if @options[type]
|
|
158
|
+
project ||= @config[(type.to_s+"s").to_sym][:default]
|
|
159
|
+
project
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def get_stage_key(project:)
|
|
163
|
+
stage = @options[:stage].to_sym if @options[:stage]
|
|
164
|
+
stage ||= @config[:projects][project][:stages].keys[0].to_sym
|
|
165
|
+
stage
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
# Apply the changes in the options string to the config object
|
|
169
|
+
def apply_options
|
|
170
|
+
state = build_edit_state
|
|
171
|
+
changes = Util.options_parse(options: @options[:edit_params])
|
|
172
|
+
changes.each {|key,value|
|
|
173
|
+
if [:ip, :user, :password].include?(key)
|
|
174
|
+
@config[:devices][state[:device]][key] = value
|
|
175
|
+
elsif [:directory, :app_name].include?(key) #:folders, :files
|
|
176
|
+
@config[:projects][state[:project]][key] = value
|
|
177
|
+
elsif [:branch].include?(key)
|
|
178
|
+
@config[:projects][state[:project]][:stages][state[:stage]][key] = value
|
|
179
|
+
end
|
|
180
|
+
}
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
def update_package_config
|
|
184
|
+
if @parsed[:package_config]
|
|
185
|
+
@parsed[:package_config][:app_name_version] = "#{@parsed[:project_config][:app_name]} - #{@parsed[:stage]} - #{@options[:build_version]}"
|
|
186
|
+
@parsed[:package_config][:out_file] = out_file_path
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
def update_build_config
|
|
191
|
+
@parsed[:build_config][:out_file] = out_file_path if @parsed[:build_config]
|
|
192
|
+
end
|
|
193
|
+
|
|
194
|
+
def update_sideload_config
|
|
195
|
+
if @parsed[:sideload_config] and @options[:out]
|
|
196
|
+
@parsed[:sideload_config][:out_file] = out_file_path
|
|
197
|
+
end
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
def update_inspect_config
|
|
201
|
+
if @parsed[:inspect_config] and @parsed[:package_config]
|
|
202
|
+
@parsed[:inspect_config][:pkg] = @parsed[:package_config][:out_file]
|
|
203
|
+
end
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def out_file_path
|
|
207
|
+
unless @parsed[:out][:file]
|
|
208
|
+
@parsed[:out][:file] = "#{@parsed[:project_config][:app_name]}_#{@parsed[:stage]}_#{@options[:build_version]}"
|
|
209
|
+
end
|
|
210
|
+
File.join(@parsed[:out][:folder], @parsed[:out][:file])
|
|
211
|
+
end
|
|
212
|
+
end
|
|
213
|
+
end
|
|
@@ -2,312 +2,349 @@
|
|
|
2
2
|
|
|
3
3
|
module RokuBuilder
|
|
4
4
|
|
|
5
|
-
# Contains methods that will parse the loaded config and generate
|
|
6
|
-
# intermeidate configs for each of the tools.
|
|
7
5
|
class ConfigParser
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
options
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
path.descend do |path_parent|
|
|
59
|
-
if path_parent == repo_path
|
|
60
|
-
project = key
|
|
61
|
-
break
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
break if project
|
|
65
|
-
end
|
|
66
|
-
}
|
|
7
|
+
attr_reader :parsed
|
|
8
|
+
|
|
9
|
+
def self.parse(options:, config:)
|
|
10
|
+
parser = new(options: options, config: config)
|
|
11
|
+
parser.parsed
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def initialize(options:, config:)
|
|
15
|
+
@logger = Logger.instance
|
|
16
|
+
@options = options
|
|
17
|
+
@config = config
|
|
18
|
+
@parsed = {init_params: {}}
|
|
19
|
+
parse_config
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def parse_config
|
|
23
|
+
process_in_argument
|
|
24
|
+
setup_device
|
|
25
|
+
setup_project
|
|
26
|
+
setup_outfile
|
|
27
|
+
setup_project_config
|
|
28
|
+
setup_stage_config
|
|
29
|
+
setup_sideload_config
|
|
30
|
+
setup_package_config
|
|
31
|
+
setup_monitor_configs
|
|
32
|
+
setup_navigate_configs
|
|
33
|
+
setup_manifest_config
|
|
34
|
+
setup_deeplink_configs
|
|
35
|
+
setup_text_configs
|
|
36
|
+
setup_test_configs
|
|
37
|
+
setup_screencapture_configs
|
|
38
|
+
setup_screen_config
|
|
39
|
+
setup_profiler_configs
|
|
40
|
+
setup_genkey_configs
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def process_in_argument
|
|
44
|
+
@options[:in] = File.expand_path(@options[:in]) if @options[:in]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def setup_device
|
|
48
|
+
@options[:device] = @config[:devices][:default] unless @options[:device]
|
|
49
|
+
@parsed[:device_config] = @config[:devices][@options[:device].to_sym]
|
|
50
|
+
raise ArgumentError, "Unknown device: #{@options[:device]}" unless @parsed[:device_config]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def setup_project
|
|
54
|
+
if project_required and not @options[:project]
|
|
55
|
+
project = current_project
|
|
67
56
|
if project
|
|
68
|
-
options[:project] = project
|
|
57
|
+
@options[:project] = project
|
|
69
58
|
else
|
|
70
|
-
options[:project] = config[:projects][:default]
|
|
59
|
+
@options[:project] = @config[:projects][:default]
|
|
71
60
|
end
|
|
72
61
|
end
|
|
73
62
|
end
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
63
|
+
|
|
64
|
+
def project_required
|
|
65
|
+
non_project_source = ([:current, :in] & @options.keys).count > 0
|
|
66
|
+
@options.source_command? and not non_project_source
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def current_project
|
|
70
|
+
@config[:projects].each_pair do |key,value|
|
|
71
|
+
return key if is_current_project?(project_config: value)
|
|
72
|
+
end
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def is_current_project?(project_config:)
|
|
77
|
+
return false unless project_config.is_a?(Hash)
|
|
78
|
+
repo_path = get_repo_path(project_config: project_config)
|
|
79
|
+
Pathname.pwd.descend do |path_parent|
|
|
80
|
+
return true if path_parent == repo_path
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def get_repo_path(project_config:)
|
|
85
|
+
if @config[:projects][:project_dir]
|
|
86
|
+
Pathname.new(File.join(@config[:projects][:project_dir], project_config[:directory])).realdirpath
|
|
87
|
+
else
|
|
88
|
+
Pathname.new(project_config[:directory]).realdirpath
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def setup_outfile
|
|
93
|
+
@parsed[:out] = {file: nil, folder: nil}
|
|
94
|
+
if @options[:out]
|
|
95
|
+
if out_file_defined?
|
|
96
|
+
setup_outfile_and_folder
|
|
88
97
|
else
|
|
89
|
-
|
|
98
|
+
@parsed[:out][:folder] = @options[:out]
|
|
90
99
|
end
|
|
91
100
|
end
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
set_default_outfile
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def out_file_defined?
|
|
105
|
+
@options[:out].end_with?(".zip") or @options[:out].end_with?(".pkg") or @options[:out].end_with?(".jpg")
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def setup_outfile_and_folder
|
|
109
|
+
@parsed[:out][:folder], @parsed[:out][:file] = Pathname.new(@options[:out]).split.map{|p| p.to_s}
|
|
110
|
+
if @parsed[:out][:folder] == "." and not @options[:out].start_with?(".")
|
|
111
|
+
@parsed[:out][:folder] = nil
|
|
112
|
+
else
|
|
113
|
+
@parsed[:out][:folder] = File.expand_path(@parsed[:out][:folder])
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def set_default_outfile
|
|
118
|
+
unless @parsed[:out][:folder]
|
|
119
|
+
@parsed[:out][:folder] = Dir.tmpdir
|
|
94
120
|
end
|
|
95
121
|
end
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if options[:current]
|
|
106
|
-
pwd = Pathname.pwd.to_s
|
|
107
|
-
return MISSING_MANIFEST unless File.exist?(File.join(pwd, "manifest"))
|
|
108
|
-
project_config = {
|
|
109
|
-
directory: pwd,
|
|
110
|
-
folders: nil,
|
|
111
|
-
files: nil,
|
|
112
|
-
stage_method: :current
|
|
113
|
-
}
|
|
114
|
-
elsif project_required(options: options)
|
|
115
|
-
project_config = config[:projects][options[:project].to_sym]
|
|
116
|
-
return UNKNOWN_PROJECT unless project_config
|
|
117
|
-
if config[:projects][:project_dir]
|
|
118
|
-
project_config[:directory] = File.join(config[:projects][:project_dir], project_config[:directory])
|
|
119
|
-
end
|
|
120
|
-
return BAD_PROJECT_DIR unless Dir.exist?(project_config[:directory])
|
|
121
|
-
project_config[:stage_method] = :working if options[:working]
|
|
122
|
+
|
|
123
|
+
def setup_project_config
|
|
124
|
+
if @options[:current]
|
|
125
|
+
stub_project_config_for_current
|
|
126
|
+
elsif project_required
|
|
127
|
+
@parsed[:project_config] = @config[:projects][@options[:project].to_sym]
|
|
128
|
+
raise ParseError, "Unknown Project: #{@options[:project]}" unless @parsed[:project_config]
|
|
129
|
+
set_project_directory
|
|
130
|
+
check_for_working
|
|
122
131
|
end
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
# @param options [Hash] The options hash
|
|
140
|
-
# @return [Hash] The stage config hash
|
|
141
|
-
def self.setup_stage_config(configs:, options:, logger:)
|
|
142
|
-
stage_config = {logger: logger}
|
|
143
|
-
stage_config[:method] = ([:in, :current] & options.keys).first
|
|
144
|
-
stage = options[:stage].to_sym if options[:stage]
|
|
145
|
-
if project_required(options: options)
|
|
146
|
-
project_config = configs[:project_config]
|
|
147
|
-
stage ||= project_config[:stages].keys[0].to_sym
|
|
148
|
-
options[:stage] = stage
|
|
149
|
-
stage_config[:root_dir] = project_config[:directory]
|
|
150
|
-
stage_config[:method] = project_config[:stage_method]
|
|
151
|
-
stage_config[:method] ||= :git
|
|
152
|
-
case stage_config[:method]
|
|
153
|
-
when :git
|
|
154
|
-
if options[:ref]
|
|
155
|
-
stage_config[:key] = options[:ref]
|
|
156
|
-
else
|
|
157
|
-
return [nil, nil] unless project_config[:stages][stage]
|
|
158
|
-
stage_config[:key] = project_config[:stages][stage][:branch]
|
|
159
|
-
end
|
|
160
|
-
when :script
|
|
161
|
-
return [nil, nil] unless project_config[:stages][stage]
|
|
162
|
-
stage_config[:key] = project_config[:stages][stage][:script]
|
|
163
|
-
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def stub_project_config_for_current
|
|
135
|
+
pwd = Pathname.pwd.to_s
|
|
136
|
+
raise ParseError, "Missing Manifest" unless File.exist?(File.join(pwd, "manifest"))
|
|
137
|
+
@parsed[:project_config] = {
|
|
138
|
+
directory: pwd,
|
|
139
|
+
folders: nil,
|
|
140
|
+
files: nil,
|
|
141
|
+
stage_method: :current
|
|
142
|
+
}
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
def set_project_directory
|
|
146
|
+
if @config[:projects][:project_dir]
|
|
147
|
+
@parsed[:project_config][:directory] = File.join(@config[:projects][:project_dir], @parsed[:project_config][:directory])
|
|
164
148
|
end
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
149
|
+
unless Dir.exist?(@parsed[:project_config][:directory])
|
|
150
|
+
raise ParseError, "Missing project dirtectory: #{@parsed[:project_config][:dirtectory]}"
|
|
151
|
+
end
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
def check_for_working
|
|
155
|
+
@parsed[:project_config][:stage_method] = :working if @options[:working]
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
def setup_stage_config
|
|
160
|
+
setup_mininal_stage_configs
|
|
161
|
+
setup_project_stage_config if project_required
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def setup_mininal_stage_configs
|
|
165
|
+
@parsed[:stage_config] = {}
|
|
166
|
+
@parsed[:stage_config][:method] = ([:in, :current] & @options.keys).first
|
|
167
|
+
@parsed[:stage] = @options[:stage].to_sym if @options[:stage]
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def setup_project_stage_config
|
|
171
|
+
@parsed[:stage] ||= @parsed[:project_config][:stages].keys[0].to_sym
|
|
172
|
+
@parsed[:stage_config][:root_dir] = @parsed[:project_config][:directory]
|
|
173
|
+
raise ParseError, "Unknown Stage: #{@parsed[:stage]}" unless @parsed[:project_config][:stages][@parsed[:stage]]
|
|
174
|
+
setup_staging_method
|
|
175
|
+
setup_staging_key
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
def setup_staging_method
|
|
179
|
+
@parsed[:stage_config][:method] = @parsed[:project_config][:stage_method]
|
|
180
|
+
unless [:git, :script, :current, :working].include? @parsed[:stage_config][:method]
|
|
181
|
+
raise ParseError, "Unknown Stage Method: #{@parsed[:stage_config][:method]}"
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
def setup_staging_key
|
|
186
|
+
case @parsed[:stage_config][:method]
|
|
187
|
+
when :git
|
|
188
|
+
if @options[:ref]
|
|
189
|
+
@parsed[:stage_config][:key] = @options[:ref]
|
|
190
|
+
else
|
|
191
|
+
@parsed[:stage_config][:key] = @parsed[:project_config][:stages][@parsed[:stage]][:branch]
|
|
185
192
|
end
|
|
193
|
+
when :script
|
|
194
|
+
@parsed[:stage_config][:key] = @parsed[:project_config][:stages][@parsed[:stage]][:script]
|
|
186
195
|
end
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
def setup_sideload_config
|
|
199
|
+
root_dir, content = setup_project_values
|
|
187
200
|
# Create Sideload Config
|
|
188
|
-
|
|
189
|
-
update_manifest: options[:update_manifest],
|
|
190
|
-
infile: options[:in],
|
|
201
|
+
@parsed[:sideload_config] = {
|
|
202
|
+
update_manifest: @options[:update_manifest],
|
|
203
|
+
infile: @options[:in],
|
|
191
204
|
content: content
|
|
192
205
|
}
|
|
193
206
|
# Create Build Config
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
if options[:package] or options[:key]
|
|
205
|
-
# Create Key Config
|
|
206
|
-
configs[:key] = configs[:project_config][:stages][stage][:key]
|
|
207
|
-
if configs[:key].class == String
|
|
208
|
-
configs[:key] = config[:keys][configs[:key].to_sym]
|
|
209
|
-
if config[:keys][:key_dir]
|
|
210
|
-
configs[:key][:keyed_pkg] = File.join(config[:keys][:key_dir], configs[:key][:keyed_pkg])
|
|
211
|
-
end
|
|
212
|
-
return BAD_KEY_FILE unless File.exist?(configs[:key][:keyed_pkg])
|
|
213
|
-
end
|
|
214
|
-
end
|
|
215
|
-
if options[:package]
|
|
216
|
-
# Create Package Config
|
|
217
|
-
configs[:package_config] = {
|
|
218
|
-
password: configs[:key][:password],
|
|
219
|
-
app_name_version: "#{configs[:project_config][:app_name]} - #{stage}"
|
|
220
|
-
}
|
|
221
|
-
# Create Inspector Config
|
|
222
|
-
configs[:inspect_config] = {
|
|
223
|
-
password: configs[:key][:password]
|
|
207
|
+
@parsed[:build_config] = { content: content }
|
|
208
|
+
@parsed[:init_params][:loader] = { root_dir: root_dir }
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
def setup_project_values
|
|
212
|
+
if @parsed[:project_config]
|
|
213
|
+
root_dir = @parsed[:project_config][:directory]
|
|
214
|
+
content = {
|
|
215
|
+
folders: @parsed[:project_config][:folders],
|
|
216
|
+
files: @parsed[:project_config][:files],
|
|
224
217
|
}
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
218
|
+
content[:excludes] = @parsed[:project_config][:excludes] if add_excludes?
|
|
219
|
+
[root_dir, content]
|
|
220
|
+
else
|
|
221
|
+
[nil, nil]
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
def add_excludes?
|
|
226
|
+
@options[:exclude] or @options.exclude_command?
|
|
227
|
+
end
|
|
228
|
+
|
|
229
|
+
def setup_package_config
|
|
230
|
+
setup_key_config if @options[:package] or @options[:key]
|
|
231
|
+
if @options[:package]
|
|
232
|
+
setup_package_config_hashes
|
|
233
|
+
setup_package_config_out_files
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
def setup_key_config
|
|
238
|
+
@parsed[:key] = @parsed[:project_config][:stages][@parsed[:stage]][:key]
|
|
239
|
+
get_global_key_config if @parsed[:key].class == String
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def get_global_key_config
|
|
243
|
+
raise ParseError, "Unknown Key: #{@parsed[:key]}" unless @config[:keys][@parsed[:key].to_sym]
|
|
244
|
+
@parsed[:key] = @config[:keys][@parsed[:key].to_sym]
|
|
245
|
+
if @config[:keys][:key_dir]
|
|
246
|
+
@parsed[:key][:keyed_pkg] = File.join(@config[:keys][:key_dir], @parsed[:key][:keyed_pkg])
|
|
229
247
|
end
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
248
|
+
unless File.exist?(@parsed[:key][:keyed_pkg])
|
|
249
|
+
raise ParseError, "Bad key file: #{@parsed[:key][:keyed_pkg]}"
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
def setup_package_config_hashes
|
|
254
|
+
@parsed[:package_config] = {
|
|
255
|
+
password: @parsed[:key][:password],
|
|
256
|
+
app_name_version: "#{@parsed[:project_config][:app_name]} - #{@parsed[:stage]}"
|
|
257
|
+
}
|
|
258
|
+
@parsed[:inspect_config] = {
|
|
259
|
+
password: @parsed[:key][:password]
|
|
260
|
+
}
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def setup_package_config_out_files
|
|
264
|
+
if @parsed[:out][:file]
|
|
265
|
+
@parsed[:package_config][:out_file] = File.join(@parsed[:out][:folder], @parsed[:out][:file])
|
|
266
|
+
@parsed[:inspect_config][:pkg] = File.join(@parsed[:out][:folder], @parsed[:out][:file])
|
|
267
|
+
end
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
def setup_monitor_configs
|
|
271
|
+
if @options[:monitor]
|
|
272
|
+
@parsed[:monitor_config] = {type: @options[:monitor].to_sym}
|
|
273
|
+
if @options[:regexp]
|
|
274
|
+
@parsed[:monitor_config][:regexp] = /#{@options[:regexp]}/
|
|
244
275
|
end
|
|
245
276
|
end
|
|
246
|
-
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def setup_navigate_configs
|
|
280
|
+
@parsed[:init_params][:navigator] = {mappings: generate_maggings}
|
|
281
|
+
if @options[:navigate]
|
|
282
|
+
@parsed[:navigate_config] = {
|
|
283
|
+
commands: @options[:navigate].split(/, */).map{|c| c.to_sym}
|
|
284
|
+
}
|
|
285
|
+
end
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def generate_maggings
|
|
247
289
|
mappings = {}
|
|
248
|
-
if config[:input_mapping]
|
|
249
|
-
config[:input_mapping].each_pair {|key, value|
|
|
290
|
+
if @config[:input_mapping]
|
|
291
|
+
@config[:input_mapping].each_pair {|key, value|
|
|
250
292
|
unless "".to_sym == key
|
|
251
293
|
key = key.to_s.sub(/\\e/, "\e").to_sym
|
|
252
294
|
mappings[key] = value
|
|
253
295
|
end
|
|
254
296
|
}
|
|
255
297
|
end
|
|
256
|
-
|
|
257
|
-
if options[:navigate]
|
|
258
|
-
commands = options[:navigate].split(/, */).map{|c| c.to_sym}
|
|
259
|
-
configs[:navigate_config] = {commands: commands}
|
|
260
|
-
end
|
|
298
|
+
mappings
|
|
261
299
|
end
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
# @param options [Hash] The options hash
|
|
267
|
-
# @param logger [Logger] System logger
|
|
268
|
-
def self.setup_manifest_configs(configs:, options:)
|
|
269
|
-
# Create Manifest Config
|
|
270
|
-
root_dir = configs[:project_config][:directory] if configs[:project_config]
|
|
271
|
-
root_dir = options[:in] if options[:in]
|
|
272
|
-
root_dir = Pathname.pwd.to_s if options[:current]
|
|
273
|
-
configs[:manifest_config] = {
|
|
274
|
-
root_dir: root_dir
|
|
300
|
+
|
|
301
|
+
def setup_manifest_config
|
|
302
|
+
@parsed[:manifest_config] = {
|
|
303
|
+
root_dir: get_root_dir
|
|
275
304
|
}
|
|
276
305
|
end
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
306
|
+
|
|
307
|
+
def get_root_dir
|
|
308
|
+
root_dir = @parsed[:project_config][:directory] if @parsed[:project_config]
|
|
309
|
+
root_dir = @options[:in] if @options[:in]
|
|
310
|
+
root_dir = Pathname.pwd.to_s if @options[:current]
|
|
311
|
+
root_dir
|
|
312
|
+
end if
|
|
313
|
+
|
|
314
|
+
def setup_deeplink_configs
|
|
315
|
+
@parsed[:deeplink_config] = {options: @options[:deeplink]}
|
|
316
|
+
if @options[:app_id]
|
|
317
|
+
@parsed[:deeplink_config][:app_id] = @options[:app_id]
|
|
288
318
|
end
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
319
|
+
end
|
|
320
|
+
def setup_text_configs
|
|
321
|
+
@parsed[:text_config] = {text: @options[:text]}
|
|
322
|
+
end
|
|
323
|
+
def setup_test_configs
|
|
324
|
+
@parsed[:test_config] = {sideload_config: @parsed[:sideload_config]}
|
|
325
|
+
@parsed[:init_params][:tester] = { root_dir: get_root_dir }
|
|
326
|
+
end
|
|
327
|
+
def setup_screencapture_configs
|
|
328
|
+
@parsed[:screencapture_config] = {
|
|
329
|
+
out_folder: @parsed[:out][:folder],
|
|
330
|
+
out_file: @parsed[:out][:file]
|
|
297
331
|
}
|
|
298
|
-
|
|
299
|
-
|
|
332
|
+
end
|
|
333
|
+
def setup_screen_config
|
|
334
|
+
if @options[:screen]
|
|
335
|
+
@parsed[:screen_config] = {type: @options[:screen].to_sym}
|
|
300
336
|
end
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
337
|
+
end
|
|
338
|
+
def setup_profiler_configs
|
|
339
|
+
if @options[:profile]
|
|
340
|
+
@parsed[:profiler_config] = {command: @options[:profile].to_sym}
|
|
304
341
|
end
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
342
|
+
end
|
|
343
|
+
def setup_genkey_configs
|
|
344
|
+
@parsed[:genkey] = {}
|
|
345
|
+
if @options[:out_file]
|
|
346
|
+
@parsed[:genkey][:out_file] = File.join(@options[:out_folder], @options[:out_file])
|
|
309
347
|
end
|
|
310
348
|
end
|
|
311
|
-
private_class_method :setup_simple_configs
|
|
312
349
|
end
|
|
313
350
|
end
|