kender 0.1.5 → 0.1.6
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 +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:
|