roku_builder 4.29.2 → 4.29.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/roku_builder/device_manager.rb +14 -3
- data/lib/roku_builder/plugins/core.rb +10 -1
- data/lib/roku_builder/plugins/profiler.rb +9 -9
- data/lib/roku_builder/plugins/rokuapi.rb +6 -5
- data/lib/roku_builder/version.rb +1 -1
- data/test/roku_builder/plugins/test_rokuapi.rb +5 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 81cf2f851953864be0d4dd66937daf9e00386eabcd13b70afd4168dbd3b7b473
|
4
|
+
data.tar.gz: 8d58024ade2b9f3cc786f4f7ebb29b47884da7d1d7794becb631f977054dd492
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '060098efb871fc1e846634331e8b69d0738ba8ade3dda92da6ae931c9c7d5b595b37d8d35ce329832a05224ffa852f7990bad7605ad490d6d2b0504333e79e0a'
|
7
|
+
data.tar.gz: 6cb5e1aee0f27363a0021feb135a5675083916cb9f73670a2273968047cc3175034f5828bc528d0874492a26bf40cb770c61adb626badbf77a06e9a35a59f06d
|
@@ -39,12 +39,23 @@ module RokuBuilder
|
|
39
39
|
File.delete(lock) if File.exist?(lock)
|
40
40
|
end
|
41
41
|
|
42
|
+
def release_all
|
43
|
+
all_devices.each do |device_name|
|
44
|
+
device = Device.new(device_name, @config.devices[device_name])
|
45
|
+
release_device(device)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
42
49
|
private
|
43
50
|
|
44
|
-
def
|
51
|
+
def all_devices
|
45
52
|
default = @config.device_default
|
46
|
-
|
47
|
-
|
53
|
+
devices = @config.devices.keys.reject{|key, value| default == key}
|
54
|
+
devices.unshift(default)
|
55
|
+
devices
|
56
|
+
end
|
57
|
+
|
58
|
+
def reserve_any(no_lock: false)
|
48
59
|
all_devices.each do |device_name|
|
49
60
|
device = Device.new(device_name, @config.devices[device_name])
|
50
61
|
if device_available!(device: device, no_lock: no_lock)
|
@@ -11,7 +11,8 @@ module RokuBuilder
|
|
11
11
|
validate: {keyed: true},
|
12
12
|
increment: {source: true, stage: true},
|
13
13
|
dostage: {source: true},
|
14
|
-
dounstage: {source: true}
|
14
|
+
dounstage: {source: true},
|
15
|
+
release_all_devices: {},
|
15
16
|
}
|
16
17
|
end
|
17
18
|
|
@@ -32,6 +33,9 @@ module RokuBuilder
|
|
32
33
|
parser.on("--do-unstage", "Run the unstager. Used for scripting. Always run --do-script first") do
|
33
34
|
options[:dounstage] = true
|
34
35
|
end
|
36
|
+
parser.on("--release-all-devices", "Releases all devices, deleting lock files") do
|
37
|
+
options[:release_all_devices] = true
|
38
|
+
end
|
35
39
|
parser.separator ""
|
36
40
|
parser.separator "Config Options:"
|
37
41
|
parser.on("-e", "--edit PARAMS", "Edit config params when configuring. (eg. a:b, c:d,e:f)") do |p|
|
@@ -123,6 +127,11 @@ module RokuBuilder
|
|
123
127
|
def dounstage(options:)
|
124
128
|
Stager.new(config: @config, options: options).unstage
|
125
129
|
end
|
130
|
+
def release_all_devices(options:)
|
131
|
+
manager = DeviceManager.new(config: @config, options: @options)
|
132
|
+
manager.release_all
|
133
|
+
Logger.instance.info "All devices unlocked"
|
134
|
+
end
|
126
135
|
|
127
136
|
def self.get_help_text(parser:, options:, plugin_name:)
|
128
137
|
plugin = self.get_plugin_by_name(plugin_name)
|
@@ -139,8 +139,8 @@ module RokuBuilder
|
|
139
139
|
|
140
140
|
# Print the node stats
|
141
141
|
def get_stats
|
142
|
-
end_reg = /<\/All_Nodes
|
143
|
-
start_reg = /<All_Nodes
|
142
|
+
end_reg = /<\/All_Nodes/
|
143
|
+
start_reg = /<All_Nodes/
|
144
144
|
lines = get_command_response(command: "sgnodes all", start_reg: start_reg, end_reg: end_reg)
|
145
145
|
xml_string = lines.join("\n")
|
146
146
|
stats = {"Total" => {count: 0}}
|
@@ -211,14 +211,14 @@ module RokuBuilder
|
|
211
211
|
end
|
212
212
|
|
213
213
|
def print_all_nodes
|
214
|
-
start_reg = /<All_Nodes
|
215
|
-
end_reg = /<\/All_Nodes
|
214
|
+
start_reg = /<All_Nodes/
|
215
|
+
end_reg = /<\/All_Nodes/
|
216
216
|
lines = get_command_response(command: "sgnodes all", start_reg: start_reg, end_reg: end_reg)
|
217
217
|
lines.each {|line| print line}
|
218
218
|
end
|
219
219
|
def print_root_nodes
|
220
|
-
start_reg = /<Root_Nodes
|
221
|
-
end_reg = /<\/Root_Nodes
|
220
|
+
start_reg = /<Root_Nodes/
|
221
|
+
end_reg = /<\/Root_Nodes/
|
222
222
|
lines = get_command_response(command: "sgnodes roots", start_reg: start_reg, end_reg: end_reg)
|
223
223
|
lines.each {|line| print line}
|
224
224
|
end
|
@@ -230,14 +230,14 @@ module RokuBuilder
|
|
230
230
|
end
|
231
231
|
def print_image_information
|
232
232
|
start_reg = /RoGraphics instance/
|
233
|
-
end_reg = /Available memory/
|
233
|
+
end_reg = /Available texture memory/
|
234
234
|
lines = get_command_response(command: "r2d2_bitmaps", start_reg: start_reg, end_reg: end_reg)
|
235
235
|
lines = sort_image_lines(lines, /0x[^\s]+\s+\d+\s+\d+\s+\d+\s+\d+/, 4)
|
236
236
|
lines.each {|line| print line}
|
237
237
|
end
|
238
238
|
def print_memmory_usage
|
239
239
|
start_reg = /RoGraphics instance/
|
240
|
-
end_reg = /Available memory/
|
240
|
+
end_reg = /Available texture memory/
|
241
241
|
begin
|
242
242
|
while true
|
243
243
|
lines = get_command_response(command: "r2d2_bitmaps", start_reg: start_reg, end_reg: end_reg, ignore_warnings: true)
|
@@ -338,7 +338,7 @@ module RokuBuilder
|
|
338
338
|
first_match = /RoGraphics instance (0x.*)/.match(line)
|
339
339
|
if first_match
|
340
340
|
while line != nil
|
341
|
-
usage_match = /Available memory (\d*) used (\d*) max (\d*)/.match(line)
|
341
|
+
usage_match = /Available texture memory (\d*) used (\d*) max (\d*)/.match(line)
|
342
342
|
if usage_match
|
343
343
|
data[first_match[1]] = [usage_match[1].to_i, usage_match[2].to_i, usage_match[3].to_i]
|
344
344
|
break
|
@@ -95,7 +95,7 @@ module RokuBuilder
|
|
95
95
|
path = "/external/channels/#{channel}/versions"
|
96
96
|
params = nil
|
97
97
|
unless @no_publish
|
98
|
-
params = {"
|
98
|
+
params = {"state" => "Published"}
|
99
99
|
end
|
100
100
|
api_post(path, path, package, params)
|
101
101
|
end
|
@@ -124,7 +124,7 @@ module RokuBuilder
|
|
124
124
|
"appFileBase64Encoded" => Base64.encode64(package.read)
|
125
125
|
}.to_json
|
126
126
|
end
|
127
|
-
connection('POST', token_path, body).post(api_path+path) do |request|
|
127
|
+
connection('POST', token_path, body, params).post(api_path+path) do |request|
|
128
128
|
if params
|
129
129
|
request.params = params
|
130
130
|
end if
|
@@ -143,10 +143,10 @@ module RokuBuilder
|
|
143
143
|
end
|
144
144
|
end
|
145
145
|
|
146
|
-
def connection(method, path, body)
|
146
|
+
def connection(method, path, body, params = nil)
|
147
147
|
service_urn = "urn:roku:cloud-services:chanprovsvc"
|
148
148
|
connection = Faraday.new(url: HOST, headers: {
|
149
|
-
'Authorization' => "Bearer "+get_jwt_token(@api_key, service_urn, method, path, body),
|
149
|
+
'Authorization' => "Bearer "+get_jwt_token(@api_key, service_urn, method, path, body, params),
|
150
150
|
'Content-Type' => 'application/json',
|
151
151
|
'Accept' => 'application/json',
|
152
152
|
}) do |f|
|
@@ -154,10 +154,11 @@ module RokuBuilder
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
|
157
|
-
def get_jwt_token(api_key, service_urn, method, path, body = nil)
|
157
|
+
def get_jwt_token(api_key, service_urn, method, path, body = nil, params = nil)
|
158
158
|
key_file = File.expand_path(@config.api_keys[api_key.to_sym])
|
159
159
|
raise InvalidOptions "Missing api key" unless key_file
|
160
160
|
jwk = JWT::JWK.new(JSON.parse(File.read(key_file)))
|
161
|
+
path += "?" + URI.encode_www_form(params) if params
|
161
162
|
header = {
|
162
163
|
"typ" => "JWT",
|
163
164
|
"kid" => jwk.export[:kid]
|
data/lib/roku_builder/version.rb
CHANGED
@@ -103,16 +103,17 @@ module RokuBuilder
|
|
103
103
|
assert_equal spec["path"], path
|
104
104
|
end
|
105
105
|
|
106
|
-
def
|
106
|
+
def test_get_jwt_token_with_body_and_params
|
107
107
|
api = RokuAPI.new(config: @config)
|
108
108
|
urn = "test:urn"
|
109
109
|
method = "GET"
|
110
110
|
path = "/test/path"
|
111
|
+
params = {"param" => "value"}
|
111
112
|
body = {
|
112
113
|
"appFileBase64Encoded" => Base64.encode64(File.open(File.join(test_files_path(RokuAPITest), "test.pkg")).read)
|
113
114
|
}
|
114
115
|
sha256 = Digest::SHA256.base64digest(body.to_json)
|
115
|
-
token = api.send(:get_jwt_token, @options[:api_key], urn, method, path, body.to_json)
|
116
|
+
token = api.send(:get_jwt_token, @options[:api_key], urn, method, path, body.to_json, params)
|
116
117
|
jwk = JWT::JWK.new(JSON.parse(File.read(@config.api_keys[:key1])))
|
117
118
|
decoded = JWT.decode(token, jwk.public_key, true, {algorithm: 'RS256'})
|
118
119
|
assert_equal decoded[1]["typ"], "JWT"
|
@@ -124,7 +125,7 @@ module RokuBuilder
|
|
124
125
|
refute_nil spec
|
125
126
|
assert_equal spec["serviceUrn"], urn
|
126
127
|
assert_equal spec["httpMethod"], method
|
127
|
-
assert_equal spec["path"], path
|
128
|
+
assert_equal spec["path"], path+"?"+URI.encode_www_form(params)
|
128
129
|
assert_equal spec["bodySha256Base64"], sha256
|
129
130
|
end
|
130
131
|
|
@@ -346,7 +347,7 @@ module RokuBuilder
|
|
346
347
|
called = true
|
347
348
|
assert_equal path, "/external/channels/#{channel}/versions"
|
348
349
|
assert_equal token_path, "/external/channels/#{channel}/versions"
|
349
|
-
assert_equal "Published", params["
|
350
|
+
assert_equal "Published", params["state"]
|
350
351
|
assert_kind_of File, package
|
351
352
|
end
|
352
353
|
api.stub(:api_post, post_proc) 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: 4.29.
|
4
|
+
version: 4.29.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- greeneca
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyzip
|