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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b6a3e4bd8c77f11f513140b9429bf590bd7d61a1
4
- data.tar.gz: 0b816aab48e6ffe5303ba740b068b1cf55416682
3
+ metadata.gz: 0f330332e0ec4f1832974dee629495887c1f3be1
4
+ data.tar.gz: 3b3f9230bfaaffc212e746465754489efcf39bf3
5
5
  SHA512:
6
- metadata.gz: 5eede887d08c2505cdde41e30839795a61b07b7f98a50ffcdf7521169f76e367fa58364dc94503a2f59a55606854d07a6e4cd2871cf994111135167272ee411a
7
- data.tar.gz: b62a5ded206dd32074409f89f4f52126b2b9d6b091a808f7723f702fe61e01a9bf64ee3076ba6d1a5d4ba5d15089411206932a48f14150fec781c28d0227c778
6
+ metadata.gz: 840ef1b935ba37594e9134b11736513b856add2e99741d5161f8b5fdd8c78e7b705ef25763eeedc838c1280777d9b639fbf2c983a60575ecf608910e0a3e5a1c
7
+ data.tar.gz: 18e06f83b9720f426c4ed6d2b4980b95692a0205f3747cd5405d2d28e2a34be66953e888d63aa32e447169be918d383dceae43e6b60ec3dbcb8c0902783a991f
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ = 4.17.0 =
2
+
3
+ - Add ability to convert a package to squashfs
4
+
1
5
  = 4.16.1 =
2
6
 
3
7
  - Fixes for indentation checker
@@ -1,9 +1,14 @@
1
1
  # ********** Copyright 2016 Viacom, Inc. Apache 2.0 **********
2
2
 
3
3
  class ::Hash
4
- def deep_merge(second)
4
+ def deep_merger
5
5
  merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
6
- self.merge(second, &merger)
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).sideload(options: options)
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
@@ -2,5 +2,5 @@
2
2
 
3
3
  module RokuBuilder
4
4
  # Version of the RokuBuilder Gem
5
- VERSION = "4.16.1"
5
+ VERSION = "4.17.0"
6
6
  end
@@ -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", "-s", "-d", "-b", "-x"]
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: &nbsp;</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.16.1
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-12 00:00:00.000000000 Z
11
+ date: 2019-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyzip