roku_builder 3.11.1 → 3.12.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/Gemfile.lock +6 -13
- data/Guardfile +6 -3
- data/README.md +171 -112
- data/bin/roku +2 -2
- data/config.json.example +2 -0
- data/lib/roku_builder/config_manager.rb +14 -2
- data/lib/roku_builder/config_parser.rb +6 -0
- data/lib/roku_builder/config_validator.rb +5 -2
- data/lib/roku_builder/version.rb +1 -1
- data/rakefile +1 -1
- data/roku_builder.gemspec +2 -1
- data/{tests/roku_builder/config_manager_test.rb → test/roku_builder/test_config_manager.rb} +38 -0
- data/{tests/roku_builder/config_parser_test.rb → test/roku_builder/test_config_parser.rb} +36 -0
- data/{tests/roku_builder/config_validator_test.rb → test/roku_builder/test_config_validator.rb} +0 -0
- data/{tests/roku_builder/controller_test.rb → test/roku_builder/test_controller.rb} +14 -0
- data/{tests/roku_builder/controller_commands_test.rb → test/roku_builder/test_controller_commands.rb} +31 -1
- data/{tests/roku_builder/error_handler_test.rb → test/roku_builder/test_error_handler.rb} +0 -0
- data/{tests → test}/roku_builder/test_files/controller_config_test/valid_config.json +0 -0
- data/{tests → test}/roku_builder/test_files/controller_test/load_config_test.json +0 -0
- data/{tests → test}/roku_builder/test_files/controller_test/parent_config.json +0 -0
- data/{tests → test}/roku_builder/test_files/controller_test/valid_config.json +0 -0
- data/{tests → test}/roku_builder/test_files/loader_test/a +0 -0
- data/{tests → test}/roku_builder/test_files/loader_test/manifest +0 -0
- data/{tests → test}/roku_builder/test_files/loader_test/source/b +0 -0
- data/{tests → test}/roku_builder/test_files/loader_test/source/c/d +0 -0
- data/{tests → test}/roku_builder/test_files/manifest_manager_test/manifest_comments +0 -0
- data/{tests → test}/roku_builder/test_files/manifest_manager_test/manifest_template +0 -0
- data/{tests → test}/roku_builder/test_files/manifest_manager_test/manifest_template_2 +0 -0
- data/{tests → test}/roku_builder/test_files/manifest_manager_test/test.zip +0 -0
- data/{tests → test}/roku_builder/test_files/manifest_manager_test/updated_title_manifest +0 -0
- data/{tests → test}/roku_builder/test_files/stager_test/a +0 -0
- data/{tests → test}/roku_builder/test_files/stager_test/manifest +0 -0
- data/{tests → test}/roku_builder/test_files/stager_test/source/b +0 -0
- data/{tests → test}/roku_builder/test_files/stager_test/source/c/d +0 -0
- data/{tests → test}/roku_builder/test_helper.rb +0 -0
- data/{tests/roku_builder/inspector_test.rb → test/roku_builder/test_inspector.rb} +0 -0
- data/{tests/roku_builder/keyer_test.rb → test/roku_builder/test_keyer.rb} +0 -0
- data/{tests/roku_builder/linker_test.rb → test/roku_builder/test_linker.rb} +0 -0
- data/{tests/roku_builder/loader_test.rb → test/roku_builder/test_loader.rb} +0 -0
- data/{tests/roku_builder/manifest_manager_test.rb → test/roku_builder/test_manifest_manager.rb} +0 -0
- data/{tests/roku_builder/monitor_test.rb → test/roku_builder/test_monitor.rb} +0 -0
- data/{tests/roku_builder/navigator_test.rb → test/roku_builder/test_navigator.rb} +0 -2
- data/{tests/roku_builder/packager_test.rb → test/roku_builder/test_packager.rb} +0 -0
- data/{tests/roku_builder/profiler_test.rb → test/roku_builder/test_profiler.rb} +0 -0
- data/test/roku_builder/test_ruby_git.rb +82 -0
- data/{tests/roku_builder/scripter_test.rb → test/roku_builder/test_scripter.rb} +0 -0
- data/{tests/roku_builder/stager_test.rb → test/roku_builder/test_stager.rb} +0 -0
- data/{tests/roku_builder/tester_test.rb → test/roku_builder/test_tester.rb} +0 -0
- data/{tests/roku_builder/util_test.rb → test/roku_builder/test_util.rb} +0 -0
- metadata +96 -43
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 93b0a591ad7b3ea224df548135d5630d63042720
|
|
4
|
+
data.tar.gz: b5af0760e8b9a2c914ec483fe28c0be45bee1b6b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b553af68d7eae9b5e2b3c40b7eef3b7852ab01b86704b1aa7548c37ee57914bc502cee6c820f32c48c5f562e46750241571ccecd83dc76784fcf329bb98b0d30
|
|
7
|
+
data.tar.gz: 0b51fbe386fe0944f114c26057dc0f2267bd88fc5f238a4007f1b6d8f9a3a9435f6e3f47c5819599afa13c82c960ae61788f83e720d67fd2566a55729b3674ac
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
roku_builder (3.
|
|
4
|
+
roku_builder (3.12.0)
|
|
5
5
|
faraday (~> 0.11)
|
|
6
6
|
faraday-digestauth (~> 0.2)
|
|
7
7
|
git (~> 1.3)
|
|
@@ -22,10 +22,6 @@ GEM
|
|
|
22
22
|
thor (~> 0.19.1)
|
|
23
23
|
tins (~> 1.6)
|
|
24
24
|
docile (1.1.5)
|
|
25
|
-
em-websocket (0.5.1)
|
|
26
|
-
eventmachine (>= 0.12.9)
|
|
27
|
-
http_parser.rb (~> 0.6.0)
|
|
28
|
-
eventmachine (1.2.1)
|
|
29
25
|
faraday (0.11.0)
|
|
30
26
|
multipart-post (>= 1.2, < 3)
|
|
31
27
|
faraday-digestauth (0.2.1)
|
|
@@ -44,12 +40,9 @@ GEM
|
|
|
44
40
|
shellany (~> 0.0)
|
|
45
41
|
thor (>= 0.18.1)
|
|
46
42
|
guard-compat (1.2.1)
|
|
47
|
-
guard-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
guard-compat (~> 1.0)
|
|
51
|
-
multi_json (~> 1.8)
|
|
52
|
-
http_parser.rb (0.6.0)
|
|
43
|
+
guard-minitest (2.4.6)
|
|
44
|
+
guard-compat (~> 1.2)
|
|
45
|
+
minitest (>= 3.0)
|
|
53
46
|
json (2.0.3)
|
|
54
47
|
listen (3.1.5)
|
|
55
48
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
@@ -63,7 +56,6 @@ GEM
|
|
|
63
56
|
minitest-server (~> 1.0)
|
|
64
57
|
minitest-server (1.0.4)
|
|
65
58
|
minitest (~> 5.0)
|
|
66
|
-
multi_json (1.12.1)
|
|
67
59
|
multipart-post (2.0.0)
|
|
68
60
|
nenv (0.3.0)
|
|
69
61
|
net-http-digest_auth (1.4)
|
|
@@ -104,7 +96,8 @@ DEPENDENCIES
|
|
|
104
96
|
bundler (~> 1.7)
|
|
105
97
|
byebug (~> 9.0)
|
|
106
98
|
coveralls (~> 0.8)
|
|
107
|
-
guard
|
|
99
|
+
guard (~> 2.14)
|
|
100
|
+
guard-minitest (~> 2.4)
|
|
108
101
|
minitest (~> 5.10)
|
|
109
102
|
minitest-autotest (~> 1.0)
|
|
110
103
|
minitest-server (~> 1.0)
|
data/Guardfile
CHANGED
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
#
|
|
18
18
|
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
|
|
21
|
+
guard :minitest do
|
|
22
|
+
# with Minitest::Unit
|
|
23
|
+
watch(%r{^test/roku_builder/(.*)\/?test_(.*)\.rb$})
|
|
24
|
+
watch(%r{^lib/roku_builder/(.*/)?([^/]+)\.rb$}) { |m| "test/roku_builder/#{m[1]}test_#{m[2]}.rb" }
|
|
25
|
+
watch(%r{^test/roku_builder/test_helper\.rb$}) { 'test/roku_builder' }
|
|
23
26
|
end
|
data/README.md
CHANGED
|
@@ -55,91 +55,176 @@ This will create the file '~/.roku_config.json' with a default configuration.
|
|
|
55
55
|
Edit this file to add appropriate values. The following are default
|
|
56
56
|
configuration options:
|
|
57
57
|
|
|
58
|
+
##### Top Level Configuration
|
|
59
|
+
|
|
58
60
|
* devices: information for accessing devices
|
|
59
|
-
* devices -> default: id of the default device
|
|
60
61
|
* projects: this is a hash of project objects
|
|
61
|
-
*
|
|
62
|
+
* keys: contains keys that will be used for signing packages
|
|
63
|
+
* input_mapping: allows you to change key mappings for the intractive navigator
|
|
64
|
+
|
|
65
|
+
##### Device Configuration
|
|
66
|
+
|
|
67
|
+
* devices.default: id of the default device
|
|
68
|
+
* devices.<device_id>.ip: ip address of the device
|
|
69
|
+
* devices.<device_id>.user: dev username for the roku device
|
|
70
|
+
* devices.<device_id>.password: dev password for the roku device
|
|
71
|
+
|
|
72
|
+
##### Project Configuration
|
|
73
|
+
|
|
74
|
+
* projects.default: the key for the default project
|
|
75
|
+
* projects.parent_dir: optional directory path that all projects are relative
|
|
76
|
+
to
|
|
77
|
+
* projects.<project_id>.parent: optional id of parent project to copy configs
|
|
78
|
+
from
|
|
79
|
+
* projects.<project_id>.directory: full path of the git repository the houses
|
|
80
|
+
the roku app
|
|
81
|
+
* projects.<project_id>.app_name: Name used when packaging the app
|
|
82
|
+
* projects.<project_id>.stage_method: Which method to use for switching app
|
|
83
|
+
stages (git or script)
|
|
84
|
+
* projects.<project_id>.stages: a hash of stage objects
|
|
85
|
+
* projects.<project_id>.stages.<stage_id>.branch: name of the branch for the
|
|
86
|
+
given stage (if stage_method = git). If using stage_method = stage then
|
|
87
|
+
this can be removed.
|
|
88
|
+
* projects.<project_id>.stages.<stage_id>.script: scripts to use to stage the
|
|
89
|
+
app (if stage_method = script). If using stage_method = git this can be
|
|
90
|
+
removed.
|
|
91
|
+
* projects.<project_id>.stages.<stage_id>.script.stage: script run form the
|
|
92
|
+
app root directory to stage app
|
|
93
|
+
* projects.<project_id>.stages.<stage_id>.script -> unstage: script run form
|
|
94
|
+
the app root directory to unstage app
|
|
95
|
+
* projects.<project_id>.stages.<stage_id>.key: this can be a string referencing
|
|
96
|
+
a key in the keys section or a hash of options
|
|
97
|
+
* projects.<project_id>.stages.<stage_id>.key.keyed_pkg: path to a pkg file
|
|
98
|
+
that has been signed
|
|
99
|
+
* projects.<project_id>.stages.<stage_id>.key.password: password for the signed pkg
|
|
100
|
+
|
|
101
|
+
##### Key Configuration
|
|
102
|
+
|
|
103
|
+
* keys.key_dir: optional directory that all keys are relative to
|
|
104
|
+
* keys.<key_id>.keyed_pkg: path to a pkg file that has been signed
|
|
105
|
+
* keys.<key_id>.password: password for the signed pkg
|
|
106
|
+
|
|
107
|
+
The "input_mappings" section is optional but will allow you to override
|
|
108
|
+
the default input mappings. In the section each key is a key press code. The
|
|
109
|
+
value is a array with the desired command to run and a human readable key name.
|
|
110
|
+
To see the key press code for a specific key the --navigate command can be run
|
|
111
|
+
with the --debug option on to see a print out of all the keys pressed.
|
|
62
112
|
|
|
63
|
-
|
|
113
|
+
#### Basic steps for creating a Roku channel/application package
|
|
64
114
|
|
|
65
|
-
|
|
66
|
-
* user: dev username for the roku device
|
|
67
|
-
* password: dev password for the roku device
|
|
115
|
+
Official docs for packaging an application can be found [in the sdk](https://sdkdocs.roku.com/display/sdkdoc/Packaging+Your+Application), however the basic steps are:
|
|
68
116
|
|
|
69
|
-
|
|
117
|
+
1. Side-load your application onto a Roku device for testing.
|
|
118
|
+
1. Run the genkey utility to generate a key. This key will sign packages. This step only needs to be done once.
|
|
119
|
+
1. Run the package utility to generate the package.
|
|
120
|
+
1. Download the package from the Roku device to your computer.
|
|
70
121
|
|
|
71
|
-
|
|
72
|
-
* app_name: Name used when packaging the app
|
|
73
|
-
* stage_method: Which method to use for switching app stages (git or script)
|
|
74
|
-
* stages: a hash of stage objects
|
|
122
|
+
RokuBuilder makes running each of these steps easy, without needing to use the Roku device web interface or telnet.
|
|
75
123
|
|
|
76
|
-
|
|
124
|
+
#### Projects and Stages
|
|
77
125
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
* script -> stage: script run form the app root directory to stage app
|
|
83
|
-
* script -> unstage: script run form the app root directory to unstage app
|
|
84
|
-
* key: has of key options for signing a package
|
|
85
|
-
* key -> keyed_pkg: path to a pkg file that has been signed
|
|
86
|
-
* key -> password: password for the signed pkg
|
|
126
|
+
The configuration for this gem allows you to define any number of project and
|
|
127
|
+
any number of stages for each project. It is intended that each app be defined
|
|
128
|
+
as a project and then the stages for that project would allow you to define
|
|
129
|
+
production/staging/etc. stages.
|
|
87
130
|
|
|
88
|
-
There
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
To
|
|
92
|
-
with the --debug option on to see a print out of all the keys pressed.
|
|
131
|
+
There are two different ways that stages can be defined. You can use a script
|
|
132
|
+
to define your stage. This gives you the greatest amount of freedom allowing
|
|
133
|
+
you to setup your stage anyway you want. The other option is to use git
|
|
134
|
+
staging. To do this you must have one branch for eash stage.
|
|
93
135
|
|
|
136
|
+
The project used in the examples below is a smart default. If you are in a
|
|
137
|
+
project directory then it will use that project. If you are not then it will
|
|
138
|
+
use the defualt that you have defined in your config. You can define what
|
|
139
|
+
project you want the command to be run on using the --project option:
|
|
94
140
|
|
|
95
|
-
|
|
141
|
+
$ roku -lw --project project1
|
|
96
142
|
|
|
97
|
-
|
|
98
|
-
an arbitrary git referance or the working directory.
|
|
143
|
+
or:
|
|
99
144
|
|
|
100
|
-
|
|
145
|
+
$ roku -lw -P project1
|
|
101
146
|
|
|
102
|
-
|
|
147
|
+
#### Commands and Sources
|
|
148
|
+
|
|
149
|
+
There are several commands that require a source option to run properly. These
|
|
150
|
+
include:
|
|
151
|
+
|
|
152
|
+
* Sideload
|
|
153
|
+
* Build
|
|
154
|
+
* Package
|
|
155
|
+
* Test
|
|
156
|
+
* Key
|
|
157
|
+
|
|
158
|
+
There are several source options that can be supplied to these commands. Which
|
|
159
|
+
options you use will depend on the type of staging you are using and the app
|
|
160
|
+
you are trying to run the command. The options are as follows:
|
|
161
|
+
|
|
162
|
+
* --ref or -r
|
|
163
|
+
* This option only works with git type staging. It will allow you to run a
|
|
164
|
+
command on a specific git branch, tag, or referance.
|
|
165
|
+
* --stage or -s
|
|
166
|
+
* This option will work with either git or script staging. It allows you to
|
|
167
|
+
sideload a specific stage. If using script staging then it will run the
|
|
168
|
+
configured stage script before sideloading and then run the unstage
|
|
169
|
+
script after. If using git staging it will stach any local changes,
|
|
170
|
+
switch to the configured branch, sideload, switch back to the previous
|
|
171
|
+
branch, and unstach changes. This is the only source option that you can
|
|
172
|
+
use when packaging.
|
|
173
|
+
* --working or -w
|
|
174
|
+
* This option will work with git or script staging. It will use the project
|
|
175
|
+
configs to determine the directory to use but will not run any staging
|
|
176
|
+
method.
|
|
177
|
+
* --current or -c
|
|
178
|
+
* This option will ignore any project configurattion and just us the entire
|
|
179
|
+
current directory.
|
|
180
|
+
* --in or -I
|
|
181
|
+
* This option allows you to pass in a zip file of an already built app.
|
|
103
182
|
|
|
104
|
-
This will sideload the production stage. By default the production stage is
|
|
105
|
-
used. So the above is equivalent to the following:
|
|
106
183
|
|
|
107
|
-
|
|
184
|
+
#### Sideloading
|
|
108
185
|
|
|
109
|
-
|
|
186
|
+
You can sideload an app directly to the device using this gem. The gem will
|
|
187
|
+
zip all of the configured files and upload it to the device and the remove the
|
|
188
|
+
zip. You can do so with the following commands:
|
|
110
189
|
|
|
111
|
-
$ roku
|
|
190
|
+
$ roku --sideload --stage production
|
|
112
191
|
|
|
113
|
-
|
|
192
|
+
or:
|
|
114
193
|
|
|
115
|
-
$ roku
|
|
194
|
+
$ roku -ls production
|
|
116
195
|
|
|
117
|
-
|
|
196
|
+
When sideoading you can use any of the source options approiate to your staging
|
|
197
|
+
method.
|
|
118
198
|
|
|
119
|
-
|
|
199
|
+
#### Building
|
|
120
200
|
|
|
121
|
-
|
|
201
|
+
You can build an app to be sideloaded later or by someone else by using the
|
|
202
|
+
following command:
|
|
122
203
|
|
|
123
|
-
$ roku --
|
|
204
|
+
$ roku --build --working
|
|
124
205
|
|
|
125
206
|
or:
|
|
126
207
|
|
|
127
|
-
$ roku -
|
|
208
|
+
$ roku -bw
|
|
128
209
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
time to time there may be an issue with this and you will have to clear the
|
|
132
|
-
stash manually.
|
|
210
|
+
When bulding you can use any of the source options approiate to your staging
|
|
211
|
+
method except the --in option.
|
|
133
212
|
|
|
134
|
-
|
|
135
|
-
project. If the directory has a manifest file then you can run the following
|
|
136
|
-
command:
|
|
213
|
+
#### Generating a key
|
|
137
214
|
|
|
138
|
-
|
|
215
|
+
Before you can package a channel, you must [generate a key](https://sdkdocs.roku.com/display/sdkdoc/Packaging+Your+Application#PackagingYourApplication-RunthegenkeyUtility)
|
|
216
|
+
that is used to sign the package. This key is used to sign a new package and is
|
|
217
|
+
also needed to sign a package when updating a channel.
|
|
139
218
|
|
|
140
|
-
|
|
219
|
+
You can create a key by running the genkey command:
|
|
141
220
|
|
|
142
|
-
$ roku
|
|
221
|
+
$ roku --genkey --debug
|
|
222
|
+
|
|
223
|
+
This will output the following data, all of which need to put in the `keys` section of `~/.roku_config.json`:
|
|
224
|
+
|
|
225
|
+
* `Keyed PKG`: This is the signing key, used to sign new and updated packages
|
|
226
|
+
* `Password`: Key's password
|
|
227
|
+
* `DevID`: The developer ID associated with the key. Don't need to save this, but it is best practice to include this string in the signing keys filename
|
|
143
228
|
|
|
144
229
|
#### Packaging
|
|
145
230
|
|
|
@@ -153,17 +238,8 @@ or:
|
|
|
153
238
|
|
|
154
239
|
$ roku -ps production
|
|
155
240
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
You can build an app to be sideloaded later or by someone else by using the
|
|
159
|
-
following command:
|
|
160
|
-
|
|
161
|
-
$ roku --build --stage production
|
|
162
|
-
|
|
163
|
-
or:
|
|
164
|
-
|
|
165
|
-
$ roku -bw
|
|
166
|
-
|
|
241
|
+
The package command will automatically [Rekey](https://github.com/rokudev/docs/blob/master/develop/guides/packaging.md#rekeying)
|
|
242
|
+
your roku device before packaging the channel
|
|
167
243
|
|
|
168
244
|
#### Monitoring Logs
|
|
169
245
|
|
|
@@ -177,20 +253,40 @@ brightscript log:
|
|
|
177
253
|
or:
|
|
178
254
|
$ roku -m main
|
|
179
255
|
|
|
256
|
+
or
|
|
257
|
+
|
|
258
|
+
$ roku --monitor
|
|
259
|
+
|
|
180
260
|
The following are the options to be passed in as type:
|
|
181
261
|
|
|
182
262
|
* main
|
|
183
|
-
* sg
|
|
184
|
-
* task1
|
|
185
|
-
* task2
|
|
186
|
-
* task3
|
|
187
|
-
* taskX
|
|
263
|
+
* sg (depricated)
|
|
264
|
+
* task1 (depricated)
|
|
265
|
+
* task2 (depricated)
|
|
266
|
+
* task3 (depricated)
|
|
267
|
+
* taskX (depricated)
|
|
188
268
|
* profile
|
|
189
269
|
|
|
270
|
+
If no option is passed in then main log is monitored.
|
|
271
|
+
|
|
190
272
|
The tool connects to the roku via telnet and prints everything that it
|
|
191
273
|
recieves. It will continue indefinatly unless it is stopped via Ctrl-c or
|
|
192
274
|
entering "q".
|
|
193
275
|
|
|
276
|
+
The monitor tool also includes command history and some tab completeion.
|
|
277
|
+
|
|
278
|
+
#### Interactive Navigation
|
|
279
|
+
|
|
280
|
+
The gem has the ability to capture keyboard input and send it to the roku as
|
|
281
|
+
remote inputs. This can be done by running the following command:
|
|
282
|
+
|
|
283
|
+
$ roku --navigate
|
|
284
|
+
|
|
285
|
+
Running in verbose mode will print out all of the key mappings avaiable. If you
|
|
286
|
+
want to change these mappings you can do so via the input_mapping config values
|
|
287
|
+
. To determine the codes needed to enter in the input_mapping config you can
|
|
288
|
+
run the navigator in debug mode.
|
|
289
|
+
|
|
194
290
|
#### Profiling Scene Graph
|
|
195
291
|
|
|
196
292
|
The tool will help a little with profiling scenegraph applications. Running the
|
|
@@ -222,7 +318,7 @@ are run otherwise it will just grab the test run from last time.
|
|
|
222
318
|
Another tool for testing is the navigate command. You can use this to script
|
|
223
319
|
navigation on the roku console. The command is used as follows:
|
|
224
320
|
|
|
225
|
-
$ roku --
|
|
321
|
+
$ roku --nav <command>
|
|
226
322
|
|
|
227
323
|
The possible commands are as follows:
|
|
228
324
|
|
|
@@ -267,46 +363,13 @@ You can use a differnt configuration file useing the following option:
|
|
|
267
363
|
|
|
268
364
|
This path will be expanded so you do not have to use the full path
|
|
269
365
|
|
|
270
|
-
You can use your keyboard to control the roku by running the following command:
|
|
271
|
-
|
|
272
|
-
$ roku --navigate
|
|
273
|
-
|
|
274
|
-
To see the key mapings you can run the following command:
|
|
275
|
-
|
|
276
|
-
$ roku --navigate -V
|
|
277
|
-
|
|
278
|
-
## Projects
|
|
279
|
-
|
|
280
|
-
The project used in the above examples is a smart default. If you are in a
|
|
281
|
-
project directory then it will use that project. If you are not then it will
|
|
282
|
-
use the defualt that you have defined in your config. You can define what
|
|
283
|
-
project you want the command to be run on using the --project option:
|
|
284
|
-
|
|
285
|
-
$ roku -lw --project project1
|
|
286
|
-
|
|
287
|
-
or:
|
|
288
|
-
|
|
289
|
-
$ roku -lw -P project1
|
|
290
|
-
|
|
291
|
-
## Stages
|
|
292
|
-
|
|
293
|
-
Each project can have any number of stages. stages can be defined in a number
|
|
294
|
-
of ways. The default is to use git branches to define stages. You can setup a
|
|
295
|
-
branch for each stage and the gem will automatically switch between them as
|
|
296
|
-
needed. If using git stages then the gem will ensure to stash any change you
|
|
297
|
-
currently have before checking out the required branch. When done it will
|
|
298
|
-
switch back and unstash the changes. You can use the -w or --working options
|
|
299
|
-
to avoid this.
|
|
300
|
-
|
|
301
|
-
The other method of staging is script staging. This will run a script you
|
|
302
|
-
define before and after performing any actions. This will let you stage your
|
|
303
|
-
app anyway you like as long as it can be done via script.
|
|
304
|
-
|
|
305
366
|
## Devices
|
|
306
367
|
|
|
307
|
-
In the examples above the
|
|
308
|
-
defined in
|
|
309
|
-
|
|
368
|
+
In the examples above the device used is a smart default. It will use the
|
|
369
|
+
default device defined in the configuration file. If that device is not online
|
|
370
|
+
it will look start at the top and try each device until it findes an avaiable
|
|
371
|
+
device. If you have multiple devices defined in your config then you can select
|
|
372
|
+
a different one using the following option:
|
|
310
373
|
|
|
311
374
|
$ roku -lw --device device2
|
|
312
375
|
|
|
@@ -325,10 +388,6 @@ directory:
|
|
|
325
388
|
|
|
326
389
|
## Improvements
|
|
327
390
|
|
|
328
|
-
* Increase testing
|
|
329
|
-
* Config Unit Tests
|
|
330
|
-
* Intergration Tests
|
|
331
|
-
* Move RokuBuilder::Controller to RokuBuilder?
|
|
332
391
|
* Allow start and end delimiter for tests to be configured
|
|
333
392
|
* Fix file naming when building from a referance
|
|
334
393
|
* Extend profiling
|
data/bin/roku
CHANGED
|
@@ -104,8 +104,8 @@ parser = OptionParser.new do |opts|
|
|
|
104
104
|
options[:screens] = true
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
opts.on("-m", "--monitor TYPE", "Command: run telnet to monitor roku log") do |m|
|
|
108
|
-
options[:monitor] = m
|
|
107
|
+
opts.on("-m", "--monitor [TYPE]", "Command: run telnet to monitor roku log") do |m|
|
|
108
|
+
options[:monitor] = m || "main"
|
|
109
109
|
end
|
|
110
110
|
|
|
111
111
|
opts.on("-u", "--update-manifest", "Command: update the manifest file") do
|
data/config.json.example
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"projects": {
|
|
11
11
|
"default": "<project id>",
|
|
12
|
+
"project_dir": "<optional parent directory for all projects>",
|
|
12
13
|
"<project id>": {
|
|
13
14
|
"directory": "<path/to/repo>",
|
|
14
15
|
"folders": ["resources","source"],
|
|
@@ -26,6 +27,7 @@
|
|
|
26
27
|
}
|
|
27
28
|
},
|
|
28
29
|
"keys": {
|
|
30
|
+
"key_dir": "<optional parent directory for all keys>",
|
|
29
31
|
"key1": {
|
|
30
32
|
"keyed_pkg": "<path/to/signed/package>",
|
|
31
33
|
"password": "<password>"
|
|
@@ -46,17 +46,29 @@ module RokuBuilder
|
|
|
46
46
|
# @return [Hash] roku config object
|
|
47
47
|
def self.get_config(config:, logger:)
|
|
48
48
|
begin
|
|
49
|
-
config =
|
|
49
|
+
config = {parent_config: config}
|
|
50
|
+
depth = 1
|
|
51
|
+
while config[:parent_config]
|
|
52
|
+
config_parent = JSON.parse(File.open(config[:parent_config]).read, {symbolize_names: true})
|
|
53
|
+
config.delete(:parent_config)
|
|
54
|
+
config.merge!(config_parent) {|key, v1, v2| v1}
|
|
55
|
+
depth += 1
|
|
56
|
+
if depth > 10
|
|
57
|
+
logger.fatal "Parent configs too deep."
|
|
58
|
+
return nil
|
|
59
|
+
end
|
|
60
|
+
end
|
|
50
61
|
config[:devices][:default] = config[:devices][:default].to_sym
|
|
51
62
|
config[:projects][:default] = config[:projects][:default].to_sym
|
|
52
63
|
config[:projects].each_pair do |key,value|
|
|
53
64
|
next if key == :default
|
|
65
|
+
next if key == :project_dir
|
|
54
66
|
if value[:stage_method]
|
|
55
67
|
value[:stage_method] = value[:stage_method].to_sym
|
|
56
68
|
end
|
|
57
69
|
end
|
|
58
70
|
config[:projects].each_pair do |key, value|
|
|
59
|
-
unless key == :default
|
|
71
|
+
unless key == :default or key == :project_dir
|
|
60
72
|
if value[:parent] and config[:projects][value[:parent].to_sym]
|
|
61
73
|
new_value = config[:projects][value[:parent].to_sym]
|
|
62
74
|
new_value = new_value.deep_merge value
|
|
@@ -107,6 +107,9 @@ module RokuBuilder
|
|
|
107
107
|
else
|
|
108
108
|
project_config = config[:projects][options[:project].to_sym]
|
|
109
109
|
return UNKNOWN_PROJECT unless project_config
|
|
110
|
+
if config[:projects][:project_dir]
|
|
111
|
+
project_config[:directory] = File.join(config[:projects][:project_dir], project_config[:directory])
|
|
112
|
+
end
|
|
110
113
|
project_config[:stage_method] = :working if options[:working]
|
|
111
114
|
end
|
|
112
115
|
project_config
|
|
@@ -188,6 +191,9 @@ module RokuBuilder
|
|
|
188
191
|
configs[:key] = configs[:project_config][:stages][stage][:key]
|
|
189
192
|
if configs[:key].class == String
|
|
190
193
|
configs[:key] = config[:keys][configs[:key].to_sym]
|
|
194
|
+
if config[:keys][:key_dir]
|
|
195
|
+
configs[:key][:keyed_pkg] = File.join(config[:keys][:key_dir], configs[:key][:keyed_pkg])
|
|
196
|
+
end
|
|
191
197
|
end
|
|
192
198
|
end
|
|
193
199
|
if options[:package]
|
|
@@ -44,7 +44,7 @@ module RokuBuilder
|
|
|
44
44
|
end
|
|
45
45
|
if config[:projects]
|
|
46
46
|
config[:projects].each {|project,project_config|
|
|
47
|
-
next if project == :default
|
|
47
|
+
next if project == :default or project == :project_dir
|
|
48
48
|
validate_project(codes: codes, project: project_config)
|
|
49
49
|
if project_config[:stages]
|
|
50
50
|
project_config[:stages].each {|_stage, stage_config|
|
|
@@ -54,7 +54,10 @@ module RokuBuilder
|
|
|
54
54
|
}
|
|
55
55
|
end
|
|
56
56
|
if config[:keys]
|
|
57
|
-
config[:keys].each {|
|
|
57
|
+
config[:keys].each {|key,key_config|
|
|
58
|
+
next if key == :key_dir
|
|
59
|
+
validate_key(codes: codes, key: key_config)
|
|
60
|
+
}
|
|
58
61
|
end
|
|
59
62
|
if config[:input_mapping]
|
|
60
63
|
config[:input_mapping].each_value {|info| validate_mapping(codes: codes, mapping: info) }
|
data/lib/roku_builder/version.rb
CHANGED
data/rakefile
CHANGED
data/roku_builder.gemspec
CHANGED
|
@@ -37,5 +37,6 @@ Gem::Specification.new do |spec|
|
|
|
37
37
|
spec.add_development_dependency "simplecov", "~> 0.12"
|
|
38
38
|
spec.add_development_dependency "coveralls", "~> 0.8"
|
|
39
39
|
spec.add_development_dependency "yard", "~> 0.9"
|
|
40
|
-
spec.add_development_dependency "guard
|
|
40
|
+
spec.add_development_dependency "guard", "~> 2.14"
|
|
41
|
+
spec.add_development_dependency "guard-minitest", "~> 2.4"
|
|
41
42
|
end
|
|
@@ -18,6 +18,44 @@ class ConfigManagerTest < Minitest::Test
|
|
|
18
18
|
assert_equal :project1, config[:projects][:default], :project1
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
def test_config_manager_read_config_parent
|
|
22
|
+
logger = Logger.new("/dev/null")
|
|
23
|
+
config_path = "config/file/path"
|
|
24
|
+
io = Minitest::Mock.new
|
|
25
|
+
parent_config = good_config
|
|
26
|
+
parent_config[:projects].delete(:project1)
|
|
27
|
+
parent_config[:projects].delete(:project2)
|
|
28
|
+
child_config = good_config
|
|
29
|
+
child_config.delete(:devices)
|
|
30
|
+
child_config.delete(:keys)
|
|
31
|
+
child_config.delete(:input_mapping)
|
|
32
|
+
child_config[:parent_config] = "config/file/path"
|
|
33
|
+
io.expect(:read, child_config.to_json)
|
|
34
|
+
io.expect(:read, parent_config.to_json)
|
|
35
|
+
config = nil
|
|
36
|
+
File.stub(:open, io) do
|
|
37
|
+
config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
|
|
38
|
+
end
|
|
39
|
+
io.verify
|
|
40
|
+
assert_equal "user", config[:devices][:roku][:user]
|
|
41
|
+
assert_equal "<app name>", config[:projects][:project1][:app_name]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_config_manager_read_config_parent_too_deep
|
|
45
|
+
logger = Logger.new("/dev/null")
|
|
46
|
+
config_path = "config/file/path"
|
|
47
|
+
io = Minitest::Mock.new
|
|
48
|
+
parent_config = good_config
|
|
49
|
+
parent_config[:parent_config] = "config/file/path"
|
|
50
|
+
10.times {|_i| io.expect(:read, parent_config.to_json)}
|
|
51
|
+
config = nil
|
|
52
|
+
File.stub(:open, io) do
|
|
53
|
+
config = RokuBuilder::ConfigManager.get_config(config: config_path, logger: logger)
|
|
54
|
+
end
|
|
55
|
+
io.verify
|
|
56
|
+
assert_nil config
|
|
57
|
+
end
|
|
58
|
+
|
|
21
59
|
def test_config_manger_load_config
|
|
22
60
|
logger = Logger.new("/dev/null")
|
|
23
61
|
target_config = File.join(File.dirname(__FILE__), "test_files", "controller_test", "configure_test.json")
|
|
@@ -76,6 +76,42 @@ class ConfigParserTest < Minitest::Test
|
|
|
76
76
|
assert_equal "/dev/nuller", configs[:project_config][:directory]
|
|
77
77
|
end
|
|
78
78
|
|
|
79
|
+
def test_manifest_config_project_directory
|
|
80
|
+
logger = Logger.new("/dev/null")
|
|
81
|
+
options = {}
|
|
82
|
+
config = good_config
|
|
83
|
+
config[:projects][:project_dir] = "/tmp"
|
|
84
|
+
config[:projects][:project1][:directory] = "project1"
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
code = nil
|
|
88
|
+
configs = nil
|
|
89
|
+
|
|
90
|
+
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
|
91
|
+
|
|
92
|
+
assert_equal RokuBuilder::SUCCESS, code
|
|
93
|
+
assert_equal Hash, config.class
|
|
94
|
+
assert_equal "/tmp/project1", configs[:project_config][:directory]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_manifest_config_key_directory
|
|
98
|
+
logger = Logger.new("/dev/null")
|
|
99
|
+
options = {key: true, project: :project2}
|
|
100
|
+
config = good_config
|
|
101
|
+
config[:keys][:key_dir] = "/tmp"
|
|
102
|
+
config[:keys][:a][:keyed_pkg] = "a"
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
code = nil
|
|
106
|
+
configs = nil
|
|
107
|
+
|
|
108
|
+
code, configs = RokuBuilder::ConfigParser.parse_config(options: options, config: config, logger: logger)
|
|
109
|
+
|
|
110
|
+
assert_equal RokuBuilder::SUCCESS, code
|
|
111
|
+
assert_equal Hash, config.class
|
|
112
|
+
assert_equal "/tmp/a", configs[:key][:keyed_pkg]
|
|
113
|
+
end
|
|
114
|
+
|
|
79
115
|
def test_setup_sideload_config
|
|
80
116
|
args = {
|
|
81
117
|
configs: {project_config: {directory: "/tmp", folders: ["a", "b"], files: ["c", "d"], excludes: []}, init_params: {}},
|
data/{tests/roku_builder/config_validator_test.rb → test/roku_builder/test_config_validator.rb}
RENAMED
|
File without changes
|
|
@@ -171,5 +171,19 @@ class ControllerTest < Minitest::Test
|
|
|
171
171
|
logger.verify
|
|
172
172
|
end
|
|
173
173
|
end
|
|
174
|
+
|
|
175
|
+
def test_controller_validate_configs
|
|
176
|
+
configs = {out: {folder: "/out/folder"}}
|
|
177
|
+
exist = lambda {|args| assert_equal "/out/folder", args; true}
|
|
178
|
+
Dir.stub(:exist?, exist) do
|
|
179
|
+
assert_equal RokuBuilder::VALID, RokuBuilder::Controller.send(:validate_configs, configs: configs)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
configs = {out: {folder: "/out/folder"}}
|
|
183
|
+
exist = lambda {|args| assert_equal "/out/folder", args; false}
|
|
184
|
+
Dir.stub(:exist?, exist) do
|
|
185
|
+
assert_equal RokuBuilder::MISSING_OUT_FOLDER, RokuBuilder::Controller.send(:validate_configs, configs: configs)
|
|
186
|
+
end
|
|
187
|
+
end
|
|
174
188
|
end
|
|
175
189
|
|
|
@@ -403,7 +403,6 @@ class ControllerCommandsTest < Minitest::Test
|
|
|
403
403
|
stager = Minitest::Mock.new
|
|
404
404
|
|
|
405
405
|
options = {print: 'title', config: "~/.roku_config.json"}
|
|
406
|
-
config = good_config
|
|
407
406
|
configs = {stage_config: {}}
|
|
408
407
|
code = nil
|
|
409
408
|
scripter_config = {attribute: :title, configs: configs}
|
|
@@ -419,4 +418,35 @@ class ControllerCommandsTest < Minitest::Test
|
|
|
419
418
|
assert_equal RokuBuilder::SUCCESS, code
|
|
420
419
|
stager.verify
|
|
421
420
|
end
|
|
421
|
+
def test_controller_commands_dostage
|
|
422
|
+
logger = Logger.new("/dev/null")
|
|
423
|
+
stager = Minitest::Mock.new
|
|
424
|
+
|
|
425
|
+
options = {dostage: true, config: "~/.roku_config.json"}
|
|
426
|
+
configs = {stage_config: {}}
|
|
427
|
+
code = nil
|
|
428
|
+
stager.expect(:stage, true)
|
|
429
|
+
|
|
430
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
|
431
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, configs: configs, logger: logger})
|
|
432
|
+
end
|
|
433
|
+
assert_equal true, code
|
|
434
|
+
stager.verify
|
|
435
|
+
end
|
|
436
|
+
|
|
437
|
+
def test_controller_commands_dounstage
|
|
438
|
+
logger = Logger.new("/dev/null")
|
|
439
|
+
stager = Minitest::Mock.new
|
|
440
|
+
|
|
441
|
+
options = {dounstage: true, config: "~/.roku_config.json"}
|
|
442
|
+
configs = {stage_config: {}}
|
|
443
|
+
code = nil
|
|
444
|
+
stager.expect(:unstage, true)
|
|
445
|
+
|
|
446
|
+
RokuBuilder::Stager.stub(:new, stager) do
|
|
447
|
+
code = RokuBuilder::Controller.send(:execute_commands, {options: options, configs: configs, logger: logger})
|
|
448
|
+
end
|
|
449
|
+
assert_equal true, code
|
|
450
|
+
stager.verify
|
|
451
|
+
end
|
|
422
452
|
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/{tests/roku_builder/manifest_manager_test.rb → test/roku_builder/test_manifest_manager.rb}
RENAMED
|
File without changes
|
|
File without changes
|
|
@@ -156,7 +156,6 @@ class NavigatorTest < Minitest::Test
|
|
|
156
156
|
init_params: {mappings: {}}
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
input = nil
|
|
160
159
|
navigator = RokuBuilder::Navigator.new(**device_config)
|
|
161
160
|
STDIN.stub(:echo=, nil) do
|
|
162
161
|
STDIN.stub(:raw!, nil) do
|
|
@@ -187,7 +186,6 @@ class NavigatorTest < Minitest::Test
|
|
|
187
186
|
init_params: {mappings: {}}
|
|
188
187
|
}
|
|
189
188
|
|
|
190
|
-
input = nil
|
|
191
189
|
navigator = RokuBuilder::Navigator.new(**device_config)
|
|
192
190
|
STDIN.stub(:echo=, nil) do
|
|
193
191
|
STDIN.stub(:raw!, nil) do
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# ********** Copyright Viacom, Inc. Apache 2.0 **********
|
|
2
|
+
|
|
3
|
+
require_relative "test_helper.rb"
|
|
4
|
+
|
|
5
|
+
class GitTest < Minitest::Test
|
|
6
|
+
|
|
7
|
+
def test_stashes_pop
|
|
8
|
+
base = Minitest::Mock.new
|
|
9
|
+
lib = Minitest::Mock.new
|
|
10
|
+
|
|
11
|
+
index = 1
|
|
12
|
+
base.expect(:lib, lib)
|
|
13
|
+
lib.expect(:stash_pop, nil, [index])
|
|
14
|
+
|
|
15
|
+
Dir.mktmpdir do |dir|
|
|
16
|
+
git = Git.init(File.join(dir, "git"))
|
|
17
|
+
stashes = git.branch.stashes
|
|
18
|
+
stashes.instance_variable_set(:@base, base)
|
|
19
|
+
stashes.pop(index)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
base.verify
|
|
23
|
+
lib.verify
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def test_stashes_drop
|
|
27
|
+
base = Minitest::Mock.new
|
|
28
|
+
lib = Minitest::Mock.new
|
|
29
|
+
|
|
30
|
+
index = 1
|
|
31
|
+
base.expect(:lib, lib)
|
|
32
|
+
lib.expect(:stash_drop, nil, [index])
|
|
33
|
+
|
|
34
|
+
Dir.mktmpdir do |dir|
|
|
35
|
+
git = Git.init(File.join(dir, "git"))
|
|
36
|
+
stashes = git.branch.stashes
|
|
37
|
+
stashes.instance_variable_set(:@base, base)
|
|
38
|
+
stashes.drop(index)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
base.verify
|
|
42
|
+
lib.verify
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_lib_pop
|
|
46
|
+
lib = Git::Lib.new
|
|
47
|
+
command = lambda{|command_sent|
|
|
48
|
+
assert_equal "stash pop", command_sent
|
|
49
|
+
}
|
|
50
|
+
lib.stub(:command, command) do
|
|
51
|
+
lib.stash_pop
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
lib = Git::Lib.new
|
|
55
|
+
command = lambda{|command_sent, args|
|
|
56
|
+
assert_equal "stash pop", command_sent
|
|
57
|
+
assert_equal [1], args
|
|
58
|
+
}
|
|
59
|
+
lib.stub(:command, command) do
|
|
60
|
+
lib.stash_pop(1)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_lib_drop
|
|
65
|
+
lib = Git::Lib.new
|
|
66
|
+
command = lambda{|command_sent|
|
|
67
|
+
assert_equal "stash drop", command_sent
|
|
68
|
+
}
|
|
69
|
+
lib.stub(:command, command) do
|
|
70
|
+
lib.stash_drop
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
lib = Git::Lib.new
|
|
74
|
+
command = lambda{|command_sent, args|
|
|
75
|
+
assert_equal "stash drop", command_sent
|
|
76
|
+
assert_equal [1], args
|
|
77
|
+
}
|
|
78
|
+
lib.stub(:command, command) do
|
|
79
|
+
lib.stash_drop(1)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
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
|
+
version: 3.12.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- greeneca
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-01-
|
|
11
|
+
date: 2017-01-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rubyzip
|
|
@@ -235,19 +235,33 @@ dependencies:
|
|
|
235
235
|
- !ruby/object:Gem::Version
|
|
236
236
|
version: '0.9'
|
|
237
237
|
- !ruby/object:Gem::Dependency
|
|
238
|
-
name: guard
|
|
238
|
+
name: guard
|
|
239
239
|
requirement: !ruby/object:Gem::Requirement
|
|
240
240
|
requirements:
|
|
241
241
|
- - "~>"
|
|
242
242
|
- !ruby/object:Gem::Version
|
|
243
|
-
version: '2.
|
|
243
|
+
version: '2.14'
|
|
244
244
|
type: :development
|
|
245
245
|
prerelease: false
|
|
246
246
|
version_requirements: !ruby/object:Gem::Requirement
|
|
247
247
|
requirements:
|
|
248
248
|
- - "~>"
|
|
249
249
|
- !ruby/object:Gem::Version
|
|
250
|
-
version: '2.
|
|
250
|
+
version: '2.14'
|
|
251
|
+
- !ruby/object:Gem::Dependency
|
|
252
|
+
name: guard-minitest
|
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
|
254
|
+
requirements:
|
|
255
|
+
- - "~>"
|
|
256
|
+
- !ruby/object:Gem::Version
|
|
257
|
+
version: '2.4'
|
|
258
|
+
type: :development
|
|
259
|
+
prerelease: false
|
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
261
|
+
requirements:
|
|
262
|
+
- - "~>"
|
|
263
|
+
- !ruby/object:Gem::Version
|
|
264
|
+
version: '2.4'
|
|
251
265
|
description: Allows the user to easily sideload, package, deeplink, test, roku apps.
|
|
252
266
|
email:
|
|
253
267
|
- charles.greene@redspace.com
|
|
@@ -289,43 +303,44 @@ files:
|
|
|
289
303
|
- lib/roku_builder/version.rb
|
|
290
304
|
- rakefile
|
|
291
305
|
- roku_builder.gemspec
|
|
292
|
-
-
|
|
293
|
-
-
|
|
294
|
-
-
|
|
295
|
-
-
|
|
296
|
-
-
|
|
297
|
-
-
|
|
298
|
-
-
|
|
299
|
-
-
|
|
300
|
-
-
|
|
301
|
-
-
|
|
302
|
-
-
|
|
303
|
-
-
|
|
304
|
-
-
|
|
305
|
-
-
|
|
306
|
-
-
|
|
307
|
-
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
315
|
-
-
|
|
316
|
-
-
|
|
317
|
-
-
|
|
318
|
-
-
|
|
319
|
-
-
|
|
320
|
-
-
|
|
321
|
-
-
|
|
322
|
-
-
|
|
323
|
-
-
|
|
324
|
-
-
|
|
325
|
-
-
|
|
326
|
-
-
|
|
327
|
-
-
|
|
328
|
-
-
|
|
306
|
+
- test/roku_builder/test_config_manager.rb
|
|
307
|
+
- test/roku_builder/test_config_parser.rb
|
|
308
|
+
- test/roku_builder/test_config_validator.rb
|
|
309
|
+
- test/roku_builder/test_controller.rb
|
|
310
|
+
- test/roku_builder/test_controller_commands.rb
|
|
311
|
+
- test/roku_builder/test_error_handler.rb
|
|
312
|
+
- test/roku_builder/test_files/controller_config_test/valid_config.json
|
|
313
|
+
- test/roku_builder/test_files/controller_test/load_config_test.json
|
|
314
|
+
- test/roku_builder/test_files/controller_test/parent_config.json
|
|
315
|
+
- test/roku_builder/test_files/controller_test/valid_config.json
|
|
316
|
+
- test/roku_builder/test_files/loader_test/a
|
|
317
|
+
- test/roku_builder/test_files/loader_test/manifest
|
|
318
|
+
- test/roku_builder/test_files/loader_test/source/b
|
|
319
|
+
- test/roku_builder/test_files/loader_test/source/c/d
|
|
320
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_comments
|
|
321
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_template
|
|
322
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_template_2
|
|
323
|
+
- test/roku_builder/test_files/manifest_manager_test/test.zip
|
|
324
|
+
- test/roku_builder/test_files/manifest_manager_test/updated_title_manifest
|
|
325
|
+
- test/roku_builder/test_files/stager_test/a
|
|
326
|
+
- test/roku_builder/test_files/stager_test/manifest
|
|
327
|
+
- test/roku_builder/test_files/stager_test/source/b
|
|
328
|
+
- test/roku_builder/test_files/stager_test/source/c/d
|
|
329
|
+
- test/roku_builder/test_helper.rb
|
|
330
|
+
- test/roku_builder/test_inspector.rb
|
|
331
|
+
- test/roku_builder/test_keyer.rb
|
|
332
|
+
- test/roku_builder/test_linker.rb
|
|
333
|
+
- test/roku_builder/test_loader.rb
|
|
334
|
+
- test/roku_builder/test_manifest_manager.rb
|
|
335
|
+
- test/roku_builder/test_monitor.rb
|
|
336
|
+
- test/roku_builder/test_navigator.rb
|
|
337
|
+
- test/roku_builder/test_packager.rb
|
|
338
|
+
- test/roku_builder/test_profiler.rb
|
|
339
|
+
- test/roku_builder/test_ruby_git.rb
|
|
340
|
+
- test/roku_builder/test_scripter.rb
|
|
341
|
+
- test/roku_builder/test_stager.rb
|
|
342
|
+
- test/roku_builder/test_tester.rb
|
|
343
|
+
- test/roku_builder/test_util.rb
|
|
329
344
|
homepage: ''
|
|
330
345
|
licenses:
|
|
331
346
|
- MIT
|
|
@@ -350,4 +365,42 @@ rubygems_version: 2.5.2
|
|
|
350
365
|
signing_key:
|
|
351
366
|
specification_version: 4
|
|
352
367
|
summary: Build Tool for Roku Apps
|
|
353
|
-
test_files:
|
|
368
|
+
test_files:
|
|
369
|
+
- test/roku_builder/test_config_manager.rb
|
|
370
|
+
- test/roku_builder/test_config_parser.rb
|
|
371
|
+
- test/roku_builder/test_config_validator.rb
|
|
372
|
+
- test/roku_builder/test_controller.rb
|
|
373
|
+
- test/roku_builder/test_controller_commands.rb
|
|
374
|
+
- test/roku_builder/test_error_handler.rb
|
|
375
|
+
- test/roku_builder/test_files/controller_config_test/valid_config.json
|
|
376
|
+
- test/roku_builder/test_files/controller_test/load_config_test.json
|
|
377
|
+
- test/roku_builder/test_files/controller_test/parent_config.json
|
|
378
|
+
- test/roku_builder/test_files/controller_test/valid_config.json
|
|
379
|
+
- test/roku_builder/test_files/loader_test/a
|
|
380
|
+
- test/roku_builder/test_files/loader_test/manifest
|
|
381
|
+
- test/roku_builder/test_files/loader_test/source/b
|
|
382
|
+
- test/roku_builder/test_files/loader_test/source/c/d
|
|
383
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_comments
|
|
384
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_template
|
|
385
|
+
- test/roku_builder/test_files/manifest_manager_test/manifest_template_2
|
|
386
|
+
- test/roku_builder/test_files/manifest_manager_test/test.zip
|
|
387
|
+
- test/roku_builder/test_files/manifest_manager_test/updated_title_manifest
|
|
388
|
+
- test/roku_builder/test_files/stager_test/a
|
|
389
|
+
- test/roku_builder/test_files/stager_test/manifest
|
|
390
|
+
- test/roku_builder/test_files/stager_test/source/b
|
|
391
|
+
- test/roku_builder/test_files/stager_test/source/c/d
|
|
392
|
+
- test/roku_builder/test_helper.rb
|
|
393
|
+
- test/roku_builder/test_inspector.rb
|
|
394
|
+
- test/roku_builder/test_keyer.rb
|
|
395
|
+
- test/roku_builder/test_linker.rb
|
|
396
|
+
- test/roku_builder/test_loader.rb
|
|
397
|
+
- test/roku_builder/test_manifest_manager.rb
|
|
398
|
+
- test/roku_builder/test_monitor.rb
|
|
399
|
+
- test/roku_builder/test_navigator.rb
|
|
400
|
+
- test/roku_builder/test_packager.rb
|
|
401
|
+
- test/roku_builder/test_profiler.rb
|
|
402
|
+
- test/roku_builder/test_ruby_git.rb
|
|
403
|
+
- test/roku_builder/test_scripter.rb
|
|
404
|
+
- test/roku_builder/test_stager.rb
|
|
405
|
+
- test/roku_builder/test_tester.rb
|
|
406
|
+
- test/roku_builder/test_util.rb
|