roku_builder 3.4.1 → 3.4.2
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 +1 -1
- data/README.md +22 -5
- data/lib/roku_builder.rb +1 -0
- data/lib/roku_builder/config_parser.rb +5 -6
- data/lib/roku_builder/controller_commands.rb +63 -31
- data/lib/roku_builder/loader.rb +53 -64
- data/lib/roku_builder/version.rb +1 -1
- data/tests/roku_builder/controller_commands_test.rb +51 -13
- data/tests/roku_builder/loader_test.rb +1 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc0d1c23db3b41b36ad688f25bd7cf265bace489
|
4
|
+
data.tar.gz: 8f480837cb1cbe27b24453a3b81c5606d65aa28d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f0472ac3122318632449e8f257312211867da471632d14f53bc1845bd3bd47f3ef3d55606f9273b4adaa19a1dd0039baab6666de91ff7cb207e1876a771a1d9
|
7
|
+
data.tar.gz: 2d130f6dd27005b871c4ea0c318f45fb5871feb615b92ec54af119a0f9a26701c773fcf36aaf42c7a728ef407dc5f43d725721da265a00d9df75e955993ddbca
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -67,11 +67,15 @@ configuration options:
|
|
67
67
|
|
68
68
|
* directory: full path of the git repository the houses the roku app
|
69
69
|
* app_name: Name used when packaging the app
|
70
|
+
* stage_method: Which method to use for switching app stages (git or script)
|
70
71
|
* stages: a hash of stage objects
|
71
72
|
|
72
73
|
Each stage has the following options:
|
73
74
|
|
74
|
-
* branch: name of the branch for the given stage
|
75
|
+
* branch: name of the branch for the given stage (if stage_method = git)
|
76
|
+
* script: scripts to use to stage the app (if stage_method = script)
|
77
|
+
* script -> stage: script run form the app root directory to stage app
|
78
|
+
* script -> unstage: script run form the app root directory to unstage app
|
75
79
|
* key: has of key options for signing a package
|
76
80
|
* key -> keyed_pkg: path to a pkg file that has been signed
|
77
81
|
* key -> password: password for the signed pkg
|
@@ -240,9 +244,9 @@ This path will be expanded so you do not have to use the full path
|
|
240
244
|
## Projects
|
241
245
|
|
242
246
|
The project used in the above examples is a smart default. If you are in a
|
243
|
-
project directory then it will use that project. If you not then it will
|
244
|
-
the defualt that you have defined in your config. You can define what
|
245
|
-
you want the command to be run on using the --project option:
|
247
|
+
project directory then it will use that project. If you are not then it will
|
248
|
+
use the defualt that you have defined in your config. You can define what
|
249
|
+
project you want the command to be run on using the --project option:
|
246
250
|
|
247
251
|
$ roku -lw --project project1
|
248
252
|
|
@@ -250,6 +254,20 @@ or:
|
|
250
254
|
|
251
255
|
$ roku -lw -P project1
|
252
256
|
|
257
|
+
## Stages
|
258
|
+
|
259
|
+
Each project can have any number of stages. stages can be defined in a number
|
260
|
+
of ways. The default is to use git branches to define stages. You can setup a
|
261
|
+
branch for each stage and the gem will automatically switch between them as
|
262
|
+
needed. If using git stages then the gem will ensure to stash any change you
|
263
|
+
currently have before checking out the required branch. When done it will
|
264
|
+
switch back and unstash the changes. You can use the -w or --working options
|
265
|
+
to avoid this.
|
266
|
+
|
267
|
+
The other method of staging is script staging. This will run a script you
|
268
|
+
define before and after performing any actions. This will let you stage your
|
269
|
+
app anyway you like as long as it can be done via script.
|
270
|
+
|
253
271
|
## Devices
|
254
272
|
|
255
273
|
In the examples above the default device is used. If you have multiple devices
|
@@ -273,7 +291,6 @@ directory:
|
|
273
291
|
|
274
292
|
## Improvements
|
275
293
|
|
276
|
-
* Pull build number from correct stage
|
277
294
|
* Don't require a device for non device tasks
|
278
295
|
* Account for missing folders or files
|
279
296
|
* Increase testing
|
data/lib/roku_builder.rb
CHANGED
@@ -25,11 +25,10 @@ module RokuBuilder
|
|
25
25
|
return [UNKNOWN_DEVICE, nil, nil] unless configs[:device_config]
|
26
26
|
configs[:device_config][:logger] = logger
|
27
27
|
project_config = setup_project_config(config: config, options: options)
|
28
|
-
return [
|
28
|
+
return [project_config, nil, nil] unless project_config.class == Hash
|
29
29
|
configs[:project_config] = project_config
|
30
30
|
stage_config, stage = setup_stage_config(configs: configs, options: options, logger: logger)
|
31
31
|
return [UNKNOWN_STAGE, nil, nil] unless stage
|
32
|
-
configs[:stage_config] = stage_config
|
33
32
|
setup_sideload_config(configs: configs, options: options)
|
34
33
|
setup_package_config(configs: configs, options: options, stage: stage)
|
35
34
|
setup_simple_configs(configs: configs, options: options, logger: logger)
|
@@ -88,7 +87,7 @@ module RokuBuilder
|
|
88
87
|
project_config = {}
|
89
88
|
if options[:current]
|
90
89
|
pwd = Controller.system(command: "pwd")
|
91
|
-
return
|
90
|
+
return MISSING_MANIFEST unless File.exist?(File.join(pwd, "manifest"))
|
92
91
|
project_config = {
|
93
92
|
directory: pwd,
|
94
93
|
folders: nil,
|
@@ -97,6 +96,7 @@ module RokuBuilder
|
|
97
96
|
}
|
98
97
|
else
|
99
98
|
project_config = config[:projects][options[:project].to_sym]
|
99
|
+
return UNKNOWN_PROJECT unless project_config
|
100
100
|
project_config[:stage_method] = :working if options[:working]
|
101
101
|
end
|
102
102
|
project_config
|
@@ -126,7 +126,8 @@ module RokuBuilder
|
|
126
126
|
return nil unless project_config[:stages][stage]
|
127
127
|
stage_config[:key] = project_config[:stages][stage][:script]
|
128
128
|
end
|
129
|
-
configs[:
|
129
|
+
configs[:stage_config] = stage_config
|
130
|
+
configs[:stage] = stage
|
130
131
|
[stage_config, stage]
|
131
132
|
end
|
132
133
|
|
@@ -138,14 +139,12 @@ module RokuBuilder
|
|
138
139
|
root_dir = configs[:project_config][:directory]
|
139
140
|
# Create Sideload Config
|
140
141
|
configs[:sideload_config] = {
|
141
|
-
stage: configs[:stage_config],
|
142
142
|
update_manifest: options[:update_manifest],
|
143
143
|
folders: configs[:project_config][:folders],
|
144
144
|
files: configs[:project_config][:files]
|
145
145
|
}
|
146
146
|
# Create Build Config
|
147
147
|
configs[:build_config] = {
|
148
|
-
stage: configs[:stage_config],
|
149
148
|
folders: configs[:project_config][:folders],
|
150
149
|
files: configs[:project_config][:files]
|
151
150
|
}
|
@@ -8,8 +8,6 @@ module RokuBuilder
|
|
8
8
|
# @return [Hash] options to run simple commands
|
9
9
|
def self.simple_commands
|
10
10
|
{
|
11
|
-
sideload: { klass: Loader, method: :sideload, config_key: :sideload_config,
|
12
|
-
failure: FAILED_SIDELOAD },
|
13
11
|
deeplink: { klass: Linker, method: :link, config_key: :deeplink_config,
|
14
12
|
failure: FAILED_DEEPLINKING },
|
15
13
|
delete: { klass: Loader, method: :unload },
|
@@ -31,37 +29,61 @@ module RokuBuilder
|
|
31
29
|
def self.validate()
|
32
30
|
SUCCESS
|
33
31
|
end
|
32
|
+
# Run Sideload
|
33
|
+
# @param options [Hash] user options
|
34
|
+
# @param configs [Hash] parsed configs
|
35
|
+
# @param logger [Logger] system logger
|
36
|
+
# @return [Integer] Success or Failure Code
|
37
|
+
def self.sideload(options:, configs:, logger:)
|
38
|
+
config = configs[:device_config].dup
|
39
|
+
config[:init_params] = configs[:init_params][:loader]
|
40
|
+
stager = Stager.new(**configs[:stage_config])
|
41
|
+
success = false
|
42
|
+
if stager.stage
|
43
|
+
loader = Loader.new(**config)
|
44
|
+
success = loader.sideload(**configs[:sideload_config])
|
45
|
+
end
|
46
|
+
stager.unstage
|
47
|
+
return FAILED_SIDELOAD unless success
|
48
|
+
SUCCESS
|
49
|
+
end
|
34
50
|
# Run Package
|
35
51
|
# @param options [Hash] user options
|
36
52
|
# @param configs [Hash] parsed configs
|
37
53
|
# @param logger [Logger] system logger
|
38
54
|
# @return [Integer] Success or Failure Code
|
39
55
|
def self.package(options:, configs:, logger:)
|
56
|
+
loader_config = configs[:device_config].dup
|
57
|
+
loader_config[:init_params] = configs[:init_params][:loader]
|
40
58
|
keyer = Keyer.new(**configs[:device_config])
|
41
|
-
|
59
|
+
stager = Stager.new(**configs[:stage_config])
|
60
|
+
loader = Loader.new(**loader_config)
|
42
61
|
packager = Packager.new(**configs[:device_config])
|
43
62
|
inspector = Inspector.new(**configs[:device_config])
|
44
63
|
logger.warn "Packaging working directory" if options[:working]
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
+
if stager.stage
|
65
|
+
# Sideload #
|
66
|
+
build_version = loader.sideload(**configs[:sideload_config])
|
67
|
+
return FAILED_SIGNING unless build_version
|
68
|
+
# Key #
|
69
|
+
success = keyer.rekey(**configs[:key])
|
70
|
+
logger.info "Key did not change" unless success
|
71
|
+
# Package #
|
72
|
+
options[:build_version] = build_version
|
73
|
+
configs = ConfigManager.update_configs(configs: configs, options: options)
|
74
|
+
success = packager.package(**configs[:package_config])
|
75
|
+
logger.info "Signing Successful: #{configs[:package_config][:out_file]}" if success
|
76
|
+
return FAILED_SIGNING unless success
|
77
|
+
# Inspect #
|
78
|
+
if options[:inspect]
|
79
|
+
info = inspector.inspect(configs[:inspect_config])
|
80
|
+
logger.unknown "App Name: #{info[:app_name]}"
|
81
|
+
logger.unknown "Dev ID: #{info[:dev_id]}"
|
82
|
+
logger.unknown "Creation Date: #{info[:creation_date]}"
|
83
|
+
logger.unknown "dev.zip: #{info[:dev_zip]}"
|
84
|
+
end
|
64
85
|
end
|
86
|
+
stager.unstage
|
65
87
|
SUCCESS
|
66
88
|
end
|
67
89
|
# Run Build
|
@@ -71,12 +93,18 @@ module RokuBuilder
|
|
71
93
|
# @return [Integer] Success or Failure Code
|
72
94
|
def self.build(options:, configs:, logger:)
|
73
95
|
### Build ###
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
96
|
+
loader_config = configs[:device_config].dup
|
97
|
+
loader_config[:init_params] = configs[:init_params][:loader]
|
98
|
+
stager = Stager.new(**configs[:stage_config])
|
99
|
+
loader = Loader.new(**loader_config)
|
100
|
+
if stager.stage
|
101
|
+
build_version = ManifestManager.build_version(**configs[:manifest_config])
|
102
|
+
options[:build_version] = build_version
|
103
|
+
configs = ConfigManager.update_configs(configs: configs, options: options)
|
104
|
+
outfile = loader.build(**configs[:build_config])
|
105
|
+
logger.info "Build: #{outfile}"
|
106
|
+
end
|
107
|
+
stager.unstage
|
80
108
|
SUCCESS
|
81
109
|
end
|
82
110
|
# Run update
|
@@ -85,9 +113,13 @@ module RokuBuilder
|
|
85
113
|
# @return [Integer] Success or Failure Code
|
86
114
|
def self.update(configs:, logger:)
|
87
115
|
### Update ###
|
88
|
-
|
89
|
-
|
90
|
-
|
116
|
+
stager = Stager.new(**configs[:stage_config])
|
117
|
+
if stager.stage
|
118
|
+
old_version = ManifestManager.build_version(**configs[:manifest_config])
|
119
|
+
new_version = ManifestManager.update_build(**configs[:manifest_config])
|
120
|
+
logger.info "Update build version from:\n#{old_version}\nto:\n#{new_version}"
|
121
|
+
end
|
122
|
+
stager.unstage
|
91
123
|
SUCCESS
|
92
124
|
end
|
93
125
|
|
data/lib/roku_builder/loader.rb
CHANGED
@@ -11,92 +11,81 @@ module RokuBuilder
|
|
11
11
|
|
12
12
|
# Sideload an app onto a roku device
|
13
13
|
# @param root_dir [String] Path to the root directory of the roku app
|
14
|
-
# @param stage [Hash] stage to use for sideloading.
|
15
|
-
# @param update_manifest [Boolean] Flag to update the manifest file before sideloading. Default: false
|
16
14
|
# @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
|
17
15
|
# @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
|
18
16
|
# @return [String] Build version on success, nil otherwise
|
19
|
-
def sideload(
|
17
|
+
def sideload(update_manifest: false, folders: nil, files: nil)
|
20
18
|
result = nil
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
build_version =
|
25
|
-
|
26
|
-
|
27
|
-
else
|
28
|
-
build_version = ManifestManager.build_version(root_dir: @root_dir)
|
29
|
-
end
|
30
|
-
outfile = build(stage: stage, build_version: build_version, folders: folders, files: files)
|
31
|
-
path = "/plugin_install"
|
32
|
-
# Connect to roku and upload file
|
33
|
-
conn = multipart_connection
|
34
|
-
payload = {
|
35
|
-
mysubmit: "Replace",
|
36
|
-
archive: Faraday::UploadIO.new(outfile, 'application/zip')
|
37
|
-
}
|
38
|
-
response = conn.post path, payload
|
39
|
-
# Cleanup
|
40
|
-
File.delete(outfile)
|
41
|
-
result = build_version if response.status==200 and response.body=~/Install Success/
|
19
|
+
# Update manifest
|
20
|
+
build_version = ""
|
21
|
+
if update_manifest
|
22
|
+
build_version = ManifestManager.update_build(root_dir: @root_dir)
|
23
|
+
else
|
24
|
+
build_version = ManifestManager.build_version(root_dir: @root_dir)
|
42
25
|
end
|
43
|
-
|
44
|
-
|
26
|
+
outfile = build(build_version: build_version, folders: folders, files: files)
|
27
|
+
path = "/plugin_install"
|
28
|
+
# Connect to roku and upload file
|
29
|
+
conn = multipart_connection
|
30
|
+
payload = {
|
31
|
+
mysubmit: "Replace",
|
32
|
+
archive: Faraday::UploadIO.new(outfile, 'application/zip')
|
33
|
+
}
|
34
|
+
response = conn.post path, payload
|
35
|
+
# Cleanup
|
36
|
+
File.delete(outfile)
|
37
|
+
result = build_version if response.status==200 and response.body=~/Install Success/
|
38
|
+
result
|
45
39
|
end
|
46
40
|
|
47
41
|
|
48
42
|
# Build an app to sideload later
|
49
43
|
# @param root_dir [String] Path to the root directory of the roku app
|
50
|
-
# @param stage [Hash] stage to use for sideloading.
|
51
44
|
# @param build_version [String] Version to assigne to the build. If nil will pull the build version form the manifest. Default: nil
|
52
45
|
# @param outfile [String] Path for the output file. If nil will create a file in /tmp. Default: nil
|
53
46
|
# @param folders [Array<String>] Array of folders to be sideloaded. Pass nil to send all folders. Default: nil
|
54
47
|
# @param files [Array<String>] Array of files to be sideloaded. Pass nil to send all files. Default: nil
|
55
48
|
# @return [String] Path of the build
|
56
|
-
def build(
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
unless folders
|
61
|
-
folders = Dir.entries(@root_dir).select {|entry| File.directory? File.join(@root_dir, entry) and !(entry =='.' || entry == '..') }
|
62
|
-
end
|
63
|
-
unless files
|
64
|
-
files = Dir.entries(@root_dir).select {|entry| File.file? File.join(@root_dir, entry)}
|
65
|
-
end
|
66
|
-
outfile = "/tmp/build_#{build_version}.zip" unless outfile
|
67
|
-
File.delete(outfile) if File.exist?(outfile)
|
68
|
-
io = Zip::File.open(outfile, Zip::File::CREATE)
|
69
|
-
# Add folders to zip
|
70
|
-
folders.each do |folder|
|
71
|
-
base_folder = File.join(@root_dir, folder)
|
72
|
-
entries = Dir.entries(base_folder)
|
73
|
-
entries.delete(".")
|
74
|
-
entries.delete("..")
|
75
|
-
writeEntries(@root_dir, entries, folder, io)
|
76
|
-
end
|
77
|
-
# Add file to zip
|
78
|
-
writeEntries(@root_dir, files, "", io)
|
79
|
-
io.close()
|
49
|
+
def build(build_version: nil, outfile: nil, folders: nil, files: nil)
|
50
|
+
build_version = ManifestManager.build_version(root_dir: @root_dir) unless build_version
|
51
|
+
unless folders
|
52
|
+
folders = Dir.entries(@root_dir).select {|entry| File.directory? File.join(@root_dir, entry) and !(entry =='.' || entry == '..') }
|
80
53
|
end
|
81
|
-
|
54
|
+
unless files
|
55
|
+
files = Dir.entries(@root_dir).select {|entry| File.file? File.join(@root_dir, entry)}
|
56
|
+
end
|
57
|
+
outfile = "/tmp/build_#{build_version}.zip" unless outfile
|
58
|
+
File.delete(outfile) if File.exist?(outfile)
|
59
|
+
io = Zip::File.open(outfile, Zip::File::CREATE)
|
60
|
+
# Add folders to zip
|
61
|
+
folders.each do |folder|
|
62
|
+
base_folder = File.join(@root_dir, folder)
|
63
|
+
entries = Dir.entries(base_folder)
|
64
|
+
entries.delete(".")
|
65
|
+
entries.delete("..")
|
66
|
+
writeEntries(@root_dir, entries, folder, io)
|
67
|
+
end
|
68
|
+
# Add file to zip
|
69
|
+
writeEntries(@root_dir, files, "", io)
|
70
|
+
io.close()
|
82
71
|
outfile
|
83
72
|
end
|
84
73
|
|
85
74
|
# Remove the currently sideloaded app
|
86
75
|
def unload()
|
87
|
-
|
76
|
+
path = "/plugin_install"
|
88
77
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
78
|
+
# Connect to roku and upload file
|
79
|
+
conn = multipart_connection
|
80
|
+
payload = {
|
81
|
+
mysubmit: "Delete",
|
82
|
+
archive: ""
|
83
|
+
}
|
84
|
+
response = conn.post path, payload
|
85
|
+
if response.status == 200 and response.body =~ /Install Success/
|
86
|
+
return true
|
87
|
+
end
|
88
|
+
return false
|
100
89
|
end
|
101
90
|
|
102
91
|
private
|
data/lib/roku_builder/version.rb
CHANGED
@@ -5,31 +5,44 @@ class ControllerCommandsTest < Minitest::Test
|
|
5
5
|
def test_controller_commands_sideload
|
6
6
|
logger = Logger.new("/dev/null")
|
7
7
|
loader = Minitest::Mock.new
|
8
|
+
stager = Minitest::Mock.new
|
8
9
|
|
9
10
|
options = {sideload: true, stage: 'production', config: "~/.roku_config.rb"}
|
10
11
|
config = good_config
|
11
12
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
12
13
|
# Test Success
|
13
14
|
loader.expect(:sideload, true, [configs[:sideload_config]])
|
15
|
+
stager.expect(:stage, true)
|
16
|
+
stager.expect(:unstage, true)
|
17
|
+
|
14
18
|
RokuBuilder::Loader.stub(:new, loader) do
|
15
|
-
|
19
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
20
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
21
|
+
end
|
16
22
|
end
|
17
23
|
assert_equal RokuBuilder::SUCCESS, code
|
18
24
|
|
25
|
+
stager.expect(:stage, true)
|
26
|
+
stager.expect(:unstage, true)
|
27
|
+
|
19
28
|
# Test Failure
|
20
29
|
loader.expect(:sideload, false, [configs[:sideload_config]])
|
21
30
|
RokuBuilder::Loader.stub(:new, loader) do
|
22
|
-
|
31
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
32
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
33
|
+
end
|
23
34
|
end
|
24
35
|
assert_equal RokuBuilder::FAILED_SIDELOAD, code
|
25
36
|
|
26
37
|
loader.verify
|
38
|
+
stager.verify
|
27
39
|
end
|
28
40
|
|
29
41
|
def test_controller_commands_package
|
30
42
|
logger = Logger.new("/dev/null")
|
31
43
|
keyer = Minitest::Mock.new
|
32
44
|
loader = Minitest::Mock.new
|
45
|
+
stager = Minitest::Mock.new
|
33
46
|
packager = Minitest::Mock.new
|
34
47
|
inspector = Minitest::Mock.new
|
35
48
|
|
@@ -42,13 +55,17 @@ class ControllerCommandsTest < Minitest::Test
|
|
42
55
|
keyer.expect(:rekey, true, [configs[:key]])
|
43
56
|
packager.expect(:package, true, [configs[:package_config]])
|
44
57
|
inspector.expect(:inspect, info, [configs[:inspect_config]])
|
58
|
+
stager.expect(:stage, true)
|
59
|
+
stager.expect(:unstage, true)
|
45
60
|
|
46
61
|
code = nil
|
47
62
|
RokuBuilder::Keyer.stub(:new, keyer) do
|
48
63
|
RokuBuilder::Loader.stub(:new, loader) do
|
49
64
|
RokuBuilder::Packager.stub(:new, packager) do
|
50
65
|
RokuBuilder::Inspector.stub(:new, inspector) do
|
51
|
-
|
66
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
67
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
68
|
+
end
|
52
69
|
end
|
53
70
|
end
|
54
71
|
end
|
@@ -57,6 +74,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
57
74
|
|
58
75
|
keyer.verify
|
59
76
|
loader.verify
|
77
|
+
stager.verify
|
60
78
|
packager.verify
|
61
79
|
inspector.verify
|
62
80
|
end
|
@@ -65,6 +83,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
65
83
|
logger = Logger.new("/dev/null")
|
66
84
|
keyer = Minitest::Mock.new
|
67
85
|
loader = Minitest::Mock.new
|
86
|
+
stager = Minitest::Mock.new
|
68
87
|
packager = Minitest::Mock.new
|
69
88
|
inspector = Minitest::Mock.new
|
70
89
|
|
@@ -77,13 +96,17 @@ class ControllerCommandsTest < Minitest::Test
|
|
77
96
|
keyer.expect(:rekey, true, [configs[:key]])
|
78
97
|
packager.expect(:package, true, [configs[:package_config]])
|
79
98
|
inspector.expect(:inspect, info, [configs[:inspect_config]])
|
99
|
+
stager.expect(:stage, true)
|
100
|
+
stager.expect(:unstage, true)
|
80
101
|
|
81
102
|
code = nil
|
82
103
|
RokuBuilder::Keyer.stub(:new, keyer) do
|
83
104
|
RokuBuilder::Loader.stub(:new, loader) do
|
84
105
|
RokuBuilder::Packager.stub(:new, packager) do
|
85
106
|
RokuBuilder::Inspector.stub(:new, inspector) do
|
86
|
-
|
107
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
108
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
109
|
+
end
|
87
110
|
end
|
88
111
|
end
|
89
112
|
end
|
@@ -92,6 +115,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
92
115
|
|
93
116
|
keyer.verify
|
94
117
|
loader.verify
|
118
|
+
stager.verify
|
95
119
|
packager.verify
|
96
120
|
inspector.verify
|
97
121
|
end
|
@@ -99,36 +123,50 @@ class ControllerCommandsTest < Minitest::Test
|
|
99
123
|
def test_controller_commands_build
|
100
124
|
logger = Logger.new("/dev/null")
|
101
125
|
loader = Minitest::Mock.new
|
126
|
+
stager = Minitest::Mock.new
|
102
127
|
|
103
128
|
code = nil
|
104
129
|
options = {build: true, stage: 'production', out_folder: "/tmp", config: "~/.roku_config.json"}
|
105
130
|
config = good_config
|
106
131
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
107
132
|
loader.expect(:build, "/tmp/build", [configs[:build_config]])
|
133
|
+
stager.expect(:stage, true)
|
134
|
+
stager.expect(:unstage, true)
|
135
|
+
|
108
136
|
RokuBuilder::Loader.stub(:new, loader) do
|
109
137
|
RokuBuilder::ManifestManager.stub(:build_version, "1") do
|
110
|
-
|
138
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
139
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
140
|
+
end
|
111
141
|
end
|
112
142
|
end
|
113
143
|
assert_equal RokuBuilder::SUCCESS, code
|
114
144
|
loader.verify
|
145
|
+
stager.verify
|
115
146
|
end
|
116
147
|
def test_controller_commands_update
|
117
148
|
logger = Logger.new("/dev/null")
|
118
149
|
mock = Minitest::Mock.new
|
150
|
+
stager = Minitest::Mock.new
|
119
151
|
|
120
152
|
code = nil
|
121
|
-
options = {update: true, stage: 'production', out_folder: "/tmp", config: "
|
153
|
+
options = {update: true, stage: 'production', out_folder: "/tmp", config: "~/.roku_config.json"}
|
122
154
|
config = good_config
|
123
155
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
124
156
|
mock.expect(:call, "1", [configs[:manifest_config]])
|
125
157
|
mock.expect(:call, "2", [configs[:manifest_config]])
|
158
|
+
stager.expect(:stage, true)
|
159
|
+
stager.expect(:unstage, true)
|
160
|
+
|
126
161
|
RokuBuilder::ManifestManager.stub(:build_version, mock) do
|
127
162
|
RokuBuilder::ManifestManager.stub(:update_build, mock) do
|
128
|
-
|
163
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
164
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, config: config, configs: configs, logger: logger})
|
165
|
+
end
|
129
166
|
end
|
130
167
|
end
|
131
168
|
mock.verify
|
169
|
+
stager.verify
|
132
170
|
assert_equal RokuBuilder::SUCCESS, code
|
133
171
|
end
|
134
172
|
|
@@ -137,7 +175,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
137
175
|
mock = Minitest::Mock.new
|
138
176
|
|
139
177
|
code = nil
|
140
|
-
options = {deeplink: true, stage: 'production', deeplink_options: "a:b", config: "
|
178
|
+
options = {deeplink: true, stage: 'production', deeplink_options: "a:b", config: "~/.roku_config.json"}
|
141
179
|
config = good_config
|
142
180
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
143
181
|
mock.expect(:link, "true", [configs[:deeplink_config]])
|
@@ -151,7 +189,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
151
189
|
logger = Logger.new("/dev/null")
|
152
190
|
loader = Minitest::Mock.new
|
153
191
|
|
154
|
-
options = {delete: true, stage: 'production', config: "
|
192
|
+
options = {delete: true, stage: 'production', config: "~/.roku_config.json"}
|
155
193
|
config = good_config
|
156
194
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
157
195
|
loader.expect(:unload, nil)
|
@@ -168,7 +206,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
168
206
|
logger = Logger.new("/dev/null")
|
169
207
|
monitor = Minitest::Mock.new
|
170
208
|
|
171
|
-
options = {monitor: "main", stage: 'production', config: "
|
209
|
+
options = {monitor: "main", stage: 'production', config: "~/.roku_config.json"}
|
172
210
|
config = good_config
|
173
211
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
174
212
|
monitor.expect(:monitor, nil, [configs[:monitor_config]])
|
@@ -260,7 +298,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
260
298
|
logger = Logger.new("/dev/null")
|
261
299
|
tester = Minitest::Mock.new
|
262
300
|
|
263
|
-
options = {test: true, stage: 'production', config: "
|
301
|
+
options = {test: true, stage: 'production', config: "~/.roku_config.json"}
|
264
302
|
config = good_config
|
265
303
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
266
304
|
tester.expect(:run_tests, true, [configs[:test_config]])
|
@@ -275,7 +313,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
275
313
|
logger = Logger.new("/dev/null")
|
276
314
|
inspector = Minitest::Mock.new
|
277
315
|
|
278
|
-
options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: "
|
316
|
+
options = {screencapture: true, stage: 'production', out: "/tmp/capture.jpg", config: "~/.roku_config.json"}
|
279
317
|
config = good_config
|
280
318
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
281
319
|
inspector.expect(:screencapture, true, [configs[:screencapture_config]])
|
@@ -290,7 +328,7 @@ class ControllerCommandsTest < Minitest::Test
|
|
290
328
|
logger = Logger.new("/dev/null")
|
291
329
|
inspector = Minitest::Mock.new
|
292
330
|
|
293
|
-
options = {screencapture: true, stage: 'production', out: "/tmp", config: "
|
331
|
+
options = {screencapture: true, stage: 'production', out: "/tmp", config: "~/.roku_config.json"}
|
294
332
|
config = good_config
|
295
333
|
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
296
334
|
inspector.expect(:screencapture, false, [configs[:screencapture_config]])
|
@@ -17,7 +17,6 @@ class LoaderTest < Minitest::Test
|
|
17
17
|
init_params: {root_dir: root_dir}
|
18
18
|
}
|
19
19
|
loader_config = {
|
20
|
-
stage: {method: :working, root_dir: root_dir, logger: logger},
|
21
20
|
folders: ["source"],
|
22
21
|
files: ["manifest"]
|
23
22
|
}
|
@@ -77,7 +76,6 @@ class LoaderTest < Minitest::Test
|
|
77
76
|
init_params: {root_dir: root_dir}
|
78
77
|
}
|
79
78
|
loader_config = {
|
80
|
-
stage: {method: :working, root_dir: root_dir, logger: logger},
|
81
79
|
update_manifest: true,
|
82
80
|
folders: ["source"],
|
83
81
|
files: ["manifest"]
|
@@ -134,7 +132,6 @@ class LoaderTest < Minitest::Test
|
|
134
132
|
init_params: {root_dir: root_dir}
|
135
133
|
}
|
136
134
|
build_config = {
|
137
|
-
stage: {method: :working, root_dir: root_dir, logger: logger},
|
138
135
|
folders: ["source"],
|
139
136
|
files: ["manifest"]
|
140
137
|
}
|
@@ -160,7 +157,7 @@ class LoaderTest < Minitest::Test
|
|
160
157
|
logger: logger,
|
161
158
|
init_params: {root_dir: root_dir}
|
162
159
|
}
|
163
|
-
build_config = {
|
160
|
+
build_config = {}
|
164
161
|
loader = RokuBuilder::Loader.new(**device_config)
|
165
162
|
outfile = nil
|
166
163
|
RokuBuilder::ManifestManager.stub(:build_version, "build_version") do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roku_builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.4.
|
4
|
+
version: 3.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- greeneca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-04-
|
11
|
+
date: 2016-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|