roku_builder 4.16.1 → 4.17.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/CHANGELOG +4 -0
- data/lib/roku_builder/hash.rb +7 -2
- data/lib/roku_builder/plugins/loader.rb +14 -1
- data/lib/roku_builder/plugins/packager.rb +3 -1
- data/lib/roku_builder/version.rb +1 -1
- data/test/roku_builder/plugins/test_loader.rb +18 -1
- data/test/roku_builder/plugins/test_packager.rb +48 -1
- 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: 0f330332e0ec4f1832974dee629495887c1f3be1
|
4
|
+
data.tar.gz: 3b3f9230bfaaffc212e746465754489efcf39bf3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 840ef1b935ba37594e9134b11736513b856add2e99741d5161f8b5fdd8c78e7b705ef25763eeedc838c1280777d9b639fbf2c983a60575ecf608910e0a3e5a1c
|
7
|
+
data.tar.gz: 18e06f83b9720f426c4ed6d2b4980b95692a0205f3747cd5405d2d28e2a34be66953e888d63aa32e447169be918d383dceae43e6b60ec3dbcb8c0902783a991f
|
data/CHANGELOG
CHANGED
data/lib/roku_builder/hash.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
|
2
2
|
|
3
3
|
class ::Hash
|
4
|
-
def
|
4
|
+
def deep_merger
|
5
5
|
merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
|
6
|
-
|
6
|
+
end
|
7
|
+
def deep_merge(second)
|
8
|
+
self.merge(second, &deep_merger)
|
9
|
+
end
|
10
|
+
def deep_merge!(second)
|
11
|
+
self.merge!(second, &deep_merger)
|
7
12
|
end
|
8
13
|
def deep_dup
|
9
14
|
Marshal.load(Marshal.dump(self))
|
@@ -10,7 +10,8 @@ module RokuBuilder
|
|
10
10
|
{
|
11
11
|
sideload: {source: true, device: true, stage: true},
|
12
12
|
build: {source: true, stage: true, exclude: true},
|
13
|
-
delete: {device: true}
|
13
|
+
delete: {device: true},
|
14
|
+
squash: {device: true}
|
14
15
|
}
|
15
16
|
end
|
16
17
|
|
@@ -25,6 +26,9 @@ module RokuBuilder
|
|
25
26
|
parser.on("-b", "--build", "Build a zip to be sideloaded") do
|
26
27
|
options[:build] = true
|
27
28
|
end
|
29
|
+
parser.on("--squash", "Convert currently sideloaded application to squashfs") do
|
30
|
+
options[:squash] = true
|
31
|
+
end
|
28
32
|
parser.separator "Options:"
|
29
33
|
parser.on("-x", "--exclude", "Apply exclude config to sideload") do
|
30
34
|
options[:exclude] = true
|
@@ -70,6 +74,15 @@ module RokuBuilder
|
|
70
74
|
end
|
71
75
|
end
|
72
76
|
|
77
|
+
# Convert sideloaded app to squashfs
|
78
|
+
def squash(options:, ignoreFailure: false)
|
79
|
+
payload = {mysubmit: "Convert to squashfs", archive: ""}
|
80
|
+
response = multipart_connection.post "/plugin_install", payload
|
81
|
+
unless response.status == 200 and response.body =~ /Conversion succeeded/ or ignoreFailure
|
82
|
+
raise ExecutionError, "Failed Converting to Squashfs"
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
73
86
|
def copy(options:, path:)
|
74
87
|
@options = options
|
75
88
|
@target = path
|
@@ -37,7 +37,9 @@ module RokuBuilder
|
|
37
37
|
def package(options:)
|
38
38
|
check_options(options)
|
39
39
|
#sideload
|
40
|
-
Loader.new(config: @config)
|
40
|
+
loader = Loader.new(config: @config)
|
41
|
+
loader.sideload(options: options)
|
42
|
+
loader.squash(options: options) if @config.stage[:squash]
|
41
43
|
#rekey
|
42
44
|
key(options: options)
|
43
45
|
#package
|
data/lib/roku_builder/version.rb
CHANGED
@@ -34,9 +34,10 @@ module RokuBuilder
|
|
34
34
|
parser = OptionParser.new
|
35
35
|
options = {}
|
36
36
|
Loader.parse_options(parser: parser, options: options)
|
37
|
-
argv = ["roku", "-
|
37
|
+
argv = ["roku", "-l", "--squash", "-d", "-b", "-x"]
|
38
38
|
parser.parse! argv
|
39
39
|
assert options[:sideload]
|
40
|
+
assert options[:squash]
|
40
41
|
assert options[:delete]
|
41
42
|
assert options[:build]
|
42
43
|
assert options[:exclude]
|
@@ -112,6 +113,22 @@ module RokuBuilder
|
|
112
113
|
loader.delete(options: @options)
|
113
114
|
end
|
114
115
|
end
|
116
|
+
def test_loader_squash
|
117
|
+
@request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
|
118
|
+
to_return(status: 200, body: "Conversion succeeded", headers: {}))
|
119
|
+
|
120
|
+
loader = Loader.new(config: @config)
|
121
|
+
loader.squash(options: @options)
|
122
|
+
end
|
123
|
+
def test_loader_squash_fail
|
124
|
+
@request_stubs.push(stub_request(:post, "http://#{@device_config[:ip]}/plugin_install").
|
125
|
+
to_return(status: 200, body: "Conversion failed", headers: {}))
|
126
|
+
|
127
|
+
loader = Loader.new(config: @config)
|
128
|
+
assert_raises ExecutionError do
|
129
|
+
loader.squash(options: @options)
|
130
|
+
end
|
131
|
+
end
|
115
132
|
def test_copy_files
|
116
133
|
loader = Loader.new(config: @config)
|
117
134
|
Dir.mktmpdir do |dir|
|
@@ -72,7 +72,6 @@ module RokuBuilder
|
|
72
72
|
packager.package(options: options)
|
73
73
|
end
|
74
74
|
end
|
75
|
-
|
76
75
|
def test_packager_package
|
77
76
|
loader = Minitest::Mock.new
|
78
77
|
inspector = Minitest::Mock.new
|
@@ -118,6 +117,54 @@ module RokuBuilder
|
|
118
117
|
inspector.verify
|
119
118
|
logger.verify
|
120
119
|
end
|
120
|
+
def test_packager_package_squash
|
121
|
+
loader = Minitest::Mock.new
|
122
|
+
inspector = Minitest::Mock.new
|
123
|
+
io = Minitest::Mock.new
|
124
|
+
logger = Minitest::Mock.new
|
125
|
+
config = good_config(PackagerTest)
|
126
|
+
config[:projects][:project1][:stages][:production][:squash] = true
|
127
|
+
config, options = build_config_options_objects(PackagerTest, {package: true, stage: "production", inspect_package: true, verbose: true}, false, config)
|
128
|
+
|
129
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_inspect").
|
130
|
+
to_return(status: 200, body: "", headers: {}).times(2))
|
131
|
+
body = "<a href=\"pkgs\">pkg_url</a>"
|
132
|
+
@requests.push(stub_request(:post, "http://192.168.0.100/plugin_package").
|
133
|
+
to_return(status: 200, body: body, headers: {}).times(2))
|
134
|
+
body = "package_body"
|
135
|
+
@requests.push(stub_request(:get, "http://192.168.0.100/pkgs/pkg_url").
|
136
|
+
to_return(status: 200, body: body, headers: {}))
|
137
|
+
|
138
|
+
loader.expect(:sideload, nil, [Hash])
|
139
|
+
loader.expect(:squash, nil, [Hash])
|
140
|
+
io.expect(:write, nil, ["package_body"])
|
141
|
+
inspector.expect(:inspect, nil, [Hash])
|
142
|
+
|
143
|
+
logger.expect(:debug, nil, [String])
|
144
|
+
io.expect(:each_line, nil)
|
145
|
+
logger.expect(:info, nil) do |message|
|
146
|
+
assert_match(/\/tmp\//, message)
|
147
|
+
end
|
148
|
+
|
149
|
+
Logger.class_variable_set(:@@instance, logger)
|
150
|
+
packager = Packager.new(config: config)
|
151
|
+
dev_id = Proc.new {"#{Random.rand(999999999999)}"}
|
152
|
+
Loader.stub(:new, loader) do
|
153
|
+
Time.stub(:now, Time.at(0)) do
|
154
|
+
File.stub(:open, nil, io) do
|
155
|
+
Inspector.stub(:new, inspector) do
|
156
|
+
packager.stub(:dev_id, dev_id) do
|
157
|
+
packager.package(options: options)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
io.verify
|
164
|
+
loader.verify
|
165
|
+
inspector.verify
|
166
|
+
logger.verify
|
167
|
+
end
|
121
168
|
def test_packager_dev_id
|
122
169
|
body = "v class=\"roku-font-5\"><label>Your Dev ID: </label> dev_id<hr></div>"
|
123
170
|
@requests.push(stub_request(:get, "http://192.168.0.100/plugin_package").
|
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: 4.
|
4
|
+
version: 4.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- greeneca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-02-
|
11
|
+
date: 2019-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|