hoe-travis 1.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.
data/.autotest ADDED
@@ -0,0 +1,8 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'autotest/restart'
4
+
5
+ Autotest.add_hook :initialize do |at|
6
+ at.testlib = 'minitest/autorun'
7
+ end
8
+
data/.gemtest ADDED
File without changes
data/History.txt ADDED
@@ -0,0 +1,5 @@
1
+ === 1.0 / 2012-02-15
2
+
3
+ * Major enhancements
4
+ * Birthday!
5
+
data/Manifest.txt ADDED
@@ -0,0 +1,7 @@
1
+ .autotest
2
+ History.txt
3
+ Manifest.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/hoe/travis.rb
7
+ test/test_hoe_travis.rb
data/README.rdoc ADDED
@@ -0,0 +1,115 @@
1
+ = hoe-travis
2
+
3
+ home :: https://github.com/drbrain/hoe-travis
4
+ rdoc :: http://docs.seattlerb.org/hoe-travis
5
+ bugs :: https://github.com/drbrain/hoe-travis/issues
6
+
7
+ == Description
8
+
9
+ hoe-travis is a Hoe plugin that allows your gem to gain maximum benefit from
10
+ http://travis-ci.org. The plugin contains a <code>.travis.yml</code>
11
+ generator and a pre-defined rake task which runs the tests and ensures your
12
+ manifest file is correct.
13
+
14
+ With hoe-travis it is easy to add additional checks. Custom checks can be
15
+ easily verified locally by simply running a rake task instead of committing
16
+ and pushing a change, waiting for travis to run your tests, then trying a new
17
+ commit if you didn't fix the problem.
18
+
19
+ == Features
20
+
21
+ * .travis.yml generation task
22
+ * Pre-defined rake tasks which are run by travis-ci
23
+ * Easy to hook up rake tasks for additional travis-ci setup or checks
24
+
25
+ == Getting Started
26
+
27
+ If you're not already using Hoe with your project, see: http://docs.seattlerb.org/hoe/Hoe.pdf
28
+
29
+ To get started with hoe-travis, first install it:
30
+
31
+ sudo gem install hoe-travis
32
+
33
+ Then add hoe-travis as a plugin to your Rakefile:
34
+
35
+ Hoe.plugin :travis
36
+
37
+ Then generate a .travis.yml
38
+
39
+ $ rake travis:generate
40
+
41
+ This will bring up your EDITOR with your travis.yml for any desired tweaks.
42
+ Save the file when you're done, then check in your .travis.yml. For further
43
+ details of how the configuration is generated see Hoe::Travis@Setup and
44
+ Hoe::Travis@Hoe+Configuration.
45
+
46
+ (If you don't have the EDITOR environment variable set to your favorite
47
+ editor, please do so. Note that some editors may need extra flags to wait for
48
+ files to be edited. For MacVIM, <code>export EDITOR="mvim
49
+ --remote-wait"</code> will wait for the file to be closed before returning.)
50
+
51
+ If you would like to make future changes to your .travis.yml you can run:
52
+
53
+ $ rake travis:edit
54
+
55
+ Which, like <code>travis:generate</code>, will bring up your EDITOR with your
56
+ .travis.yml. When you've saved the file the changes will be checked by
57
+ travis-lint before writing back to .travis.yml and give you a chance to
58
+ correct them.
59
+
60
+ If you've edited your .travis.yml by hand you can run:
61
+
62
+ $ rake travis:check
63
+
64
+ to check it.
65
+
66
+ Testing your travis-ci setup is easy with hoe-travis. You can run:
67
+
68
+ $ rake travis
69
+
70
+ to run the same checks travis-ci will. By default this includes running the
71
+ tests and ensuring the Manifest.txt file is complete. There is also the
72
+ before script:
73
+
74
+ $ rake travis:before
75
+
76
+ Which will run the setup tasks needed for your project.
77
+
78
+ You can also enable and disable travis-ci using <code>rake
79
+ travis:enable</code> and <code>rake travis:disable</code>. See
80
+ Hoe::Travis@Setup for details.
81
+
82
+ == Developers
83
+
84
+ After checking out the source, run:
85
+
86
+ $ rake newb
87
+
88
+ This task will install any missing dependencies, run the tests/specs,
89
+ and generate the RDoc.
90
+
91
+ == License
92
+
93
+ (The MIT License)
94
+
95
+ Copyright (c) Eric Hodel
96
+
97
+ Permission is hereby granted, free of charge, to any person obtaining
98
+ a copy of this software and associated documentation files (the
99
+ 'Software'), to deal in the Software without restriction, including
100
+ without limitation the rights to use, copy, modify, merge, publish,
101
+ distribute, sublicense, and/or sell copies of the Software, and to
102
+ permit persons to whom the Software is furnished to do so, subject to
103
+ the following conditions:
104
+
105
+ The above copyright notice and this permission notice shall be
106
+ included in all copies or substantial portions of the Software.
107
+
108
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
109
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
110
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
111
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
112
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
113
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
114
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
115
+
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ # -*- ruby -*-
2
+
3
+ # Bootstrap for travis-ci
4
+ $LOAD_PATH.unshift 'lib'
5
+
6
+ require 'rubygems'
7
+ require 'hoe'
8
+
9
+ Hoe.plugin :minitest
10
+ Hoe.plugin :git
11
+ Hoe.plugin :travis
12
+
13
+ Hoe.spec 'hoe-travis' do
14
+ developer 'Eric Hodel', 'drbrain@segment7.net'
15
+
16
+ rdoc_locations << 'docs.seattlerb.org:/data/www/docs.seattlerb.org/hoe-travis/'
17
+
18
+ self.extra_deps << ['travis-lint', '~> 1.2']
19
+ # this explicit dependency is so `gem install hoe-travis` will fetch
20
+ # hoe and rake, simplifying the before_script command list
21
+ self.extra_deps << ['hoe', '~> 2.14']
22
+ end
23
+
24
+ # vim: syntax=ruby
data/lib/hoe/travis.rb ADDED
@@ -0,0 +1,537 @@
1
+ require 'hoe'
2
+ require 'tempfile'
3
+ require 'net/http'
4
+ require 'net/https' # for Ruby 1.8
5
+ require 'uri'
6
+
7
+ ##
8
+ # The travis plugin for Hoe manages your .travis.yml file for you in a clean
9
+ # and extensible way you can use across projects or by through integration
10
+ # with other Hoe plugins.
11
+ #
12
+ # == Setup
13
+ #
14
+ # The travis plugin can be used without this setup. By following these
15
+ # instructions you can enable and disable a travis-ci hook for your ruby
16
+ # projects from rake through <code>rake travis:enable</code> and <code>rake
17
+ # travis:disable</code>.
18
+ #
19
+ # === Github API access
20
+ #
21
+ # Set your github username and password in your ~/.gitconfig:
22
+ #
23
+ # git config --global github.user username
24
+ # git config --global github.password password
25
+ # chmod 600 ~/.gitconfig
26
+ #
27
+ # === Travis token
28
+ #
29
+ # As of this writing there isn't an easy way to retrieve the travis token
30
+ # programmatically. You can find your travis token at
31
+ # http://travis-ci.org/profile underneath your github username and email
32
+ # address.
33
+ #
34
+ # To set this in your hoerc run <code>rake config_hoe</code> and edit the
35
+ # "token:" entry.
36
+ #
37
+ # == Tasks
38
+ #
39
+ # You can extend the following tasks in your Rakefile or Hoe plugins to add
40
+ # extra checks to travis-ci.
41
+ #
42
+ # travis::
43
+ # Run by travis-ci. Defaults to running your tests and checking your
44
+ # manifest file. You can run this locally to check what travis-ci will do.
45
+ #
46
+ # travis:before::
47
+ # Runs as the before_script on travis-ci. Defaults to installing your
48
+ # development dependencies.
49
+ #
50
+ # travis:check::
51
+ # Runs travis-lint against your .travis.yml.
52
+ #
53
+ # travis:edit::
54
+ # Pulls up your .travis.yml in your EDITOR and runs travis-lint upon saving.
55
+ # Does not allow you to save a bad .travis.yml.
56
+ #
57
+ # travis:generate::
58
+ # Generates a .travis.yml based on your Hoe spec and .hoerc then brings it
59
+ # up in your EDITOR and runs travis-lint upon saving. Does not allow you to
60
+ # save a bad .travis.yml.
61
+ #
62
+ # travis:enable::
63
+ # Enables the travis hook on github.com. Requires further setup as
64
+ # described below.
65
+ #
66
+ # travis:disable::
67
+ # Disables the travis hook on github.com. Requires further setup as
68
+ # described below.
69
+ #
70
+ # travis:force::
71
+ # Forces a travis-ci run, equivalent to clicking the "test" button on the
72
+ # travis-ci hook page.
73
+ #
74
+ # == Hoe Configuration
75
+ #
76
+ # The Hoe configuration is used to generate the .travis.yml. After you've
77
+ # generated a .travis.yml you may any changes you wish to it and the following
78
+ # defaults will not apply. If you have multiple projects, setting up a common
79
+ # custom configuration in ~/.hoerc can save you time.
80
+ #
81
+ # The following default configuration options are provided under the "travis"
82
+ # key of the Hoe configuration (accessible from Hoe#with_config):
83
+ #
84
+ # before_script::
85
+ # Array of commands run before the test script. Defaults to installing
86
+ # hoe-travis and its dependencies (rake and hoe) followed by running the
87
+ # travis:before rake task.
88
+ #
89
+ # script::
90
+ # Runs the travis rake task.
91
+ #
92
+ # token::
93
+ # Your travis-ci token. See @Setup above
94
+ #
95
+ # versions::
96
+ # The versions of ruby used to run your tests. Note that if you have
97
+ # multiruby installed, your installed versions will be preferred over the
98
+ # defaults of ruby 1.8.7, 1.9.2 and 1.9.3.
99
+ #
100
+ # In your .hoerc you may provide a "notifications" key such as:
101
+ #
102
+ # travis:
103
+ # notifications:
104
+ # irc: "irc.example#your_channel"
105
+ #
106
+ # Notifications specified in a .hoerc will override the default email
107
+ # notifications created from the Hoe spec.
108
+
109
+ module Hoe::Travis
110
+
111
+ ##
112
+ # This version of Hoe::Travis
113
+
114
+ VERSION = '1.0'
115
+
116
+ YAML_EXCEPTIONS = if defined?(Psych) then # :nodoc:
117
+ if Psych.const_defined? :Exception then
118
+ [Psych::SyntaxError] # Ruby 1.9.2
119
+ else
120
+ [Psych::Exception, Psych::SyntaxError]
121
+ end
122
+ else
123
+ [YAML::Error]
124
+ end
125
+
126
+ YAML_EXCEPTIONS << ArgumentError
127
+
128
+ Hoe::DEFAULT_CONFIG['travis'] = {
129
+ 'before_script' => [
130
+ 'gem install hoe-travis --no-rdoc --no-ri',
131
+ 'rake travis:before',
132
+ ],
133
+ 'script' => 'rake travis',
134
+ 'token' => 'FIX - See: ri Hoe::Travis',
135
+ 'versions' => %w[
136
+ 1.8.7
137
+ 1.9.2
138
+ 1.9.3
139
+ ],
140
+ }
141
+
142
+ def initialize_travis # :nodoc:
143
+ @github_api = URI 'https://api.github.com'
144
+ end
145
+
146
+ ##
147
+ # Adds travis tasks to rake
148
+
149
+ def define_travis_tasks
150
+ desc "Runs your tests for travis"
151
+ task :travis => %w[test travis:fake_config check_manifest]
152
+
153
+ namespace :travis do
154
+ desc "Run by travis-ci before your running the default checks"
155
+ task :before => %w[
156
+ check_extra_deps
157
+ install_plugins
158
+ ]
159
+
160
+ desc "Runs travis-lint on your .travis.yml"
161
+ task :check do
162
+ abort unless check_travis_yml '.travis.yml'
163
+ end
164
+
165
+ desc "Disables the travis-ci hook"
166
+ task :disable do
167
+ travis_disable
168
+ end
169
+
170
+ desc "Brings .travis.yml up in your EDITOR then checks it on save"
171
+ task :edit do
172
+ Tempfile.open 'travis.yml' do |io|
173
+ io.write File.read '.travis.yml'
174
+ io.rewind
175
+
176
+ ok = travis_yml_edit io.path
177
+
178
+ travis_yml_write io.path if ok
179
+ end
180
+ end
181
+
182
+ desc "Enables the travis-ci hook"
183
+ task :enable do
184
+ travis_enable
185
+ end
186
+
187
+ desc "Triggers the travis-ci hook"
188
+ task :force do
189
+ travis_force
190
+ end
191
+
192
+ task :fake_config do
193
+ travis_fake_config
194
+ end
195
+
196
+ desc "Generates a new .travis.yml and allows you to customize it with your EDITOR"
197
+ task :generate do
198
+ Tempfile.open 'travis.yml' do |io|
199
+ io.write travis_yml_generate
200
+ io.rewind
201
+
202
+ ok = travis_yml_edit io.path
203
+
204
+ travis_yml_write io.path if ok
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ ##
211
+ # Extracts the travis before_script from your .hoerc
212
+
213
+ def travis_before_script
214
+ with_config { |config, _|
215
+ config['travis']['before_script'] or
216
+ Hoe::DEFAULT_CONFIG['travis']['before_script']
217
+ }
218
+ end
219
+
220
+ ##
221
+ # Disables travis-ci for this repository.
222
+
223
+ def travis_disable
224
+ _, repo, = travis_github_check
225
+
226
+ if hook = travis_have_hook?(repo) then
227
+ travis_edit_hook repo, hook, false if hook['active']
228
+ end
229
+ end
230
+
231
+ ##
232
+ # Edits the travis +hook+ definition for +repo+ (from the github URL) to
233
+ # +enable+ (default) or disable it.
234
+
235
+ def travis_edit_hook repo, hook, enable = true
236
+ patch = unless Net::HTTP.const_defined? :Patch then
237
+ # Ruby 1.8
238
+ Class.new Net::HTTPRequest do |c|
239
+ c.const_set :METHOD, 'PATCH'
240
+ c.const_set :REQUEST_HAS_BODY, true
241
+ c.const_set :RESPONSE_HAS_BODY, true
242
+ end
243
+ else
244
+ Net::HTTP::Patch
245
+ end
246
+
247
+
248
+ id = hook['id']
249
+
250
+ body = {
251
+ 'name' => hook['name'],
252
+ 'active' => enable,
253
+ 'config' => hook['config']
254
+ }
255
+
256
+ travis_github_request "/repos/#{repo}/hooks/#{id}", body, patch
257
+ end
258
+
259
+ ##
260
+ # Enables travis-ci for this repository.
261
+
262
+ def travis_enable
263
+ user, repo, token = travis_github_check
264
+
265
+ if hook = travis_have_hook?(repo) then
266
+ travis_edit_hook repo, hook unless hook['active']
267
+ else
268
+ travis_make_hook repo, user, token
269
+ end
270
+ end
271
+
272
+ ##
273
+ # Creates a fake config file for use on travis-ci. Running this with a
274
+ # pre-existing .hoerc has no effect.
275
+
276
+ def travis_fake_config
277
+ fake_hoerc = File.expand_path '~/.hoerc'
278
+
279
+ return if File.exist? fake_hoerc
280
+
281
+ config = { 'exclude' => /\.(git|travis)/ }
282
+
283
+ open fake_hoerc, 'w' do |io|
284
+ YAML.dump config, io
285
+ end
286
+ end
287
+
288
+ ##
289
+ # Forces the travis-ci hook
290
+
291
+ def travis_force
292
+ user, repo, token = travis_github_check
293
+
294
+ unless hook = travis_have_hook?(repo)
295
+ hook = travis_make_hook repo, user, token
296
+ end
297
+
298
+ travis_github_request "/repos/#{repo}/hooks/#{hook['id']}/test", {}
299
+ end
300
+
301
+ ##
302
+ # Ensures you have proper setup for editing the github travis hook
303
+
304
+ def travis_github_check
305
+ user = `git config github.user`.chomp
306
+ abort <<-ABORT unless user
307
+ Set your github user and token in ~/.gitconfig
308
+
309
+ See: ri Hoe::Travis and
310
+ \thttp://help.github.com/set-your-user-name-email-and-github-token/
311
+ ABORT
312
+
313
+ `git config remote.origin.url` =~ /^git@github\.com:(.*).git$/
314
+ repo = $1
315
+
316
+ abort <<-ABORT unless repo
317
+ Unable to determine your github repository.
318
+
319
+ Expected \"git@github.com:[repo].git\" as your remote origin
320
+ ABORT
321
+
322
+ token = with_config do |config, _|
323
+ config['travis']['token']
324
+ end
325
+
326
+ abort 'Please set your travis token via `rake config_hoe` - ' \
327
+ 'See: ri Hoe::Travis' if token =~ /FIX/
328
+
329
+ return user, repo, token
330
+ end
331
+
332
+ ##
333
+ # Makes a github request at +path+ with an optional +body+ Hash which will
334
+ # be sent as JSON. The default +method+ without a body is a GET request,
335
+ # otherwise POST.
336
+
337
+ def travis_github_request(path, body = nil,
338
+ method = body ? Net::HTTP::Post : Net::HTTP::Get)
339
+ begin
340
+ require 'json'
341
+ rescue LoadError => e
342
+ raise unless e.message.end_with? 'json'
343
+
344
+ abort 'Please gem install json like modern ruby versions have'
345
+ end
346
+
347
+ uri = @github_api + path
348
+
349
+ http = Net::HTTP.new uri.host, uri.port
350
+ http.use_ssl = uri.scheme.downcase == 'https'
351
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
352
+ http.cert_store = OpenSSL::X509::Store.new
353
+ http.cert_store.set_default_paths
354
+
355
+ req = method.new uri.request_uri
356
+ if body then
357
+ req.content_type = 'application/json'
358
+ req.body = JSON.dump body
359
+ end
360
+
361
+ user = `git config github.user`.chomp
362
+ pass = `git config github.password`.chomp
363
+ req.basic_auth user, pass
364
+
365
+ res = http.request req
366
+
367
+ body = JSON.parse res.body if res.class.body_permitted?
368
+
369
+ unless Net::HTTPSuccess === res then
370
+ message = ": #{res['message']}" if body
371
+
372
+ raise "github API error #{res.code}#{message}"
373
+ end
374
+
375
+ body
376
+ end
377
+
378
+ ##
379
+ # Returns the github hook definition for the "travis" hook on +repo+ (from
380
+ # the github URL), if it exists.
381
+
382
+ def travis_have_hook? repo
383
+ body = travis_github_request "/repos/#{repo}/hooks"
384
+
385
+ body.find { |hook| hook['name'] == 'travis' }
386
+ end
387
+
388
+ ##
389
+ # Creates a travis hook for +user+ on the given +repo+ (from the github URL)
390
+ # that uses the users +token+.
391
+
392
+ def travis_make_hook repo, user, token
393
+ body = {
394
+ "name" => "travis",
395
+ "active" => true,
396
+ "config" => {
397
+ "domain" => "",
398
+ "token" => token,
399
+ "user" => user,
400
+ }
401
+ }
402
+
403
+ travis_github_request "/repos/#{repo}/hooks", body
404
+ end
405
+
406
+ ##
407
+ # Creates the travis notifications hash from the developers for your
408
+ # project. The developer will be merged with the travis notifications from
409
+ # your .hoerc.
410
+
411
+ def travis_notifications
412
+ email = @email.compact
413
+ email.delete ''
414
+
415
+ default_notifications = { 'email' => email }
416
+ notifications = with_config do |config, _|
417
+ config['travis']['notifications'] or
418
+ Hoe::DEFAULT_CONFIG['travis']['notifications']
419
+ end || {}
420
+
421
+ default_notifications.merge notifications
422
+ end
423
+
424
+ ##
425
+ # Extracts the travis script from your .hoerc
426
+
427
+ def travis_script
428
+ with_config { |config, _|
429
+ config['travis']['script'] or
430
+ Hoe::DEFAULT_CONFIG['travis']['script']
431
+ }
432
+ end
433
+
434
+ ##
435
+ # Determines the travis versions from multiruby, if available, or your
436
+ # .hoerc.
437
+
438
+ def travis_versions
439
+ if have_gem? 'ZenTest' and
440
+ File.exist?(File.expand_path('~/.multiruby')) then
441
+ `multiruby -v` =~ /^Passed: (.*)/
442
+
443
+ $1.split(', ').map do |ruby_release|
444
+ ruby_release.sub(/-.*/, '')
445
+ end
446
+ else
447
+ with_config do |config, _|
448
+ config['travis']['versions'] or
449
+ Hoe::DEFAULT_CONFIG['travis']['versions']
450
+ end
451
+ end.sort
452
+ end
453
+
454
+ ##
455
+ # Runs travis-lint against the travis.yml in +path+. If the file is OK true
456
+ # is returned, otherwise the issues are displayed on $stderr and false is
457
+ # returned.
458
+
459
+ def travis_yml_check path
460
+ require 'travis/lint'
461
+
462
+ travis_yml = YAML.load_file path
463
+
464
+ issues = Travis::Lint::Linter.validate travis_yml
465
+
466
+ return true if issues.empty?
467
+
468
+ issues.each do |issue|
469
+ warn "There is an issue with the key #{issue[:key].inspect}:"
470
+ warn "\t#{issue[:issue]}"
471
+ end
472
+
473
+ false
474
+ rescue *YAML_EXCEPTIONS => e
475
+ warn "invalid YAML in travis.yml file at #{path}: #{e.message}"
476
+
477
+ return false
478
+ end
479
+
480
+ ##
481
+ # Loads the travis.yml in +path+ in your EDITOR (or vi if unset). Upon
482
+ # saving the travis.yml is checked with travis-lint. If any problems are
483
+ # found you will be asked to retry the edit.
484
+ #
485
+ # If the edited travis.yml is OK true is returned, otherwise false.
486
+
487
+ def travis_yml_edit path
488
+ loop do
489
+ editor = ENV['EDITOR'] || 'vi'
490
+
491
+ system "#{editor} #{path}"
492
+
493
+ break true if travis_yml_check path
494
+
495
+ abort unless $stdout.tty?
496
+
497
+ print "\nRetry edit? [Yn]\n> "
498
+ $stdout.flush
499
+
500
+ break false if $stdin.gets =~ /\An/i
501
+ end
502
+ end
503
+
504
+ ##
505
+ # Generates a travis.yml from .hoerc, the Hoe spec and the default
506
+ # configuration.
507
+
508
+ def travis_yml_generate
509
+ travis_yml = {
510
+ 'before_script' => travis_before_script,
511
+ 'language' => 'ruby',
512
+ 'notifications' => travis_notifications,
513
+ 'rvm' => travis_versions,
514
+ 'script' => travis_script,
515
+ }
516
+
517
+ travis_yml.each do |key, value|
518
+ travis_yml.delete key unless value
519
+ end
520
+
521
+ YAML.dump travis_yml
522
+ end
523
+
524
+ ##
525
+ # Writes the travis.yml in +source_file+ to .travis.yml in the current
526
+ # directory. Overwrites an existing .travis.yml.
527
+
528
+ def travis_yml_write source_file
529
+ open source_file do |source_io|
530
+ open '.travis.yml', 'w' do |dest_io|
531
+ dest_io.write source_io.read
532
+ end
533
+ end
534
+ end
535
+
536
+ end
537
+
@@ -0,0 +1,215 @@
1
+ require 'minitest/autorun'
2
+ require 'hoe/travis'
3
+ require 'tmpdir'
4
+ require 'fileutils'
5
+
6
+ class TestHoeTravis < MiniTest::Unit::TestCase
7
+
8
+ def setup
9
+ @hoe = Hoe.spec "blah" do
10
+ developer 'author', 'email@example'
11
+ developer 'silent', ''
12
+
13
+ self.readme_file = 'README.rdoc'
14
+ end
15
+
16
+ @hoe.extend Hoe::Travis
17
+
18
+ @editor = ENV['EDITOR']
19
+ @home = ENV['HOME']
20
+ end
21
+
22
+ def teardown
23
+ ENV['EDITOR'] = @editor
24
+ ENV['HOME'] = @home
25
+ end
26
+
27
+ def test_travis_before_script
28
+ expected = [
29
+ 'gem install hoe-travis --no-rdoc --no-ri',
30
+ 'rake travis:before',
31
+ ]
32
+
33
+ assert_equal expected, @hoe.travis_before_script
34
+ end
35
+
36
+ def test_travis_fake_config
37
+ Dir.mktmpdir do |path|
38
+ ENV['HOME'] = path
39
+
40
+ fake_config = File.expand_path '~/.hoerc'
41
+
42
+ @hoe.travis_fake_config
43
+
44
+ assert File.exist? fake_config
45
+
46
+ expected = {
47
+ 'exclude' => /\.(git|travis)/
48
+ }
49
+
50
+ assert_equal expected, YAML.load_file(fake_config)
51
+ end
52
+ end
53
+
54
+ def test_travis_notifications
55
+ expected = {
56
+ 'email' => %w[email@example]
57
+ }
58
+
59
+ assert_equal expected, @hoe.travis_notifications
60
+ end
61
+
62
+ def test_travis_notifications_config
63
+ Hoe::DEFAULT_CONFIG['travis']['notifications'] = {
64
+ 'email' => %w[other@example],
65
+ 'irc' => %w[irc.example#channel],
66
+ }
67
+
68
+ expected = {
69
+ 'email' => %w[other@example],
70
+ 'irc' => %w[irc.example#channel],
71
+ }
72
+
73
+ Dir.mktmpdir do |dir|
74
+ ENV['HOME'] = dir
75
+ assert_equal expected, @hoe.travis_notifications
76
+ end
77
+ ensure
78
+ Hoe::DEFAULT_CONFIG['travis'].delete 'notifications'
79
+ end
80
+
81
+ def test_travis_script
82
+ expected = 'rake travis'
83
+
84
+
85
+ assert_equal expected, @hoe.travis_script
86
+ end
87
+
88
+ def test_travis_versions
89
+ def @hoe.have_gem?(name) false end
90
+
91
+ assert_equal %w[1.8.7 1.9.2 1.9.3], @hoe.travis_versions
92
+ end
93
+
94
+ def test_travis_versions_multiruby
95
+ def @hoe.have_gem?(name) true end
96
+ def @hoe.`(command) "Passed: 1.6.8, 1.8.0" end
97
+
98
+ Dir.mktmpdir do |path|
99
+ ENV['HOME'] = path
100
+
101
+ FileUtils.touch File.join(path, '.multiruby')
102
+
103
+ assert_equal %w[1.6.8 1.8.0], @hoe.travis_versions
104
+ end
105
+ end
106
+
107
+ def test_travis_versions_multiruby_unused
108
+ def @hoe.have_gem?(name) true end
109
+
110
+ Dir.mktmpdir do |path|
111
+ ENV['HOME'] = path
112
+
113
+ assert_equal %w[1.8.7 1.9.2 1.9.3], @hoe.travis_versions
114
+ end
115
+ end
116
+
117
+ def test_travis_yml_check
118
+ Tempfile.open 'travis' do |io|
119
+ io.write "---\nlanguage: ruby\nrvm:\n - 1.8.7\n"
120
+ io.rewind
121
+
122
+ assert @hoe.travis_yml_check io.path
123
+ end
124
+ end
125
+
126
+ def test_travis_yml_check_invalid
127
+ Tempfile.open 'travis' do |io|
128
+ io.write "---\nlanguage: ruby\n"
129
+ io.rewind
130
+
131
+ out, err = capture_io do
132
+ refute @hoe.travis_yml_check io.path
133
+ end
134
+
135
+ assert_empty out
136
+ refute_empty err
137
+ end
138
+ end
139
+
140
+ def test_travis_yml_edit
141
+ Tempfile.open 'out' do |out_io|
142
+ ENV['EDITOR'] = "cat > #{out_io.path} < "
143
+
144
+ Tempfile.open 'travis' do |io|
145
+ io.write "---\nlanguage: ruby\nrvm:\n - 1.8.7\n"
146
+ io.rewind
147
+
148
+ @hoe.travis_yml_edit io.path
149
+ end
150
+
151
+ assert_equal "---\nlanguage: ruby\nrvm:\n - 1.8.7\n", out_io.read
152
+ end
153
+ end
154
+
155
+ def test_travis_yml_edit_bad
156
+ ENV['EDITOR'] = "cat > /dev/null < "
157
+
158
+ Tempfile.open 'travis' do |io|
159
+ io.write "travis: woo"
160
+ io.rewind
161
+
162
+ e = assert_raises SystemExit do
163
+ capture_io do
164
+ @hoe.travis_yml_edit io.path
165
+ end
166
+ end
167
+
168
+ assert_equal 1, e.status
169
+ end
170
+ end
171
+
172
+ def test_travis_yml_generate
173
+ def @hoe.have_gem?(name) false end
174
+
175
+ Dir.mktmpdir do |path|
176
+ Dir.chdir path do
177
+ travis_yml = YAML.load @hoe.travis_yml_generate
178
+
179
+ expected = YAML.load <<-TRAVIS_YML
180
+ ---
181
+ before_script:
182
+ - gem install hoe-travis --no-rdoc --no-ri
183
+ - rake travis:before
184
+ language: ruby
185
+ notifications:
186
+ email:
187
+ - email@example
188
+ rvm:
189
+ - 1.8.7
190
+ - 1.9.2
191
+ - 1.9.3
192
+ script: rake travis
193
+ TRAVIS_YML
194
+
195
+ assert_equal expected, travis_yml
196
+ end
197
+ end
198
+ end
199
+
200
+ def test_travis_yml_write
201
+ Dir.mktmpdir do |path|
202
+ Dir.chdir path do
203
+ open 'travis', 'w' do |io| io.write 'travis' end
204
+
205
+ @hoe.travis_yml_write 'travis'
206
+
207
+ assert File.exist? '.travis.yml'
208
+
209
+ assert_equal 'travis', File.read('.travis.yml')
210
+ end
211
+ end
212
+ end
213
+
214
+ end
215
+
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hoe-travis
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ version: "1.0"
10
+ platform: ruby
11
+ authors:
12
+ - Eric Hodel
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain:
16
+ - |
17
+ -----BEGIN CERTIFICATE-----
18
+ MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
19
+ YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
20
+ ZXQwHhcNMTIwMjI4MTc1NDI1WhcNMTMwMjI3MTc1NDI1WjBBMRAwDgYDVQQDDAdk
21
+ cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
22
+ FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbgLrGLGIDE76
23
+ LV/cvxdEzCuYuS3oG9PrSZnuDweySUfdp/so0cDq+j8bqy6OzZSw07gdjwFMSd6J
24
+ U5ddZCVywn5nnAQ+Ui7jMW54CYt5/H6f2US6U0hQOjJR6cpfiymgxGdfyTiVcvTm
25
+ Gj/okWrQl0NjYOYBpDi+9PPmaH2RmLJu0dB/NylsDnW5j6yN1BEI8MfJRR+HRKZY
26
+ mUtgzBwF1V4KIZQ8EuL6I/nHVu07i6IkrpAgxpXUfdJQJi0oZAqXurAV3yTxkFwd
27
+ g62YrrW26mDe+pZBzR6bpLE+PmXCzz7UxUq3AE0gPHbiMXie3EFE0oxnsU3lIduh
28
+ sCANiQ8BAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
29
+ BBS5k4Z75VSpdM0AclG2UvzFA/VW5DAfBgNVHREEGDAWgRRkcmJyYWluQHNlZ21l
30
+ bnQ3Lm5ldDAfBgNVHRIEGDAWgRRkcmJyYWluQHNlZ21lbnQ3Lm5ldDANBgkqhkiG
31
+ 9w0BAQUFAAOCAQEAPeWzFnrcvC6eVzdlhmjUub2s6qieBkongKRDHQz5MEeQv4LS
32
+ SARnoHY+uCAVL/1xGAhmpzqQ3fJGWK9eBacW/e8E5GF9xQcV3mE1bA0WNaiDlX5j
33
+ U2aI+ZGSblqvHUCxKBHR1s7UMHsbz1saOmgdRTyPx0juJs68ocbUTeYBLWu9V4KP
34
+ zdGAG2JXO2gONg3b4tYDvpBLbry+KOX27iAJulUaH9TiTOULL4ITJVFsK0mYVqmR
35
+ Q8Tno9S3e4XGGP1ZWfLrTWEJbavFfhGHut2iMRwfC7s/YILAHNATopaJdH9DNpd1
36
+ U81zGHMUBOvz/VGT6wJwYJ3emS2nfA2NOHFfgA==
37
+ -----END CERTIFICATE-----
38
+
39
+ date: 2012-03-02 00:00:00 Z
40
+ dependencies:
41
+ - !ruby/object:Gem::Dependency
42
+ name: travis-lint
43
+ prerelease: false
44
+ requirement: &id001 !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ~>
48
+ - !ruby/object:Gem::Version
49
+ hash: 11
50
+ segments:
51
+ - 1
52
+ - 2
53
+ version: "1.2"
54
+ type: :runtime
55
+ version_requirements: *id001
56
+ - !ruby/object:Gem::Dependency
57
+ name: hoe
58
+ prerelease: false
59
+ requirement: &id002 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ~>
63
+ - !ruby/object:Gem::Version
64
+ hash: 31
65
+ segments:
66
+ - 2
67
+ - 14
68
+ version: "2.14"
69
+ type: :runtime
70
+ version_requirements: *id002
71
+ - !ruby/object:Gem::Dependency
72
+ name: minitest
73
+ prerelease: false
74
+ requirement: &id003 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ hash: 23
80
+ segments:
81
+ - 2
82
+ - 10
83
+ version: "2.10"
84
+ type: :development
85
+ version_requirements: *id003
86
+ - !ruby/object:Gem::Dependency
87
+ name: rdoc
88
+ prerelease: false
89
+ requirement: &id004 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ~>
93
+ - !ruby/object:Gem::Version
94
+ hash: 19
95
+ segments:
96
+ - 3
97
+ - 10
98
+ version: "3.10"
99
+ type: :development
100
+ version_requirements: *id004
101
+ description: |-
102
+ hoe-travis is a Hoe plugin that allows your gem to gain maximum benefit from
103
+ http://travis-ci.org. The plugin contains a <code>.travis.yml</code>
104
+ generator and a pre-defined rake task which runs the tests and ensures your
105
+ manifest file is correct.
106
+
107
+ With hoe-travis it is easy to add additional checks. Custom checks can be
108
+ easily verified locally by simply running a rake task instead of committing
109
+ and pushing a change, waiting for travis to run your tests, then trying a new
110
+ commit if you didn't fix the problem.
111
+ email:
112
+ - drbrain@segment7.net
113
+ executables: []
114
+
115
+ extensions: []
116
+
117
+ extra_rdoc_files:
118
+ - History.txt
119
+ - Manifest.txt
120
+ - README.rdoc
121
+ files:
122
+ - .autotest
123
+ - History.txt
124
+ - Manifest.txt
125
+ - README.rdoc
126
+ - Rakefile
127
+ - lib/hoe/travis.rb
128
+ - test/test_hoe_travis.rb
129
+ - .gemtest
130
+ homepage: https://github.com/drbrain/hoe-travis
131
+ licenses: []
132
+
133
+ post_install_message:
134
+ rdoc_options:
135
+ - --main
136
+ - README.rdoc
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ hash: 3
154
+ segments:
155
+ - 0
156
+ version: "0"
157
+ requirements: []
158
+
159
+ rubyforge_project: hoe-travis
160
+ rubygems_version: 1.8.12
161
+ signing_key:
162
+ specification_version: 3
163
+ summary: hoe-travis is a Hoe plugin that allows your gem to gain maximum benefit from http://travis-ci.org
164
+ test_files:
165
+ - test/test_hoe_travis.rb
metadata.gz.sig ADDED
Binary file