kender 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/features/install.feature +13 -0
- data/features/scenarios.feature +49 -0
- data/features/support/env.rb +6 -0
- data/features/support/hooks.rb +5 -0
- data/lib/kender/command.rb +10 -2
- data/lib/kender/commands/brakeman.rb +1 -1
- data/lib/kender/commands/bundle_audit.rb +1 -1
- data/lib/kender/commands/consistency_fail.rb +13 -0
- data/lib/kender/commands/cucumber.rb +1 -1
- data/lib/kender/commands/rspec.rb +1 -1
- data/lib/kender/commands/shamus.rb +1 -1
- data/lib/kender/commands/test_unit.rb +1 -1
- data/lib/kender/github.rb +29 -13
- data/lib/kender/tasks/ci.rake +44 -22
- data/lib/kender/version.rb +1 -1
- metadata +39 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YjViZmI3ZGQwMjE4YjgyYjliOGNkOWE4ZmIwMzlmZjE1YTdlYjRmZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjVlMjIxYWI4NzZjYWYxZThkYmZkOTIyZjgyYWNlMTM1MWQzMmIyZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2MwMWU2OGQ4M2Q0OWJjZGY2ZDU0ZmNhMmE0NGU3ZGNhNTcwMjU1NjllMTIx
|
10
|
+
ZDIzYmZhM2M3ZDI0N2Y4MTljYzYwM2Q4NDZlMWE0ZDAwNGM5ZWEyNjA4MjJk
|
11
|
+
YzkyM2EwN2MzY2Q1MDIxYWJlNTY2YWYyNjE3NGRmZWZlYmJjYjA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MjlhZGQwZjA5M2ZiYjExZGU5ZGI1ZTIzZWQxNzU5NGQ2Y2FjNGJhZGJlNjQ3
|
14
|
+
YmJhYmUzZjRmMTRmN2I0YTM2NjlhMWQ4ZjFiNTY1Y2IxNmViNTI1NWFmM2Iz
|
15
|
+
NTU1M2M5MDY1OTQ0MDg0MDhkOTRlNThlZmVjOWY0MmYyNzFiZGU=
|
@@ -0,0 +1,13 @@
|
|
1
|
+
Feature: Install
|
2
|
+
|
3
|
+
In Rails projects, Kender tasks are loaded automatically. For other
|
4
|
+
projects, add `require 'kender/tasks'` to your `Rakefile` or wherever your
|
5
|
+
local rake tasks are defined.
|
6
|
+
|
7
|
+
Scenario: Require Kender tasks in Rakefile
|
8
|
+
Given a file named "Rakefile" with:
|
9
|
+
"""
|
10
|
+
require 'kender/tasks'
|
11
|
+
"""
|
12
|
+
When I run `rake ci`
|
13
|
+
Then the exit status should be 0
|
@@ -0,0 +1,49 @@
|
|
1
|
+
Feature: Scenarios
|
2
|
+
Kender is able to run scenarios using the cucumber tool.
|
3
|
+
|
4
|
+
Background:
|
5
|
+
Given a file named "Gemfile" with:
|
6
|
+
"""
|
7
|
+
source 'https://rubygems.org'
|
8
|
+
gem 'cucumber', '~>1.3'
|
9
|
+
"""
|
10
|
+
And I run `bundle install`
|
11
|
+
|
12
|
+
Scenario: The project has no scenarios to run but cucumber is executed
|
13
|
+
When I run `rake ci`
|
14
|
+
Then it should pass with:
|
15
|
+
"""
|
16
|
+
0 scenarios
|
17
|
+
0 steps
|
18
|
+
"""
|
19
|
+
|
20
|
+
Scenario: The project has some passing scenarios to run
|
21
|
+
Given a file named "features/testing.feature" with:
|
22
|
+
"""
|
23
|
+
Feature: test
|
24
|
+
This is a test of my product
|
25
|
+
Scenario: first test
|
26
|
+
"""
|
27
|
+
When I run `rake ci`
|
28
|
+
Then it should pass with:
|
29
|
+
"""
|
30
|
+
1 scenario (1 passed)
|
31
|
+
0 steps
|
32
|
+
"""
|
33
|
+
|
34
|
+
Scenario: The project has some non passing scenarios to run
|
35
|
+
Given a file named "features/testing.feature" with:
|
36
|
+
"""
|
37
|
+
Feature: test
|
38
|
+
This is a test of my product
|
39
|
+
Scenario: first test
|
40
|
+
Then failing step
|
41
|
+
"""
|
42
|
+
And a file named "features/step_definitions/steps.rb" with:
|
43
|
+
"""
|
44
|
+
Given(/^failing step$/) do
|
45
|
+
raise 'failed'
|
46
|
+
end
|
47
|
+
"""
|
48
|
+
When I run `rake ci`
|
49
|
+
Then the exit status should not be 0
|
data/lib/kender/command.rb
CHANGED
@@ -11,11 +11,11 @@ module Kender
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def available?
|
14
|
-
|
14
|
+
abort "Command failed: #{name}, availability status undefined."
|
15
15
|
end
|
16
16
|
|
17
17
|
def execute
|
18
|
-
|
18
|
+
abort "Command failed: #{command}" unless run.success?
|
19
19
|
end
|
20
20
|
|
21
21
|
#TODO: system reload all the gems again, avoid this.
|
@@ -43,9 +43,17 @@ module Kender
|
|
43
43
|
end
|
44
44
|
|
45
45
|
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def in_gemfile?(gem_name)
|
50
|
+
Bundler.definition.specs.any?{ |spec| spec.name == gem_name }
|
51
|
+
end
|
52
|
+
|
46
53
|
end
|
47
54
|
end
|
48
55
|
|
56
|
+
require_relative 'commands/consistency_fail'
|
49
57
|
require_relative 'commands/jasmine'
|
50
58
|
require_relative 'commands/brakeman'
|
51
59
|
require_relative 'commands/bundle_audit'
|
data/lib/kender/github.rb
CHANGED
@@ -21,6 +21,11 @@ module Kender
|
|
21
21
|
# TODO: Refactor the following code to use gems like git/grit/rugged and
|
22
22
|
# octokit. ~asmith
|
23
23
|
|
24
|
+
unless config.github_auth_token
|
25
|
+
puts "Skipping setting the status on Github to #{state} because the access token is not configured"
|
26
|
+
return
|
27
|
+
end
|
28
|
+
|
24
29
|
body = %Q({
|
25
30
|
"state": "#{state.to_s}",
|
26
31
|
"target_url": "#{config.build_url}",
|
@@ -28,28 +33,39 @@ module Kender
|
|
28
33
|
})
|
29
34
|
commit = `git log -1 --format=format:%H`
|
30
35
|
remotes = `git remote --verbose`
|
36
|
+
remote_name = ENV['GITHUB_REMOTE'] || 'origin'
|
31
37
|
|
32
|
-
unless repo =
|
33
|
-
|
38
|
+
unless repo = /^#{remote_name}\s+git@(\w+\.)?github.com:([\w-]+\/[\w-]+)\b/.match(remotes).to_a.last
|
39
|
+
puts "Could not establish GitHub repo name from '#{remote_name}' remote"
|
34
40
|
return
|
35
41
|
end
|
36
|
-
|
37
42
|
uri = URI("https://api.github.com/repos/#{repo}/statuses/#{commit}?access_token=#{config.github_auth_token}")
|
38
43
|
|
39
|
-
|
40
|
-
puts "Setting #{repo} commit #{commit} status to '#{state}' on GitHub"
|
41
|
-
else
|
42
|
-
puts "Skipping setting #{repo} commit #{commit} status to '#{state}' on GitHub because access token not configured"
|
43
|
-
return
|
44
|
-
end
|
44
|
+
puts "Setting #{repo} commit #{commit} status to '#{state}' on GitHub"
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
ensure_real_connection do
|
47
|
+
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
|
48
|
+
response = http.post(uri.request_uri, body)
|
49
|
+
unless response.is_a?(Net::HTTPCreated)
|
50
|
+
puts "Setting commit status FAILED", response
|
51
|
+
end
|
50
52
|
end
|
51
53
|
end
|
52
54
|
end
|
55
|
+
|
56
|
+
def ensure_real_connection
|
57
|
+
if !defined?(WebMock)
|
58
|
+
return yield
|
59
|
+
end
|
60
|
+
if !WebMock.net_connect_allowed?
|
61
|
+
WebMock.allow_net_connect!
|
62
|
+
yield
|
63
|
+
WebMock.disable_net_connect!
|
64
|
+
else
|
65
|
+
yield
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
53
69
|
end
|
54
70
|
end
|
55
71
|
|
data/lib/kender/tasks/ci.rake
CHANGED
@@ -5,6 +5,15 @@ require 'kender/configuration'
|
|
5
5
|
require 'kender/github'
|
6
6
|
require 'kender/command'
|
7
7
|
|
8
|
+
# Helper method to call rake tasks without blowing up when they do not exists
|
9
|
+
# @Return: false when it could not be executed or there was some error.
|
10
|
+
def run_successfully?(tasks)
|
11
|
+
[*tasks].all? do |task|
|
12
|
+
Rake::Task.task_defined?(task) && Rake::Task[task].invoke
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# This is the task we want the user to use all the time.
|
8
17
|
desc "Configure and run continuous integration tests then clean up"
|
9
18
|
task :ci => ['ci:status:pending'] do
|
10
19
|
begin
|
@@ -13,7 +22,6 @@ task :ci => ['ci:status:pending'] do
|
|
13
22
|
Rake::Task["ci:status:success"].invoke
|
14
23
|
rescue Exception => e
|
15
24
|
Rake::Task["ci:status:failure"].invoke
|
16
|
-
|
17
25
|
# Ensure that this task still fails.
|
18
26
|
raise e
|
19
27
|
ensure
|
@@ -23,11 +31,9 @@ end
|
|
23
31
|
|
24
32
|
namespace :ci do
|
25
33
|
|
34
|
+
# UI for the user, these are tasks the user can use
|
26
35
|
desc "Configure the app to run continuous integration tests"
|
27
|
-
|
28
|
-
# if the 'db/schema.rb' file was committed to the repo (as per Rails
|
29
|
-
# recommendations).
|
30
|
-
task :config => ['ci:env', 'config:all', 'ci:setup_db']
|
36
|
+
task :config => ['ci:env', 'ci:config_project', 'ci:setup_db']
|
31
37
|
|
32
38
|
desc "Run continuous integration tests with the current configuration"
|
33
39
|
task :run => ['ci:env'] + Kender::Command.all_tasks
|
@@ -35,6 +41,15 @@ namespace :ci do
|
|
35
41
|
desc "Destroy resources created externally for the continuous integration run, e.g. drops databases"
|
36
42
|
task :clean => ['ci:env', 'ci:drop_db']
|
37
43
|
|
44
|
+
# Automatically create rake task for each individual command.
|
45
|
+
Kender::Command.all.each do |command|
|
46
|
+
desc "Individual task for #{command.name}, in parallel if available."
|
47
|
+
task command.name do
|
48
|
+
command.execute
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# The following tasks are internal to us, without description, the user can not discover them
|
38
53
|
task :env do
|
39
54
|
if defined?(Rails)
|
40
55
|
# Default to the 'test' environment unless otherwise specified. This
|
@@ -47,33 +62,40 @@ namespace :ci do
|
|
47
62
|
end
|
48
63
|
end
|
49
64
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
task command.name do
|
54
|
-
command.execute
|
65
|
+
task :config_project do
|
66
|
+
unless run_successfully?('config:all')
|
67
|
+
puts 'Your project could not be configured, a config:all task needed. Consider installing dice_bag'
|
55
68
|
end
|
56
69
|
end
|
57
70
|
|
58
|
-
desc "Generic task to setup your databases, in parallel if available."
|
59
71
|
task :setup_db do
|
60
|
-
if
|
61
|
-
|
62
|
-
|
72
|
+
if Rake::Task.task_defined?('db:create')
|
73
|
+
if !defined?(ParallelTests)
|
74
|
+
unless run_successfully?(['db:create', 'db:migrate'])
|
75
|
+
puts 'The DB could not be set up successfully.'
|
76
|
+
end
|
77
|
+
else
|
78
|
+
#TODO: invoke on the task did not work. Why?
|
79
|
+
system('bundle exec rake parallel:create')
|
80
|
+
system('bundle exec rake parallel:prepare')
|
81
|
+
end
|
63
82
|
else
|
64
|
-
|
65
|
-
system('bundle exec rake parallel:create')
|
66
|
-
system('bundle exec rake parallel:prepare')
|
83
|
+
puts "no databases tasks found."
|
67
84
|
end
|
68
85
|
end
|
69
86
|
|
70
|
-
desc "Generic task to drop your databases, in parallel if available."
|
71
87
|
task :drop_db do
|
72
|
-
if
|
73
|
-
|
88
|
+
if Rake::Task.task_defined?('db:drop')
|
89
|
+
if !defined?(ParallelTests)
|
90
|
+
unless run_successfully?('db:drop')
|
91
|
+
puts 'The DB could not be dropped.'
|
92
|
+
end
|
93
|
+
else
|
94
|
+
#TODO: invoke on the task did not work. Why?
|
95
|
+
system('bundle exec rake parallel:drop')
|
96
|
+
end
|
74
97
|
else
|
75
|
-
|
76
|
-
system('bundle exec rake parallel:drop')
|
98
|
+
puts "no databases tasks found."
|
77
99
|
end
|
78
100
|
end
|
79
101
|
|
data/lib/kender/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Smith
|
@@ -25,6 +25,34 @@ dependencies:
|
|
25
25
|
- - ! '>='
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: aruba
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.5.2
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.5.2
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rake
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
28
56
|
description:
|
29
57
|
email:
|
30
58
|
- asmith@mdsol.com
|
@@ -33,10 +61,15 @@ executables: []
|
|
33
61
|
extensions: []
|
34
62
|
extra_rdoc_files: []
|
35
63
|
files:
|
64
|
+
- features/install.feature
|
65
|
+
- features/scenarios.feature
|
66
|
+
- features/support/env.rb
|
67
|
+
- features/support/hooks.rb
|
36
68
|
- lib/kender.rb
|
37
69
|
- lib/kender/command.rb
|
38
70
|
- lib/kender/commands/brakeman.rb
|
39
71
|
- lib/kender/commands/bundle_audit.rb
|
72
|
+
- lib/kender/commands/consistency_fail.rb
|
40
73
|
- lib/kender/commands/cucumber.rb
|
41
74
|
- lib/kender/commands/jasmine.rb
|
42
75
|
- lib/kender/commands/rspec.rb
|
@@ -72,5 +105,9 @@ signing_key:
|
|
72
105
|
specification_version: 4
|
73
106
|
summary: Kender is a library of rake tasks that provides a consistent framework for
|
74
107
|
continuous integration (CI).
|
75
|
-
test_files:
|
108
|
+
test_files:
|
109
|
+
- features/install.feature
|
110
|
+
- features/scenarios.feature
|
111
|
+
- features/support/env.rb
|
112
|
+
- features/support/hooks.rb
|
76
113
|
has_rdoc:
|