inch_ci-worker 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2d8e5c139f7993f520ee717f19c37eca754583f3
4
+ data.tar.gz: 5eba432e0dfda541f9cc59ff3a87ac8b812aa257
5
+ SHA512:
6
+ metadata.gz: d1979a0695fa591d823e934a4d8fdff77b7b9c5c469740898bd4bb5b7be45e8deb857f4ed02ccc44ed77abf797f90e487889e7b1cdb64891f7201a19d8d9cfef
7
+ data.tar.gz: 57ed86823276f198cff450d2d43fc38556fd06fb3ce0a6016114b996ee8ede438127a8a0d58eb26b5a752e7c97013a6587736301409cedd50061deab5c0a3791
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ inch_ci
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.1.0
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in inch_ci-worker.gemspec
4
+ gemspec
5
+
6
+ gem 'repomen', :path => '../repomen'
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 René Föhring
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,29 @@
1
+ # InchCi::Worker
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'inch_ci-worker'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install inch_ci-worker
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it ( https://github.com/[my-github-username]/inch_ci-worker/fork )
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = 'test/**/*_test.rb'
6
+ end
7
+
8
+ task :default => :test
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # @return [String] the path to the 'lib' directory of Inch
4
+ def find_lib_path
5
+ path = __FILE__
6
+ while File.symlink?(path)
7
+ path = File.expand_path(File.readlink(path), File.dirname(path))
8
+ end
9
+ File.join(File.dirname(File.expand_path(path)), '..', 'lib')
10
+ end
11
+
12
+ $LOAD_PATH.unshift(find_lib_path)
13
+
14
+ require 'bundler/setup'
15
+ require 'inch_ci/worker'
16
+
17
+ class Command
18
+ class Build
19
+ def initialize(url, branch_name = nil, revision = nil)
20
+ InchCI::Worker::Build::Task.new(url, branch_name, revision)
21
+ end
22
+ end
23
+
24
+ class ListTags
25
+ def initialize(url, branch_name)
26
+ InchCI::Worker::ListTags::Task.new(url, branch_name)
27
+ end
28
+ end
29
+
30
+ MAP = {
31
+ 'build' => Build,
32
+ 'list-tags' => ListTags
33
+ }
34
+
35
+ def self.run(command_name, args)
36
+ if command_class = MAP[command_name]
37
+ command_class.new(*args)
38
+ else
39
+ puts "Unrecognized command: #{command_name}".color(:red)
40
+ puts "Valid commands: #{MAP.keys.sort.join(', ')}"
41
+ exit 1
42
+ end
43
+ end
44
+ end
45
+
46
+ command_name = ARGV.shift
47
+ Command.run(command_name, ARGV)
@@ -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 'inch_ci/worker/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "inch_ci-worker"
8
+ spec.version = InchCI::Worker::VERSION
9
+ spec.authors = ["René Föhring"]
10
+ spec.email = ["rf@bamaru.de"]
11
+ spec.summary = %q{Worker for the Inch CI project}
12
+ spec.description = %q{}
13
+ spec.homepage = "https://github.com/inch-ci/inch_ci-worker"
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"
23
+ spec.add_development_dependency "simplecov"
24
+ spec.add_development_dependency "pry"
25
+
26
+ spec.add_dependency "inch", "~> 0.4"
27
+ end
@@ -0,0 +1,78 @@
1
+ require 'yaml'
2
+
3
+ module InchCI
4
+ module Worker
5
+ module Build
6
+ class Report < Struct.new(:build)
7
+ def to_yaml
8
+ to_hash.to_yaml
9
+ end
10
+
11
+ private
12
+
13
+ def to_hash
14
+ data = {
15
+ 'status' => build.status,
16
+ 'repo_url' => build.url,
17
+ 'branch_name' => build.branch_name,
18
+ 'started_at' => build.started_at,
19
+ 'finished_at' => build.started_at,
20
+ 'latest_revision' => build.latest_revision,
21
+ }
22
+ data['service_name'] = build.service_name.to_s if build.service_name
23
+ data['user_name'] = build.user_name if build.user_name
24
+ data['repo_name'] = build.repo_name if build.repo_name
25
+ if build.revision_uid
26
+ data['revision_uid'] = build.revision_uid
27
+ data['revision_message'] = build.revision_message
28
+ data['revision_author_name'] = build.revision_author_name
29
+ data['revision_author_email'] = build.revision_author_email
30
+ data['revision_authored_at'] = build.revision_authored_at
31
+ end
32
+ data['tag'] = build.tag_uid if build.tag_uid
33
+ data['objects'] = objects_hash if build.objects
34
+ {'build' => data}
35
+ end
36
+
37
+ def objects_hash
38
+ build.objects.map do |o|
39
+ code_object_to_hash(o)
40
+ end
41
+ end
42
+
43
+ def code_object_to_hash(o)
44
+ {
45
+ 'type' => o.type.gsub('Inch::CodeObject::Proxy::', ''),
46
+ 'fullname' => o.fullname,
47
+ 'docstring' => o.original_docstring.to_s,
48
+ 'score' => o.score.to_i,
49
+ 'grade' => o.grade.to_s,
50
+ 'priority' => o.priority.to_i,
51
+ 'location' => location(o.files.first),
52
+ 'roles' => o.roles.map { |r| role_to_hash(o, r) },
53
+ }
54
+ end
55
+
56
+ def location(file)
57
+ return unless file
58
+ "#{file.relative_path}:#{file.line_no}"
59
+ end
60
+
61
+ def role_to_hash(object, role)
62
+ ref_name = role.object.fullname
63
+ name = role.class.to_s.gsub('Inch::Evaluation::Role::', '')
64
+ hash = {
65
+ 'name' => name,
66
+ 'priority' => role.priority,
67
+ }
68
+ hash['potential_score'] = role.potential_score if role.potential_score
69
+ hash['score'] = role.score if role.score
70
+ hash['min_score'] = role.min_score if role.min_score
71
+ hash['max_score'] = role.max_score if role.max_score
72
+ hash['ref_name'] = ref_name if object.fullname != ref_name
73
+ hash
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,81 @@
1
+ module InchCI
2
+ module Worker
3
+ module Build
4
+ class Result < Struct.new(:repo, :branch_name, :latest_revision, :objects)
5
+ extend Forwardable
6
+
7
+ def_delegators :repo, :url
8
+ def_delegators :repo, :service_name, :user_name, :repo_name
9
+ def_delegators :repo, :revision_message
10
+ def_delegators :repo, :revision_author_name
11
+ def_delegators :repo, :revision_author_email
12
+ def_delegators :repo, :revision_authored_at
13
+
14
+ attr_accessor :started_at
15
+ attr_accessor :finished_at
16
+ attr_writer :status
17
+
18
+ def duration
19
+ finished_at - started_at
20
+ end
21
+
22
+ def revision_uid
23
+ repo.revision
24
+ end
25
+
26
+ def status
27
+ @status || 'error'
28
+ end
29
+
30
+ def tag_uid
31
+ repo.tag.empty? ? nil : repo.tag
32
+ end
33
+ end
34
+
35
+ class ResultSuccess < Result
36
+ def status
37
+ 'success'
38
+ end
39
+ end
40
+
41
+ class ResultFail < Result
42
+ def revision_uid; nil; end
43
+ def revision_message; nil; end
44
+ def revision_author_name; nil; end
45
+ def revision_author_email; nil; end
46
+ def revision_authored_at; nil; end
47
+ def tag_uid; nil; end
48
+ def service_name; nil; end
49
+ def user_name; nil; end
50
+ def repo_name; nil; end
51
+ def status
52
+ 'failed'
53
+ end
54
+ end
55
+
56
+ class ResultRetrieverFailed < ResultFail
57
+ def status
58
+ 'failed:retriever'
59
+ end
60
+ end
61
+
62
+ class ResultChangeBranchFailed < ResultFail
63
+ def status
64
+ 'failed:change_branch'
65
+ end
66
+ end
67
+
68
+ class ResultCheckoutRevisionFailed < ResultFail
69
+ def status
70
+ 'failed:checkout_revision'
71
+ end
72
+ end
73
+
74
+ class ResultParserFailed < ResultFail
75
+ def status
76
+ 'failed:parser'
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,69 @@
1
+ require 'inch'
2
+ require 'repomen'
3
+
4
+ require_relative 'result'
5
+ require_relative 'report'
6
+
7
+ module InchCI
8
+ module Worker
9
+ module Build
10
+ class Task
11
+ def initialize(url, branch_name = 'master', revision = nil)
12
+ @work_dir = Dir.mktmpdir
13
+ if revision.nil?
14
+ revision = 'HEAD'
15
+ @latest_revision = true
16
+ end
17
+ started_at = Time.now
18
+ @result = build(url, branch_name, revision, !!@latest_revision)
19
+ @result.finished_at = Time.now
20
+ @result.started_at = started_at
21
+ puts Report.new(@result).to_yaml
22
+ ensure
23
+ FileUtils.remove_entry @work_dir
24
+ end
25
+
26
+ private
27
+
28
+ def build(url, branch_name, revision, latest_revision)
29
+ @url = url
30
+ if retrieve_repo
31
+ if repo.change_branch(branch_name, true)
32
+ if repo.checkout_revision(revision)
33
+ if @codebase = parse_codebase(repo.path)
34
+ ResultSuccess.new(repo, branch_name, latest_revision, @codebase.objects)
35
+ else
36
+ ResultParserFailed.new(repo, branch_name, latest_revision, nil)
37
+ end
38
+ else
39
+ ResultCheckoutRevisionFailed.new(repo, branch_name, latest_revision, nil)
40
+ end
41
+ else
42
+ ResultChangeBranchFailed.new(repo, branch_name, latest_revision, nil)
43
+ end
44
+ else
45
+ ResultRetrieverFailed.new(repo, branch_name, latest_revision, nil)
46
+ end
47
+ end
48
+
49
+ def parse_codebase(path)
50
+ YARD::Config.options[:safe_mode] = true
51
+ begin
52
+ ::Inch::Codebase.parse(path)
53
+ rescue
54
+ nil
55
+ end
56
+ end
57
+
58
+ def repo
59
+ @repo ||= Repomen::Retriever.new(@url, :work_dir => @work_dir)
60
+ end
61
+
62
+ # @return [Repomen::Retriever,nil] either the retrieved repo or +nil+
63
+ def retrieve_repo
64
+ repo.retrieved? ? repo : nil
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,8 @@
1
+ require_relative 'build/task'
2
+
3
+ module InchCI
4
+ module Worker
5
+ module Build
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,19 @@
1
+ require 'yaml'
2
+
3
+ module InchCI
4
+ module Worker
5
+ module ListTags
6
+ class Report < Struct.new(:tag_list)
7
+ def to_yaml
8
+ to_hash.to_yaml
9
+ end
10
+
11
+ private
12
+
13
+ def to_hash
14
+ {'tags' => tag_list}
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ require 'inch'
2
+ require 'repomen'
3
+
4
+ require_relative 'report'
5
+
6
+ module InchCI
7
+ module Worker
8
+ module ListTags
9
+ class Task
10
+ def initialize(url, branch_name = 'master')
11
+ @work_dir = Dir.mktmpdir
12
+ @url = url
13
+ @branch_name = branch_name
14
+ puts Report.new(build_tag_list).to_yaml
15
+ ensure
16
+ FileUtils.remove_entry @work_dir
17
+ end
18
+
19
+ private
20
+
21
+ def build_tag_list
22
+ if retrieve_repo
23
+ if repo.change_branch(@branch_name, true)
24
+ tag_list
25
+ else
26
+ # ChangeBranchFailed
27
+ end
28
+ else
29
+ # RetrieverFailed
30
+ end
31
+ end
32
+
33
+ def repo
34
+ @repo ||= Repomen::Retriever.new(@url, :work_dir => @work_dir)
35
+ end
36
+
37
+ # @return [Repomen::Retriever,nil] either the retrieved repo or +nil+
38
+ def retrieve_repo
39
+ repo.retrieved? ? repo : nil
40
+ end
41
+
42
+ def tag_list
43
+ Dir.chdir(repo.path) do
44
+ output = `git for-each-ref --sort='taggerdate' refs/tags`
45
+ output.lines.map do |line|
46
+ line.split("\t").last.gsub('refs/tags/', '').chomp
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,10 @@
1
+ require_relative 'list_tags/task'
2
+
3
+ module InchCI
4
+ module Worker
5
+ module ListTags
6
+ class Task
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ module InchCI
2
+ module Worker
3
+ VERSION = "0.2.0"
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ require 'repomen'
2
+
3
+ # Set the directory where checked out repos are kept
4
+ Repomen.config.work_dir = ENV['REPOMEN_WORK_DIR'] || File.join(__dir__, '..', '..', 'tmp')
5
+
6
+ # Check out the whole history
7
+ Repomen.config.only_last_revision = false
8
+
9
+ module InchCI
10
+ module Worker
11
+ end
12
+ end
13
+
14
+ require 'inch_ci/worker/build'
15
+ require 'inch_ci/worker/list_tags'
@@ -0,0 +1,109 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
2
+
3
+ describe ::InchCI::Worker::Build do
4
+ let(:described_class) { ::InchCI::Worker::Build::Task }
5
+ let(:branch_name) { 'master' }
6
+ let(:url) { 'git@bitbucket.org:atlassian_tutorial/helloworld.git' }
7
+ let(:incorrect_url) { 'git@bitbucket.org:atlassian_tutorial/helloworld123.git' }
8
+
9
+ #
10
+ # Good scenarios
11
+ #
12
+
13
+ it 'should retrieve the repo' do
14
+ out, err = capture_io do
15
+ @task = described_class.new(url, branch_name)
16
+ end
17
+ refute out.empty?
18
+ assert_match /status: success/, out
19
+ assert err.empty?
20
+ end
21
+
22
+ it 'should retrieve the repo and checkout revision' do
23
+ skip # helloworld doesnot have tags
24
+ # TODO: make own helloworld repo
25
+ out, err = capture_io do
26
+ @task = described_class.new(url, branch_name, 'v0.1.0')
27
+ end
28
+ refute out.empty?
29
+ assert_match /status: success/, out
30
+ assert err.empty?
31
+ end
32
+
33
+ #
34
+ # Deal with invalid parameters
35
+ #
36
+
37
+ it "should not retrieve non-existing branch in repo" do
38
+ out, err = capture_io do
39
+ @task = described_class.new(url, 'somebranch')
40
+ end
41
+ refute out.empty?
42
+ assert_match /status: failed:change_branch/, out
43
+ end
44
+
45
+ it "should not retrieve non-existing revision in repo" do
46
+ out, err = capture_io do
47
+ @task = described_class.new(url, branch_name, 'vX.X.X')
48
+ end
49
+ refute out.empty?
50
+ assert_match /status: failed:checkout_revision/, out
51
+ end
52
+
53
+ #
54
+ # Deal with not existing repos, whatever the parameters are
55
+ #
56
+
57
+ it "should not retrieve non-existing repo" do
58
+ out, err = capture_io do
59
+ @task = described_class.new(incorrect_url, branch_name)
60
+ end
61
+ refute out.empty?
62
+ assert_match /status: failed:retriever/, out
63
+ end
64
+
65
+ it "should not retrieve non-existing branch in non-existing repo" do
66
+ out, err = capture_io do
67
+ @task = described_class.new(incorrect_url, 'somebranch')
68
+ end
69
+ refute out.empty?
70
+ assert_match /status: failed:retriever/, out
71
+ end
72
+
73
+ it "should not retrieve non-existing revision in non-existing repo" do
74
+ out, err = capture_io do
75
+ @task = described_class.new(incorrect_url, branch_name, 'vX.X.X')
76
+ end
77
+ refute out.empty?
78
+ assert_match /status: failed:retriever/, out
79
+ end
80
+
81
+ #
82
+ # Deal with errors thrown by Inch itself
83
+ #
84
+
85
+ module ::Inch::Codebase
86
+ class << self
87
+ alias :parse_original :parse
88
+ end
89
+ end
90
+
91
+ it "should not retrieve error throwing repo" do
92
+ # Patch the Parser to fail
93
+ codebase = ::Inch::Codebase
94
+ def codebase.parse(*args)
95
+ raise "Vending machine is broken!"
96
+ end
97
+
98
+ out, err = capture_io do
99
+ @task = described_class.new(url, branch_name)
100
+ end
101
+ refute out.empty?
102
+ assert_match /status: failed:parser/, out
103
+
104
+ # Let's repair the Parser
105
+ def codebase.parse(*args)
106
+ parse_original(*args)
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,7 @@
1
+ require 'simplecov'
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
4
+ require 'minitest/autorun'
5
+ require 'bundler'
6
+ Bundler.require
7
+ require 'inch_ci/worker'
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: inch_ci-worker
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - René Föhring
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-22 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: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: inch
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.4'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.4'
83
+ description: ''
84
+ email:
85
+ - rf@bamaru.de
86
+ executables:
87
+ - inch_ci-worker
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".ruby-gemset"
93
+ - ".ruby-version"
94
+ - Gemfile
95
+ - LICENSE.txt
96
+ - README.md
97
+ - Rakefile
98
+ - bin/inch_ci-worker
99
+ - inch_ci-worker.gemspec
100
+ - lib/inch_ci/worker.rb
101
+ - lib/inch_ci/worker/build.rb
102
+ - lib/inch_ci/worker/build/report.rb
103
+ - lib/inch_ci/worker/build/result.rb
104
+ - lib/inch_ci/worker/build/task.rb
105
+ - lib/inch_ci/worker/list_tags.rb
106
+ - lib/inch_ci/worker/list_tags/report.rb
107
+ - lib/inch_ci/worker/list_tags/task.rb
108
+ - lib/inch_ci/worker/version.rb
109
+ - test/integration/build_test.rb
110
+ - test/test_helper.rb
111
+ homepage: https://github.com/inch-ci/inch_ci-worker
112
+ licenses:
113
+ - MIT
114
+ metadata: {}
115
+ post_install_message:
116
+ rdoc_options: []
117
+ require_paths:
118
+ - lib
119
+ required_ruby_version: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ required_rubygems_version: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ requirements: []
130
+ rubyforge_project:
131
+ rubygems_version: 2.2.0
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Worker for the Inch CI project
135
+ test_files:
136
+ - test/integration/build_test.rb
137
+ - test/test_helper.rb
138
+ has_rdoc: