cider_ci-rails 0.0.3

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 781707e9b857a5e8c0fd17058fc2362e380a8ca4
4
+ data.tar.gz: 514dd13a2185b05949ee9a526d9e4bbef48bb6e3
5
+ SHA512:
6
+ metadata.gz: 81421d2e247790385702e7a062c2c1fd789e2f5549e6603843049d02586d8072d30d16236ef39ff42be28a33335afb38c7e838a9729a3838334a382bb38f1c93
7
+ data.tar.gz: 905c8a11250249e2d9a22743d14f9531eafa820b320dff958a38e8eaa929f758b402349752270deeef1a357d6340c9bff0bb0f77310620302fb3f6bcf84e17d8
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # gem "json_roa-client", git: "https://github.com/json-roa/json-roa_ruby-client.git"
4
+
5
+ # Specify your gem's dependencies in cider_ci-rails.gemspec
6
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Thomas Schank
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # Cider-CI Support for Ruby and Ruby on Rails projects
2
+
3
+ This gem provides convenience executables to work with Cider-CI.
4
+
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'cider_ci-rails'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install cider_ci-rails
21
+
22
+
23
+ ## Usage
24
+
25
+ ### Aggregate Coverage with `cider-ci_coverage`
26
+
27
+ 1. Add [Simplecov]() to your project and configure it.
28
+
29
+ 2. Have the coverage output attached to the trials, e.g.
30
+
31
+ ```yaml
32
+ task_defaults:
33
+ trial_attachments:
34
+ coverage_resultset:
35
+ glob: 'coverage/.resultset.json'
36
+ content-type: application/json
37
+ ```
38
+
39
+ 3. Run the tests on Cider-CI.
40
+
41
+ 4. Within the top level directory of you project, e.g.
42
+
43
+ cider-ci_coverage -e EXECUTION_ID
44
+
45
+
46
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ ###############################################################################
4
+ # This script gathers ruby coverage information from a cider-ci instance and
5
+ # aggregates it via simplecov.
6
+ #
7
+ # Authors: Thomas Schank <DrTom@schank.ch>
8
+ #
9
+ ###############################################################################
10
+
11
+
12
+ # Planned features for the future:
13
+ #
14
+ # * upload result to cider-ci (attachments to the tree_id)
15
+
16
+ require 'fileutils'
17
+ require 'json_roa/client'
18
+ require 'optparse'
19
+ require 'ostruct'
20
+ require 'simplecov'
21
+ require 'thread/future'
22
+ require 'thread/pool'
23
+ #require 'pry'
24
+
25
+ ###############################################################################
26
+ # Download from Cider-CI
27
+ ###############################################################################
28
+
29
+ def connect base_url, username, password
30
+ root_resource = JSON_ROA::Client.connect base_url do |conn|
31
+ conn.basic_auth(username,password)
32
+ end
33
+ end
34
+
35
+ def get_execution_resource root, execution_id
36
+ root.relation('execution').get('id' => execution_id )
37
+ end
38
+
39
+
40
+ def get_and_convert_resultset_attachments execution, thread_pool_size
41
+ print "download_resultset_attachments"; STDOUT.flush
42
+ pool = Thread.pool thread_pool_size
43
+
44
+ execution.relation('tasks').get.collection.map do |task_relation|
45
+ Thread.future pool do
46
+ print "."; STDOUT.flush
47
+ task_relation.get().relation('trials') \
48
+ .get.collection.map(&:get).map do |trial|
49
+ print "."; STDOUT.flush
50
+ trial.relation('trial-attachments') \
51
+ .get.collection.map do |tar|
52
+ trial_attachment_resource= tar.get
53
+ print "."; STDOUT.flush
54
+ if (working_dir= trial.data['scripts'] \
55
+ .map{|k,v| v["working_dir"]}.compact.first) \
56
+ and (trial_attachment_resource.data['path'] =~ /resultset\.json/)
57
+ print "*"; STDOUT.flush
58
+ resultset= trial_attachment_resource \
59
+ .relation('data-stream').get.response.body
60
+ convert_resultset resultset, working_dir
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end.map(&:~).flatten.compact
66
+ end
67
+
68
+
69
+
70
+ ###############################################################################
71
+ # Simplev cov
72
+ ###############################################################################
73
+
74
+
75
+ def convert_resultset resultset, working_dir
76
+ SimpleCov::JSON.parse(resultset.to_json).map do |command_name, data|
77
+ [ command_name, data.map do |k,v|
78
+ case k
79
+ when "coverage"
80
+ [ k, v.map do |filename,file_coverage|
81
+ [(FileUtils.pwd + filename[working_dir.length,filename.length]) \
82
+ , file_coverage]
83
+ end.instance_eval{Hash[self]} ]
84
+ else
85
+ [k,v]
86
+ end
87
+ end.instance_eval {Hash[self]} ]
88
+ end.instance_eval{Hash[self]}.instance_eval{SimpleCov::Result.from_hash(self)}
89
+ end
90
+
91
+
92
+ def reduce_resultsets resultsets
93
+ puts "reduce_resultsets"
94
+ resultsets.reduce({}) do |agg,resultset|
95
+ resultset.original_result.merge_resultset(agg)
96
+ end
97
+ end
98
+
99
+
100
+ def init_simple_cov
101
+ SimpleCov.add_group "Models", "app/models"
102
+ SimpleCov.add_group "Controllers", "app/controllers"
103
+ SimpleCov.add_group "Views", "app/views"
104
+ SimpleCov.add_group "Helpers", "app/helpers"
105
+ SimpleCov.add_group "Factories", "factories"
106
+ SimpleCov.add_group "Libraries", "app/lib"
107
+ end
108
+
109
+
110
+ ###############################################################################
111
+ # Run
112
+ ###############################################################################
113
+
114
+ def run_coverage execution, thrad_pool_size
115
+ get_and_convert_resultset_attachments(execution,thrad_pool_size) \
116
+ .instance_eval do
117
+ reduce_resultsets self
118
+ end.instance_eval do
119
+ init_simple_cov
120
+ SimpleCov::Result.new self
121
+ end.instance_eval do
122
+ SimpleCov::Formatter::HTMLFormatter.new.format self
123
+ end
124
+ end
125
+
126
+
127
+ ###############################################################################
128
+ # Options, main ....
129
+ ###############################################################################
130
+
131
+
132
+ def parse_options options
133
+
134
+
135
+ optparse = OptionParser.new do |opts|
136
+ opts.banner = "Usage: retrieve_cider_coverage.rb -e EXECUTION_ID"
137
+
138
+ opts.on('-a', '--api-url API-URL') do |url|
139
+ options.api_url= url
140
+ end
141
+
142
+ opts.on('-e', '--execution EXECUTION_ID',
143
+ 'Execution ID to retrieve coverage for') do |exid|
144
+ options.execution_id = exid
145
+ end
146
+
147
+ opts.on('-t', '--thread-pool-size N', Integer) do |t|
148
+ options.thread_pool_size = t
149
+ end
150
+
151
+ opts.on('-u', '--username NAME', String) do |n|
152
+ options.username = n
153
+ end
154
+
155
+ opts.on('-p', '--password PASSWORD', String) do |p|
156
+ options.password= p
157
+ end
158
+
159
+ end.parse!
160
+
161
+ options
162
+ end
163
+
164
+
165
+ def assert_correct_tree_id execution
166
+ if execution.data['tree_id'] != `git log -n 1 --pretty=%T`.strip
167
+ raise ScriptError, "you must be on the same tree_id as the execution"
168
+ end
169
+ end
170
+
171
+
172
+ def main
173
+ options = OpenStruct.new
174
+ options.thread_pool_size= 50
175
+ options.execution_id= nil
176
+ options.username= ENV['CIDER_CI_USERNAME']
177
+ options.password= ENV['CIDER_CI_PASSWORD']
178
+ options.api_url= ENV['CIDER_CI_API_URL']
179
+ parse_options options
180
+ options.execution_id || raise(OptionParser::MissingArgument \
181
+ , "execution_id is required")
182
+ options.api_url || raise(OptionParser::MissingArgument \
183
+ , "api_url is required, set CIDER_CI_API_URL or provide -a option")
184
+ options.username || raise(OptionParser::MissingArgument \
185
+ , "username is required, set CIDER_CI_USERNAME")
186
+ options.password || raise(OptionParser::MissingArgument \
187
+ , "password is required, set CIDER_CI_PASSWORD")
188
+
189
+
190
+ root = connect options.api_url, options.username, options.password
191
+ execution= get_execution_resource root, options.execution_id
192
+ assert_correct_tree_id execution
193
+ FileUtils.rm_rf('coverage')
194
+ run_coverage execution, options.thread_pool_size
195
+ end
196
+
197
+
198
+ main
199
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'cider_ci/rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "cider_ci-rails"
8
+ spec.version = Cider_CI::Rails::VERSION
9
+ spec.authors = ["Thomas Schank"]
10
+ spec.email = ["DrTom@schank.ch"]
11
+ spec.summary = "Cider-CI support for Ruby and Ruby on Rails projects"
12
+ spec.description = ""
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.6"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency "thread", '~> 0.1.4'
25
+ spec.add_dependency "simplecov", '~> 0.9.1'
26
+ spec.add_dependency "json_roa-client", '~> 0.0.1'
27
+ end
@@ -0,0 +1,7 @@
1
+ require "cider_ci/rails/version"
2
+
3
+ module Cider_CI
4
+ module Rails
5
+ # Your code goes here...
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Cider_CI
2
+ module Rails
3
+ VERSION = "0.0.3"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cider_ci-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Thomas Schank
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thread
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.1
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.9.1
69
+ - !ruby/object:Gem::Dependency
70
+ name: json_roa-client
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.0.1
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.0.1
83
+ description: ''
84
+ email:
85
+ - DrTom@schank.ch
86
+ executables:
87
+ - cider-ci_coverage
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - Gemfile
93
+ - LICENSE.txt
94
+ - README.md
95
+ - Rakefile
96
+ - bin/cider-ci_coverage
97
+ - cider_ci-rails.gemspec
98
+ - lib/cider_ci/rails.rb
99
+ - lib/cider_ci/rails/version.rb
100
+ homepage: ''
101
+ licenses:
102
+ - MIT
103
+ metadata: {}
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 2.2.2
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Cider-CI support for Ruby and Ruby on Rails projects
124
+ test_files: []