roku_builder 4.16.1 → 4.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|