roku_builder 3.3.2
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 +7 -0
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +101 -0
- data/Guardfile +21 -0
- data/LICENSE.txt +22 -0
- data/README.md +282 -0
- data/bin/roku +152 -0
- data/config.json.example +28 -0
- data/lib/roku_builder.rb +32 -0
- data/lib/roku_builder/config_manager.rb +157 -0
- data/lib/roku_builder/controller.rb +582 -0
- data/lib/roku_builder/inspector.rb +90 -0
- data/lib/roku_builder/keyer.rb +52 -0
- data/lib/roku_builder/linker.rb +46 -0
- data/lib/roku_builder/loader.rb +197 -0
- data/lib/roku_builder/manifest_manager.rb +63 -0
- data/lib/roku_builder/monitor.rb +62 -0
- data/lib/roku_builder/navigator.rb +107 -0
- data/lib/roku_builder/packager.rb +47 -0
- data/lib/roku_builder/tester.rb +32 -0
- data/lib/roku_builder/util.rb +31 -0
- data/lib/roku_builder/version.rb +4 -0
- data/rakefile +8 -0
- data/roku_builder.gemspec +36 -0
- data/tests/roku_builder/config_manager_test.rb +400 -0
- data/tests/roku_builder/controller_test.rb +250 -0
- data/tests/roku_builder/inspector_test.rb +153 -0
- data/tests/roku_builder/keyer_test.rb +88 -0
- data/tests/roku_builder/linker_test.rb +37 -0
- data/tests/roku_builder/loader_test.rb +153 -0
- data/tests/roku_builder/manifest_manager_test.rb +25 -0
- data/tests/roku_builder/monitor_test.rb +34 -0
- data/tests/roku_builder/navigator_test.rb +72 -0
- data/tests/roku_builder/packager_test.rb +125 -0
- data/tests/roku_builder/test_files/controller_test/load_config_test.json +28 -0
- data/tests/roku_builder/test_files/controller_test/valid_config.json +28 -0
- data/tests/roku_builder/test_files/loader_test/c +0 -0
- data/tests/roku_builder/test_files/loader_test/manifest +0 -0
- data/tests/roku_builder/test_files/loader_test/source/a +0 -0
- data/tests/roku_builder/test_files/loader_test/source/b +0 -0
- data/tests/roku_builder/test_files/manifest_manager_test/manifest_template +2 -0
- data/tests/roku_builder/test_helper.rb +6 -0
- data/tests/roku_builder/tester_test.rb +33 -0
- data/tests/roku_builder/util_test.rb +23 -0
- metadata +286 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4fb0f1a154541f38d45f4cec4a78800d5442c4de
|
4
|
+
data.tar.gz: 04f1448deacf24c15223993745750f9298b6107a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 40eb84586c9745d4faac4eae184c02be437966d65f71e194d0befb18c78e98e4f73a3fce23ab755ea5721242c928dec6462dea5969c75bd890da8933be0f054d
|
7
|
+
data.tar.gz: 0370b82f8bf8d258f2c9ab04b88b4624e73129dd01db3e38cc97a1c15e123a7b2064a9e4820d63b3662fb8f2ca6bf24c1b6d2eb13745829cf7add45acec3ae77
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
roku_builder (3.3.1)
|
5
|
+
faraday (~> 0.9)
|
6
|
+
faraday-digestauth (~> 0.2)
|
7
|
+
git (~> 1.2.9)
|
8
|
+
net-ping (~> 1.7)
|
9
|
+
rubyzip (~> 1.1)
|
10
|
+
|
11
|
+
GEM
|
12
|
+
remote: https://rubygems.org/
|
13
|
+
specs:
|
14
|
+
byebug (3.5.1)
|
15
|
+
columnize (~> 0.8)
|
16
|
+
debugger-linecache (~> 1.2)
|
17
|
+
slop (~> 3.6)
|
18
|
+
coderay (1.1.0)
|
19
|
+
columnize (0.9.0)
|
20
|
+
debugger-linecache (1.2.0)
|
21
|
+
docile (1.1.5)
|
22
|
+
em-websocket (0.5.1)
|
23
|
+
eventmachine (>= 0.12.9)
|
24
|
+
http_parser.rb (~> 0.6.0)
|
25
|
+
eventmachine (1.0.9.1)
|
26
|
+
faraday (0.9.2)
|
27
|
+
multipart-post (>= 1.2, < 3)
|
28
|
+
faraday-digestauth (0.2.1)
|
29
|
+
faraday (~> 0.7)
|
30
|
+
net-http-digest_auth (~> 1.4)
|
31
|
+
ffi (1.9.10)
|
32
|
+
formatador (0.2.5)
|
33
|
+
git (1.2.9.1)
|
34
|
+
guard (2.13.0)
|
35
|
+
formatador (>= 0.2.4)
|
36
|
+
listen (>= 2.7, <= 4.0)
|
37
|
+
lumberjack (~> 1.0)
|
38
|
+
nenv (~> 0.1)
|
39
|
+
notiffany (~> 0.0)
|
40
|
+
pry (>= 0.9.12)
|
41
|
+
shellany (~> 0.0)
|
42
|
+
thor (>= 0.18.1)
|
43
|
+
guard-compat (1.2.1)
|
44
|
+
guard-livereload (2.5.2)
|
45
|
+
em-websocket (~> 0.5)
|
46
|
+
guard (~> 2.8)
|
47
|
+
guard-compat (~> 1.0)
|
48
|
+
multi_json (~> 1.8)
|
49
|
+
http_parser.rb (0.6.0)
|
50
|
+
json (1.8.3)
|
51
|
+
listen (3.0.6)
|
52
|
+
rb-fsevent (>= 0.9.3)
|
53
|
+
rb-inotify (>= 0.9.7)
|
54
|
+
lumberjack (1.0.10)
|
55
|
+
method_source (0.8.2)
|
56
|
+
minitest (5.8.4)
|
57
|
+
minitest-autotest (1.0.2)
|
58
|
+
minitest-server (~> 1.0)
|
59
|
+
minitest-server (1.0.3)
|
60
|
+
minitest (~> 5.0)
|
61
|
+
multi_json (1.11.2)
|
62
|
+
multipart-post (2.0.0)
|
63
|
+
nenv (0.3.0)
|
64
|
+
net-http-digest_auth (1.4)
|
65
|
+
net-ping (1.7.8)
|
66
|
+
notiffany (0.0.8)
|
67
|
+
nenv (~> 0.1)
|
68
|
+
shellany (~> 0.0)
|
69
|
+
pry (0.10.3)
|
70
|
+
coderay (~> 1.1.0)
|
71
|
+
method_source (~> 0.8.1)
|
72
|
+
slop (~> 3.4)
|
73
|
+
rake (10.5.0)
|
74
|
+
rb-fsevent (0.9.7)
|
75
|
+
rb-inotify (0.9.7)
|
76
|
+
ffi (>= 0.5.0)
|
77
|
+
rubyzip (1.1.7)
|
78
|
+
shellany (0.0.1)
|
79
|
+
simplecov (0.11.2)
|
80
|
+
docile (~> 1.1.0)
|
81
|
+
json (~> 1.8)
|
82
|
+
simplecov-html (~> 0.10.0)
|
83
|
+
simplecov-html (0.10.0)
|
84
|
+
slop (3.6.0)
|
85
|
+
thor (0.19.1)
|
86
|
+
yard (0.8.7.6)
|
87
|
+
|
88
|
+
PLATFORMS
|
89
|
+
ruby
|
90
|
+
|
91
|
+
DEPENDENCIES
|
92
|
+
bundler (~> 1.7)
|
93
|
+
byebug (~> 3.5)
|
94
|
+
guard-livereload (~> 2.5)
|
95
|
+
minitest (~> 5.8)
|
96
|
+
minitest-autotest (~> 1.0)
|
97
|
+
minitest-server (~> 1.0)
|
98
|
+
rake (~> 10.0)
|
99
|
+
roku_builder!
|
100
|
+
simplecov (~> 0.11)
|
101
|
+
yard (~> 0.8.7)
|
data/Guardfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
guard 'livereload' do
|
19
|
+
watch(%r{lib/roku_builder/.+\.rb})
|
20
|
+
watch(%r{lib/roku_builder.rb})
|
21
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2016 Viacom Inc.
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
# RokuBuilder
|
2
|
+
|
3
|
+
A tool to help with Roku Development. Assists with the following roku
|
4
|
+
development tasks:
|
5
|
+
|
6
|
+
* Sideloading
|
7
|
+
* Packaging
|
8
|
+
* Building
|
9
|
+
* Testing
|
10
|
+
* Deeplink testing
|
11
|
+
* Intergration test scripting
|
12
|
+
* Manifest Updating
|
13
|
+
* App Deleteing
|
14
|
+
* Package Inspection
|
15
|
+
* Monitoring logs
|
16
|
+
|
17
|
+
The tool allows scripting of the following interactions with the roku:
|
18
|
+
|
19
|
+
* Conroller inputs
|
20
|
+
* Text Input
|
21
|
+
* Screencaptures
|
22
|
+
|
23
|
+
Other tasks the tool can complete:
|
24
|
+
|
25
|
+
* Configuration Generation
|
26
|
+
* Configuration Validation
|
27
|
+
* Configuration Updating
|
28
|
+
|
29
|
+
|
30
|
+
## Installation
|
31
|
+
|
32
|
+
Install it yourself with:
|
33
|
+
|
34
|
+
$ gem install roku_builder
|
35
|
+
|
36
|
+
## Usage
|
37
|
+
|
38
|
+
#### Configuration
|
39
|
+
|
40
|
+
The gem must have a configuration file. To generate this file you can run the
|
41
|
+
following command:
|
42
|
+
|
43
|
+
$ roku --configure
|
44
|
+
|
45
|
+
This will create the file '~/.roku_config.json' with a default configuration.
|
46
|
+
Edit this file to add appropriate values. The following are default
|
47
|
+
configuration options:
|
48
|
+
|
49
|
+
* devices: information for accessing devices
|
50
|
+
* devices -> default: id of the default device
|
51
|
+
* projects: this is a hash of project objects
|
52
|
+
* projects -> default: the key for the default project
|
53
|
+
|
54
|
+
Each Device has the following options:
|
55
|
+
|
56
|
+
* ip: ip address of the device
|
57
|
+
* user: dev username for the roku device
|
58
|
+
* password: dev password for the roku device
|
59
|
+
|
60
|
+
Each project has the following options:
|
61
|
+
|
62
|
+
* directory: full path of the git repository the houses the roku app
|
63
|
+
* app_name: Name used when packaging the app
|
64
|
+
* stages: a hash of stage objects
|
65
|
+
|
66
|
+
Each stage has the following options:
|
67
|
+
|
68
|
+
* branch: name of the branch for the given stage
|
69
|
+
* key: has of key options for signing a package
|
70
|
+
* key -> keyed_pkg: path to a pkg file that has been signed
|
71
|
+
* key -> password: password for the signed pkg
|
72
|
+
|
73
|
+
|
74
|
+
#### Sideloading
|
75
|
+
|
76
|
+
There are several ways to side load an app. You can sideload based on a stage,
|
77
|
+
an arbitrary git referance or the working directory.
|
78
|
+
|
79
|
+
To sideload a stage you can run the following command:
|
80
|
+
|
81
|
+
$ roku --sideload --stage production
|
82
|
+
|
83
|
+
This will sideload the production stage. By default the production stage is
|
84
|
+
used. So the above is equivalent to the following:
|
85
|
+
|
86
|
+
$ roku --sideload
|
87
|
+
|
88
|
+
and:
|
89
|
+
|
90
|
+
$ roku -l
|
91
|
+
|
92
|
+
To sideload via a git referance you can run the following command
|
93
|
+
|
94
|
+
$ roku --sideload --ref master
|
95
|
+
|
96
|
+
This will sideload the master branch. The following is equivalent:
|
97
|
+
|
98
|
+
$ roku -lr master
|
99
|
+
|
100
|
+
To sideload the current working directory you can run the following:
|
101
|
+
|
102
|
+
$ roku --sideload --working
|
103
|
+
|
104
|
+
or:
|
105
|
+
|
106
|
+
$ roku -lw
|
107
|
+
|
108
|
+
If you choose to sideload via stage or git referance then the roku tool with
|
109
|
+
stash any changes in the working directory and then apply the stash after. From
|
110
|
+
time to time there may be an issue with this and you will have to clear the
|
111
|
+
stash manually.
|
112
|
+
|
113
|
+
You can also sideload the current directory even if it is not setup as a
|
114
|
+
project. If the directory has a manifest file then you can run the following
|
115
|
+
command:
|
116
|
+
|
117
|
+
$ roku --sideload --current
|
118
|
+
|
119
|
+
or:
|
120
|
+
|
121
|
+
$ roku -lc
|
122
|
+
|
123
|
+
#### Packaging
|
124
|
+
|
125
|
+
To package an app you need to have at least on stage set up in your
|
126
|
+
configuration file that has a key. Once you have that setup then you can run
|
127
|
+
the following:
|
128
|
+
|
129
|
+
$ roku --package --stage production
|
130
|
+
|
131
|
+
or:
|
132
|
+
|
133
|
+
$ roku -ps production
|
134
|
+
|
135
|
+
#### Building
|
136
|
+
|
137
|
+
You can build an app to be sideloaded later or by someone else by using the
|
138
|
+
following command:
|
139
|
+
|
140
|
+
$ roku --build --stage production
|
141
|
+
|
142
|
+
or:
|
143
|
+
|
144
|
+
$ roku -bw
|
145
|
+
|
146
|
+
|
147
|
+
#### Monitoring Logs
|
148
|
+
|
149
|
+
The tool has the ability to monitor the different development logs. You use
|
150
|
+
the feature using the command --monitor and passing in the type of log you want
|
151
|
+
to monitor. For example the following command will monitor the main
|
152
|
+
brightscript log:
|
153
|
+
|
154
|
+
$ roku --monitor main
|
155
|
+
|
156
|
+
or:
|
157
|
+
$ roku -m main
|
158
|
+
|
159
|
+
The following are the options to be passed in as type:
|
160
|
+
|
161
|
+
* main
|
162
|
+
* sg
|
163
|
+
* task1
|
164
|
+
* task2
|
165
|
+
* task3
|
166
|
+
* taskX
|
167
|
+
|
168
|
+
The tool connects to the roku via telnet and prints everything that it
|
169
|
+
recieves. It will continue indefinatly unless it is stopped via Ctrl-c or
|
170
|
+
entering "q".
|
171
|
+
|
172
|
+
#### Testing
|
173
|
+
|
174
|
+
There are a few tools that can be used for testing. The testing command will
|
175
|
+
sideload the branch defined in the testing stage. It will then connect to the
|
176
|
+
device via telnet and look for the following strings and prints everything
|
177
|
+
inbetween them:
|
178
|
+
|
179
|
+
Start delimiter: \*\*\*\*\* STARTING TESTS \*\*\*\*\*
|
180
|
+
|
181
|
+
End delimiter: \*\*\*\*\* ENDING TESTS \*\*\*\*\*
|
182
|
+
|
183
|
+
This is designed to be used with the brstest library. Ensure that if you use
|
184
|
+
this that the app the prints out a sufficent number of lines after the tests
|
185
|
+
are run otherwise it will just grab the test run from last time.
|
186
|
+
|
187
|
+
Another tool for testing is the navigate command. You can use this to script
|
188
|
+
navigation on the roku console. The command is used as follows:
|
189
|
+
|
190
|
+
$ roku --navigate <command>
|
191
|
+
|
192
|
+
The possible commands are as follows:
|
193
|
+
|
194
|
+
* up
|
195
|
+
* down
|
196
|
+
* right
|
197
|
+
* left
|
198
|
+
* select
|
199
|
+
* back
|
200
|
+
* home
|
201
|
+
* rew
|
202
|
+
* ff
|
203
|
+
* play
|
204
|
+
* replay
|
205
|
+
|
206
|
+
There is also a command that will allow you to send text to the roku. It is
|
207
|
+
used as follows:
|
208
|
+
|
209
|
+
$ roku --type <text>
|
210
|
+
|
211
|
+
#### Other Tools
|
212
|
+
|
213
|
+
You can restart the roku device using the following command:
|
214
|
+
|
215
|
+
$ roku --restart
|
216
|
+
|
217
|
+
You can deeplink into your app using the following command:
|
218
|
+
|
219
|
+
$ roku --deeplink --mgid <mgid> --content-type <content type>
|
220
|
+
|
221
|
+
This is currently setup to work with one specific app. It will be generalized
|
222
|
+
in the future.
|
223
|
+
|
224
|
+
You can delete the currently sideloaded app using the following command:
|
225
|
+
|
226
|
+
$ roku --delete
|
227
|
+
|
228
|
+
You can use a differnt configuration file useing the following option:
|
229
|
+
|
230
|
+
& roku --delete --config <path>
|
231
|
+
|
232
|
+
This path will be expanded so you do not have to use the full path
|
233
|
+
|
234
|
+
## Projects
|
235
|
+
|
236
|
+
The project used in the above examples is a smart default. If you are in a
|
237
|
+
project directory then it will use that project. If you not then it will use
|
238
|
+
the defualt that you have defined in your config. You can define what project
|
239
|
+
you want the command to be run on using the --project option:
|
240
|
+
|
241
|
+
$ roku -lw --project project1
|
242
|
+
|
243
|
+
or:
|
244
|
+
|
245
|
+
$ roku -lw -P project1
|
246
|
+
|
247
|
+
## Devices
|
248
|
+
|
249
|
+
In the examples above the default device is used. If you have multiple devices
|
250
|
+
defined in your config then you can select a different one using the following
|
251
|
+
option:
|
252
|
+
|
253
|
+
$ roku -lw --device device2
|
254
|
+
|
255
|
+
or:
|
256
|
+
|
257
|
+
$ roku -lw -D device2
|
258
|
+
|
259
|
+
|
260
|
+
## Documentation
|
261
|
+
|
262
|
+
To generate the documentation run the following command in the project root
|
263
|
+
directory:
|
264
|
+
|
265
|
+
$ yard doc --protected lib
|
266
|
+
|
267
|
+
|
268
|
+
## Improvements
|
269
|
+
|
270
|
+
* Increase testing
|
271
|
+
* More Unit Tests
|
272
|
+
* Intergration Tests
|
273
|
+
* Move RokuBuilder::Controller to RokuBuilder?
|
274
|
+
* Allow start and end delimiter for tests to be configured
|
275
|
+
|
276
|
+
## Contributing
|
277
|
+
|
278
|
+
1. Fork it
|
279
|
+
2. Create your feature branch (`git checkout -b feature/my-new-feature`)
|
280
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
281
|
+
4. Push to the branch (`git push origin feature/my-new-feature`)
|
282
|
+
5. Create a new Pull Request
|