knapsack_pro 0.12.0 → 0.13.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: a406890fbfce1279d3666a454506cdcbd6304056
4
- data.tar.gz: 1f6a678e6b2d02275961acacef5d30aa77fa2faf
3
+ metadata.gz: 331541f2ecd345ac6c68562799b8b00d774a82ee
4
+ data.tar.gz: 6f2c4dc59a7283f77351fd640dc2632c57db07e1
5
5
  SHA512:
6
- metadata.gz: 641c3902159b91e7df6beba94c3f857620f36bce4e54e24f33c23844359eef8aae98235293c23acb4b7ac2bcf6509629f12e38530ae55d4a24457c6d96f30ee1
7
- data.tar.gz: 5362880512e95bc8f559db2c42d517c5eb011fe0861db353cafee5b55094386b9fdd69529b7dcb3cf8b1d1286d337e2b63f990fcae02022fcd2e1ea01acb5e4f
6
+ metadata.gz: ceaace21c1274a31e97c0ce6e6d7addb1c99b834242c45dc558f783845b03dc1720eabcf2b1d36325da61f8f96955b35574fd64d64453e5cde9e1b5d131aee59
7
+ data.tar.gz: b966ee4bb2bc7f7938bbaec8a4db8e850618645177ed36e88fcac5430d11be66eaacf26037955601ff03cac61235ddb5126d22b024a361640c0e28d02dc3f9cc
@@ -2,6 +2,12 @@
2
2
 
3
3
  * TODO
4
4
 
5
+ ### 0.13.0
6
+
7
+ * Add installer to get started with the knapsack_pro gem.
8
+
9
+ https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v0.12.0...v0.13.0
10
+
5
11
  ### 0.12.0
6
12
 
7
13
  * Add support for Minitest::SharedExamples
data/README.md CHANGED
@@ -15,7 +15,7 @@ The knapsack_pro gem supports:
15
15
  * [Spinach](https://github.com/codegram/spinach)
16
16
  * [Turnip](https://github.com/jnicklas/turnip)
17
17
 
18
- __Would you like to try knapsack_pro gem?__ You can [get API token here](http://knapsackpro.com).
18
+ __Would you like to try knapsack_pro gem?__ You can [get API token here](http://knapsackpro.com?utm_source=github&utm_medium=readme&utm_campaign=knapsack_pro-ruby_gem&utm_content=get_api_token).
19
19
 
20
20
  ## Is knapsack_pro gem free?
21
21
 
@@ -109,7 +109,7 @@ end
109
109
 
110
110
  And then execute:
111
111
 
112
- $ bundle
112
+ $ bundle install
113
113
 
114
114
 
115
115
  Add this lines at the bottom of `Rakefile` if your project has it:
@@ -118,6 +118,14 @@ Add this lines at the bottom of `Rakefile` if your project has it:
118
118
  KnapsackPro.load_tasks if defined?(KnapsackPro)
119
119
  ```
120
120
 
121
+ Run installer to get started. It will ask you a few questions and generate instruction steps for your project.
122
+
123
+ $ bundle exec rake knapsack_pro:install
124
+
125
+ You can read next section only if you want to better understand optional gem configuration and features.
126
+
127
+ ## How to set up
128
+
121
129
  If you are using [VCR gem](https://github.com/vcr/vcr) then add Knapsack Pro API subdomain to [ignore hosts](https://www.relishapp.com/vcr/vcr/v/2-9-3/docs/configuration/ignore-request):
122
130
 
123
131
  ```ruby
@@ -130,8 +138,6 @@ end
130
138
  WebMock.disable_net_connect!(:allow => 'api.knapsackpro.com') if defined?(WebMock)
131
139
  ```
132
140
 
133
- ## How to set up
134
-
135
141
  ### Usage (How to set up 1 of 3)
136
142
 
137
143
  __Tip:__ You can find here example of rails app with already configured knapsack_pro.
@@ -184,7 +190,7 @@ require 'knapsack_pro'
184
190
 
185
191
  # CUSTOM_CONFIG_GOES_HERE
186
192
 
187
- KnapsackPro::Adapters::CucumberAdapter.bind
193
+ KnapsackPro::Adapters::SpinachAdapter.bind
188
194
  ```
189
195
 
190
196
  #### Custom configuration
@@ -427,7 +433,7 @@ Please remember to add additional containers for your project in CircleCI settin
427
433
 
428
434
  #### Info for Travis users
429
435
 
430
- You can parallel your builds across virtual machines with [travis matrix feature](http://docs.travis-ci.com/user/speeding-up-the-build/#Parallelizing-your-builds-across-virtual-machines). Edit `.travis.yml`
436
+ You can parallelize your builds across virtual machines with [travis matrix feature](http://docs.travis-ci.com/user/speeding-up-the-build/#Parallelizing-your-builds-across-virtual-machines). Edit `.travis.yml`
431
437
 
432
438
  ```yaml
433
439
  script:
@@ -554,7 +560,7 @@ To run specs for Knapsack Pro gem type:
554
560
 
555
561
  ## Contributing
556
562
 
557
- 1. Fork it ( https://github.com/ArturT/knapsack/fork )
563
+ 1. Fork it ( https://github.com/KnapsackPro/knapsack_pro-ruby )
558
564
  2. Create your feature branch (`git checkout -b my-new-feature`)
559
565
  3. Commit your changes (`git commit -am 'Add some feature'`)
560
566
  4. Push to the branch (`git push origin my-new-feature`)
@@ -20,6 +20,7 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_dependency 'rake', '>= 0'
22
22
  spec.add_dependency 'timecop', '>= 0.1.0'
23
+ spec.add_dependency 'tty-prompt', '~> 0.7'
23
24
 
24
25
  spec.add_development_dependency 'bundler', '~> 1.6'
25
26
  spec.add_development_dependency 'rspec', '~> 3.0', '>= 2.0.0'
@@ -1,3 +1,3 @@
1
1
  module KnapsackPro
2
- VERSION = '0.12.0'
2
+ VERSION = '0.13.0'
3
3
  end
@@ -0,0 +1,302 @@
1
+ require 'knapsack_pro'
2
+ require 'tty-prompt'
3
+
4
+ def step_for_rspec(prompt)
5
+ prompt.say "Step for RSpec", color: :yellow
6
+ prompt.say "Add at the beginning of your spec/spec_helper.rb:"
7
+
8
+ prompt.say %{
9
+ require 'knapsack_pro'
10
+ KnapsackPro::Adapters::RSpecAdapter.bind
11
+ }, color: :cyan
12
+ end
13
+
14
+ def step_for_minitest(prompt)
15
+ prompt.say "Step for Minitest", color: :yellow
16
+ prompt.say "Add at the beginning of your test/test_helper.rb:"
17
+
18
+ prompt.say %{
19
+ require 'knapsack_pro'
20
+ knapsack_pro_adapter = KnapsackPro::Adapters::MinitestAdapter.bind
21
+ knapsack_pro_adapter.set_test_helper_path(__FILE__)
22
+ }, color: :cyan
23
+ end
24
+
25
+ def step_for_cucumber(prompt)
26
+ prompt.say "Step for Cucumber", color: :yellow
27
+ prompt.say "Create file features/support/knapsack_pro.rb and add there:"
28
+
29
+ prompt.say %{
30
+ require 'knapsack_pro'
31
+ KnapsackPro::Adapters::CucumberAdapter.bind
32
+ }, color: :cyan
33
+ end
34
+
35
+ def step_for_spinach(prompt)
36
+ prompt.say "Step for Spinach", color: :yellow
37
+ prompt.say "Create file features/support/knapsack_pro.rb and add there:"
38
+
39
+ prompt.say %{
40
+ require 'knapsack_pro'
41
+ KnapsackPro::Adapters::SpinachAdapter.bind
42
+ }, color: :cyan
43
+ end
44
+
45
+ def step_for_vcr(prompt)
46
+ prompt.say "Step for VCR gem", color: :yellow
47
+ prompt.say "Add Knapsack Pro API subdomain to ignore hosts"
48
+ prompt.say "in spec/spec_helper.rb or wherever is your VCR configuration"
49
+
50
+ prompt.say %{
51
+ VCR.configure do |config|
52
+ config.ignore_hosts 'localhost', '127.0.0.1', '0.0.0.0', 'api.knapsackpro.com'
53
+ end
54
+
55
+ WebMock.disable_net_connect!(:allow => 'api.knapsackpro.com') if defined?(WebMock)
56
+ }, color: :cyan
57
+ end
58
+
59
+ def step_for_ci_circle(prompt, answers)
60
+ prompt.say "Step for https://circleci.com", color: :yellow
61
+ prompt.say "Update circle.yml in your project:"
62
+
63
+ str = ''
64
+ answers[:testing_tools].each do |tool|
65
+ str << %{
66
+ # Step for #{tool}
67
+ - bundle exec rake knapsack_pro:#{tool}:
68
+ parallel: true # Caution: there are 8 spaces indentation!
69
+ }
70
+ end
71
+
72
+ prompt.say((%{
73
+ test:
74
+ override:} + str), color: :cyan)
75
+
76
+ puts
77
+ set_api_tokens_on_ci(prompt, answers)
78
+ end
79
+
80
+ def step_for_ci_travis(prompt, answers)
81
+ prompt.say "Step for https://travis-ci.org", color: :yellow
82
+ prompt.say "You can parallelize your builds across virtual machines with travis matrix feature."
83
+ prompt.say "https://docs.travis-ci.com/user/speeding-up-the-build/#Parallelizing-your-builds-across-virtual-machines"
84
+ puts
85
+ prompt.say "Update .travis.yml"
86
+
87
+ prompt.say %{
88
+ script:
89
+ }, color: :cyan
90
+
91
+ answers[:testing_tools].each do |tool|
92
+ prompt.say %{
93
+ # Step for #{tool}
94
+ - "bundle exec rake knapsack_pro:#{tool}"
95
+ }, color: :cyan
96
+ end
97
+
98
+ prompt.say %{
99
+ env:
100
+ global:
101
+ - KNAPSACK_PRO_CI_NODE_TOTAL=2
102
+ }, color: :cyan
103
+
104
+ prompt.say %{
105
+ matrix:
106
+ - KNAPSACK_PRO_CI_NODE_INDEX=0
107
+ - KNAPSACK_PRO_CI_NODE_INDEX=1
108
+ }, color: :cyan
109
+
110
+ puts
111
+ prompt.say "If you want more parallel jobs then update accordingly:"
112
+ tip_ci_node_total_and_index(prompt)
113
+
114
+ puts
115
+ prompt.say "Open travis settings in web interface to add there Knapsack Pro API token."
116
+ puts
117
+ set_api_tokens_on_ci(prompt, answers)
118
+ end
119
+
120
+ def step_for_ci_buildkite(prompt, answers)
121
+ prompt.say "Step for https://buildkite.com", color: :yellow
122
+ prompt.say "Please configure the parallelism parameter in your build step and run the appropiate command in your build:"
123
+
124
+ answers[:testing_tools].each do |tool|
125
+ prompt.say %{
126
+ # Step for #{tool}
127
+ bundle exec rake knapsack_pro:#{tool}
128
+ }, color: :cyan
129
+ end
130
+
131
+ puts
132
+ set_api_tokens_on_ci(prompt, answers)
133
+ end
134
+
135
+ def step_for_ci_semaphore(prompt, answers)
136
+ prompt.say "Step for https://semaphoreci.com", color: :yellow
137
+ prompt.say "Set knapsack pro command for each parallel thread. Here is example:"
138
+
139
+ answers[:testing_tools].each do |tool|
140
+ puts
141
+ prompt.say "Step for #{tool}"
142
+ prompt.say %{
143
+ # Thread 1
144
+ bundle exec rake knapsack_pro:#{tool}
145
+
146
+ # Thread 2
147
+ bundle exec rake knapsack_pro:#{tool}
148
+ }, color: :cyan
149
+ end
150
+
151
+ puts
152
+ set_api_tokens_on_ci(prompt, answers)
153
+ end
154
+
155
+ def step_for_ci_snap_ci(prompt, answers)
156
+ prompt.say "Step for https://snap-ci.com", color: :yellow
157
+ prompt.say "Please configure number of workers for your project in configuration settings in order to enable parallelism."
158
+ prompt.say "Next thing is to set below commands to be executed in your stage:"
159
+
160
+ answers[:testing_tools].each do |tool|
161
+ prompt.say %{
162
+ # Step for #{tool}
163
+ bundle exec rake knapsack_pro:#{tool}
164
+ }, color: :cyan
165
+ end
166
+
167
+ puts
168
+ set_api_tokens_on_ci(prompt, answers)
169
+ end
170
+
171
+ def step_for_ci_other(prompt, answers)
172
+ prompt.say "Step for other CI provider", color: :yellow
173
+ prompt.say "Set below global variables on your CI server."
174
+ puts
175
+
176
+ prompt.say "Git installed on the CI server will be used to determine branch name and current commit hash."
177
+
178
+ prompt.say %{
179
+ KNAPSACK_PRO_REPOSITORY_ADAPTER=git
180
+ }, color: :cyan
181
+ puts
182
+
183
+ prompt.say "Path to the project repository on CI server, for instance:"
184
+ prompt.say %{
185
+ KNAPSACK_PRO_PROJECT_DIR=/home/ubuntu/my-app-repository
186
+ }, color: :cyan
187
+ puts
188
+
189
+ prompt.say "You can learn more about those variables here:"
190
+ prompt.say "https://github.com/KnapsackPro/knapsack_pro-ruby#when-you-set-global-variable-knapsack_pro_repository_adaptergit-required-when-ci-provider-is-not-supported"
191
+ puts
192
+
193
+ set_api_tokens_on_ci(prompt, answers)
194
+
195
+ # set test run command on CI server
196
+ prompt.say "Set test run command on CI server", color: :yellow
197
+ prompt.say "You must set command responsible for running tests for each CI node."
198
+ prompt.say "Let's assume you have 2 CI nodes. Here are commands you need to run for each CI node."
199
+
200
+ answers[:testing_tools].each do |tool|
201
+ puts
202
+ prompt.say "Step for #{tool}"
203
+ prompt.say %{
204
+ # Command for first CI node
205
+ $ KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=0 bundle exec rake knapsack_pro:#{tool}
206
+
207
+ # Command for second CI node
208
+ $ KNAPSACK_PRO_CI_NODE_TOTAL=2 KNAPSACK_PRO_CI_NODE_INDEX=1 bundle exec rake knapsack_pro:#{tool}
209
+ }, color: :cyan
210
+ end
211
+ puts
212
+ prompt.say "If you have more CI nodes then update accordingly:"
213
+ tip_ci_node_total_and_index(prompt)
214
+ puts
215
+ end
216
+
217
+ def tip_ci_node_total_and_index(prompt)
218
+ prompt.say %{
219
+ KNAPSACK_PRO_CI_NODE_TOTAL - total number of your CI nodes
220
+ KNAPSACK_PRO_CI_NODE_INDEX - starts from 0, it's index of each CI node
221
+ }, color: :cyan
222
+ end
223
+
224
+ def set_api_tokens_on_ci(prompt, answers)
225
+ prompt.say "Set API token", color: :yellow
226
+ prompt.say "You must set different API token on your CI server for each test suite you have:"
227
+ puts
228
+
229
+ str = ''
230
+ answers[:testing_tools].each do |tool|
231
+ str << "KNAPSACK_PRO_TEST_SUITE_TOKEN_#{tool.upcase}\n"
232
+ end
233
+ prompt.say str, color: :cyan
234
+
235
+ prompt.say "You can generate more API tokens after sign in on https://knapsackpro.com"
236
+ puts
237
+ end
238
+
239
+ namespace :knapsack_pro do
240
+ task :install do
241
+ prompt = TTY::Prompt.new
242
+ answers = {}
243
+
244
+ puts
245
+ prompt.say "Welcome to knapsack_pro gem installer."
246
+ puts
247
+
248
+ TESTING_TOOLS_CHOICES = {
249
+ 'RSpec' => :rspec,
250
+ 'Minitest' => :minitest,
251
+ 'Cucumber' => :cucumber,
252
+ 'Spinach' => :spinach,
253
+ }
254
+ answers[:testing_tools] = []
255
+ while answers[:testing_tools].empty?
256
+ answers[:testing_tools] = prompt.multi_select("Choose your testing tools:", TESTING_TOOLS_CHOICES)
257
+ end
258
+
259
+ answers[:has_vcr] = prompt.yes?('Do you use VCR gem?')
260
+
261
+ CI_PROVIDER_CHOICES = {
262
+ 'https://circleci.com' => :circle,
263
+ 'https://travis-ci.org' => :travis,
264
+ 'https://buildkite.com' => :buildkite,
265
+ 'https://semaphoreci.com' => :semaphore,
266
+ 'https://snap-ci.com' => :snap_ci,
267
+ 'other' => :other,
268
+ }
269
+ answers[:ci] = prompt.select("What is your CI provider?", CI_PROVIDER_CHOICES)
270
+
271
+ puts
272
+
273
+ # Instructions how to set up the gem
274
+ puts
275
+ puts
276
+ prompt.say "###### Please follow below instructions to finish configuration ######", color: :green
277
+ puts
278
+
279
+ answers[:testing_tools].each do |tool|
280
+ send("step_for_#{tool}", prompt)
281
+ puts
282
+ end
283
+
284
+ if answers[:has_vcr]
285
+ step_for_vcr(prompt)
286
+ puts
287
+ end
288
+
289
+ send("step_for_ci_#{answers[:ci]}", prompt, answers)
290
+
291
+ prompt.say "Now you are ready to use the gem!"
292
+ prompt.say "Please push a new commit to repository so knapsack_pro gem will record time execution of your test suite."
293
+ prompt.say "Your second tests run on CI will be parallelized with optimal test suite split."
294
+ puts
295
+ puts
296
+ prompt.say "You can learn more about custom configuration and other features:"
297
+ prompt.say "https://knapsackpro.com/features"
298
+ prompt.say "https://github.com/KnapsackPro/knapsack_pro-ruby#table-of-contents"
299
+ puts
300
+ prompt.say "###### Please follow above instructions to finish configuration ######", color: :green
301
+ end
302
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knapsack_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ArturT
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-04 00:00:00.000000000 Z
11
+ date: 2016-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.1.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-prompt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.7'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.7'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -249,6 +263,7 @@ files:
249
263
  - lib/knapsack_pro/version.rb
250
264
  - lib/tasks/cucumber.rake
251
265
  - lib/tasks/encrypted_test_file_names.rake
266
+ - lib/tasks/install.rake
252
267
  - lib/tasks/minitest.rake
253
268
  - lib/tasks/rspec.rake
254
269
  - lib/tasks/salt.rake