kender 0.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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YjQ4OWIyMjllZjEzMjA3ZjRhMDYzYjE5M2FmMjg1ODE0MzU0MDJjZA==
5
+ data.tar.gz: !binary |-
6
+ ZGVmM2U0NTEwMzU0M2ZiYzQzYmFkOWM3Njc5ZDM3ZmVjYjVmZmUyMQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZGFjY2Y4ZjU5MjlhMjZiYzM5YmQ3YjYwYzI5MTA3YjY2MmVmNzU0NjE3MmEx
10
+ NWQ3MWIwZWE1OTNiYmQyOTBhNDc5NDIwOTAzZGRjN2Y0OGQwMWEyNDdiNzVi
11
+ MGMxODFjM2FjZDc1M2FlMTFkNTMwYjkwZjAxZmMxODM1NTY1Zjc=
12
+ data.tar.gz: !binary |-
13
+ YjQwMzAwZThkMTFkMTAyZGU1MWExNDBkZDRjZTg2YmNjZmZiZjBlMDZmZmJm
14
+ OGI2MzQ2NzMwZmUzZTUxZmJkOTNjZjY5Njk4MjUzMTMxOThmZDQ1YmYzZTk5
15
+ MDkxMTBjNTFkN2Q5MjA2OGJiZjIyYzc5Y2ZkOGI2YjE5ODE4MmQ=
data/lib/kender.rb ADDED
@@ -0,0 +1,3 @@
1
+ module Kender
2
+ require 'kender/railtie' if defined?(Rails)
3
+ end
@@ -0,0 +1,11 @@
1
+ module Kender
2
+
3
+ # This class abstracts access to configuration values. Currently, the values
4
+ # are read from the environment.
5
+ #
6
+ class Configuration
7
+ def method_missing(name)
8
+ ENV[name.to_s.upcase]
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,55 @@
1
+ require 'net/https'
2
+
3
+ module Kender
4
+
5
+ # This module abstracts access to GitHub. It's current, sole purpose is to
6
+ # allow commit statuses to be created.
7
+ #
8
+ # See: https://github.com/blog/1227-commit-status-api
9
+ #
10
+ module GitHub
11
+ extend self
12
+
13
+ # Update the commit status for the current HEAD commit. Assumes the working
14
+ # directory is a git repo and the "origin" remote points to a GitHub repo.
15
+ # The +state+ variable must be one of :pending, :success or :failure. The
16
+ # +config+ object must respond to +build_number+, +build_url+ and
17
+ # +github_auth_token+.
18
+ #
19
+ def update_commit_status(state, config)
20
+
21
+ # TODO: Refactor the following code to use gems like git/grit/rugged and
22
+ # octokit. ~asmith
23
+
24
+ body = %Q({
25
+ "state": "#{state.to_s}",
26
+ "target_url": "#{config.build_url}",
27
+ "description": "Continuous integration run #{config.build_number}"
28
+ })
29
+ commit = `git log -1 --format=format:%H`
30
+ remotes = `git remote --verbose`
31
+
32
+ unless repo = /^origin\s+git@github.com:(\w+\/\w+)\b/.match(remotes)[1]
33
+ put "Could not establish GitHub repo name from 'origin' remote"
34
+ return
35
+ end
36
+
37
+ uri = URI("https://api.github.com/repos/#{repo}/statuses/#{commit}?access_token=#{config.github_auth_token}")
38
+
39
+ if config.github_auth_token
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
45
+
46
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
47
+ response = http.post(uri.request_uri, body)
48
+ unless response.is_a?(Net::HTTPCreated)
49
+ puts "Setting commit status FAILED", response
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+
@@ -0,0 +1,9 @@
1
+ module Kender
2
+ class Railtie < Rails::Railtie
3
+ railtie_name :kender
4
+
5
+ rake_tasks do
6
+ require 'kender/tasks'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ load 'kender/tasks/ci.rake'
@@ -0,0 +1,58 @@
1
+ require 'kender/configuration'
2
+ require 'kender/github'
3
+
4
+ desc "Configure and run continuous integration tests then clean up"
5
+ task :ci => ['ci:status:pending'] do
6
+ begin
7
+ Rake::Task["ci:config"].invoke
8
+ Rake::Task["ci:run"].invoke
9
+ Rake::Task["ci:status:success"].invoke
10
+ rescue
11
+ Rake::Task["ci:status:failure"].invoke
12
+ ensure
13
+ Rake::Task["ci:clean"].invoke
14
+ end
15
+ end
16
+
17
+ namespace :ci do
18
+
19
+ desc "Configure the app to run continuous integration tests"
20
+ # Could depend on 'db:schema:load' or 'db:setup' here instead of 'db:migrate'
21
+ # if the 'db/schema.rb' file was committed to the repo (as per Rails
22
+ # recommendations).
23
+ task :config => ['ci:env', 'config:all', 'db:create', 'db:migrate']
24
+
25
+ desc "Run continuous integration tests with the current configuration"
26
+ task :run => ['ci:env', 'ci:shamus', 'ci:brakeman']
27
+
28
+ desc "Destroy resources created externally for the continuous integration run, e.g. drops databases"
29
+ task :clean => ['ci:env', 'db:drop']
30
+
31
+ task :env do
32
+ ENV['RAILS_ENV'] ||= 'test'
33
+ end
34
+
35
+ task :shamus do
36
+ sh('bundle exec shamus')
37
+ end
38
+
39
+ task :brakeman do
40
+ # Make warnings fail the build with the '--exit-on-warn' switch.
41
+ sh('bundle exec brakeman --quiet --exit-on-warn')
42
+ end
43
+
44
+ namespace :status do
45
+
46
+ config = Kender::Configuration.new
47
+
48
+ task :pending do
49
+ Kender::GitHub.update_commit_status(:pending, config)
50
+ end
51
+ task :success do
52
+ Kender::GitHub.update_commit_status(:success, config)
53
+ end
54
+ task :failure do
55
+ Kender::GitHub.update_commit_status(:failure, config)
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,3 @@
1
+ module Kender
2
+ VERSION = '0.1.0'
3
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kender
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrew Smith
8
+ - Jordi Polo
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-06-03 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email:
16
+ - asmith@mdsol.com
17
+ - jcarres@mdsol.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/kender.rb
23
+ - lib/kender/configuration.rb
24
+ - lib/kender/github.rb
25
+ - lib/kender/railtie.rb
26
+ - lib/kender/tasks.rb
27
+ - lib/kender/tasks/ci.rake
28
+ - lib/kender/version.rb
29
+ homepage:
30
+ licenses: []
31
+ metadata: {}
32
+ post_install_message:
33
+ rdoc_options: []
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ required_rubygems_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ requirements: []
47
+ rubyforge_project:
48
+ rubygems_version: 2.2.2
49
+ signing_key:
50
+ specification_version: 4
51
+ summary: Kender is a library of rake tasks that provides a consistent framework for
52
+ continuous integration (CI).
53
+ test_files: []
54
+ has_rdoc: