jenkins_tracker 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.
- data/.gitignore +19 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +22 -0
- data/README.md +48 -0
- data/Rakefile +1 -0
- data/bin/jenkins_tracker +9 -0
- data/jenkins_tracker.gemspec +25 -0
- data/lib/jenkins_tracker.rb +9 -0
- data/lib/jenkins_tracker/base.rb +22 -0
- data/lib/jenkins_tracker/cli.rb +31 -0
- data/lib/jenkins_tracker/tracker_client.rb +43 -0
- data/lib/jenkins_tracker/util.rb +32 -0
- data/lib/jenkins_tracker/version.rb +3 -0
- data/spec/fixtures/git_changelog.txt +20 -0
- data/spec/fixtures/job.json +105 -0
- data/spec/jenkins_tracker/base_spec.rb +20 -0
- data/spec/jenkins_tracker/tracker_client_spec.rb +13 -0
- data/spec/jenkins_tracker/util_spec.rb +35 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/fixture_loader.rb +11 -0
- metadata +145 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/Gemfile
ADDED
data/MIT-LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Prashant Nadarajan, Bitium, Inc.
|
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,48 @@
|
|
1
|
+
# JenkinsTracker
|
2
|
+
|
3
|
+
`jenkins_tracker` is a command line utility packaged as a [RubyGem](https://rubygems.org) that integrates [Jenkins](http://jenkins-ci.org/) build information with
|
4
|
+
the relevant [Pivotal Tracker](https://www.pivotaltracker.com) stories within a project.
|
5
|
+
|
6
|
+
It's ideally run as a Post Build Action in Jenkins.
|
7
|
+
|
8
|
+
This utility makes some very specific assumptions about your Jenkins environment:-
|
9
|
+
|
10
|
+
* Git as your SCM via the [Jenkins Git Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin).
|
11
|
+
|
12
|
+
* The Jenkins build changelog file is available at `$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER/changelog.xml`.
|
13
|
+
|
14
|
+
* Ability to execute Ruby scripts.
|
15
|
+
|
16
|
+
|
17
|
+
The following are required for your Pivotal Tracker project:-
|
18
|
+
|
19
|
+
* [API access enabled](https://www.pivotaltracker.com/help/api) (enabled by default).
|
20
|
+
|
21
|
+
|
22
|
+
## Installation
|
23
|
+
|
24
|
+
Add this line to your application's Gemfile:
|
25
|
+
|
26
|
+
gem 'jenkins_tracker'
|
27
|
+
|
28
|
+
And then execute:
|
29
|
+
|
30
|
+
$ bundle
|
31
|
+
|
32
|
+
Or install it yourself as:
|
33
|
+
|
34
|
+
$ gem install jenkins_tracker
|
35
|
+
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
TODO: Write usage instructions here
|
40
|
+
|
41
|
+
|
42
|
+
## Contributing
|
43
|
+
|
44
|
+
1. Fork it
|
45
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
46
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
47
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
48
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/jenkins_tracker
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'jenkins_tracker/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "jenkins_tracker"
|
8
|
+
gem.version = JenkinsTracker::VERSION
|
9
|
+
gem.authors = ["Prashant Nadarajan"]
|
10
|
+
gem.email = ["prashant.nadarajan@gmail.com"]
|
11
|
+
gem.description = %q{Integrate Jenkins build info with Pivotal Tracker project stories }
|
12
|
+
gem.summary = %q{Integrate Jenkins build info as notes to the relevant Pivotal Tracker stories based on post commit message syntax}
|
13
|
+
gem.homepage = "https://github.com/prashantrajan/jenkins_tracker"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = %w(jenkins_tracker)
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_runtime_dependency 'rest-client', '~> 1.6'
|
21
|
+
gem.add_runtime_dependency 'thor', '~> 0.15'
|
22
|
+
|
23
|
+
gem.add_development_dependency 'rake', '>= 0.8'
|
24
|
+
gem.add_development_dependency 'rspec', '~> 2.12'
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module JenkinsTracker
|
2
|
+
class Base
|
3
|
+
include Util
|
4
|
+
|
5
|
+
attr_reader :changelog, :tracker_client, :job_name, :build_url
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@changelog = File.read(options[:changelog_file])
|
9
|
+
@tracker_client = TrackerClient.new(:token => options[:tracker_token])
|
10
|
+
@job_name = options[:job_name]
|
11
|
+
@build_url = options[:build_url]
|
12
|
+
end
|
13
|
+
|
14
|
+
def integrate_job_with_tracker(project_id)
|
15
|
+
parse_changelog(changelog).each do |change|
|
16
|
+
note = "*#{change.commit_message}* integrated in *#{job_name}* (#{build_url})"
|
17
|
+
tracker_client.add_note_to_story(project_id, change.story_id, note)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module JenkinsTracker
|
4
|
+
class Cli < Thor
|
5
|
+
|
6
|
+
desc 'integrate', 'Integrate Jenkins build with Pivotal Tracker project stories'
|
7
|
+
method_option 'tracker-token', :required => true, :desc => 'Pivotal Tracker API Token'
|
8
|
+
method_option 'tracker-project-id', :required => true, :type => :numeric, :desc => 'Pivotal Tracker Project ID'
|
9
|
+
method_option 'job-name', :default => ENV['JOB_NAME'], :desc => 'Jenkins job name'
|
10
|
+
method_option 'build-url', :default => ENV['BUILD_URL'], :desc => 'Jenkins build URL'
|
11
|
+
method_option 'changelog-file', :desc => 'Absolute path to changelog file.', :default => "#{ENV['JENKINS_HOME']}/jobs/#{ENV['JOB_NAME']}/builds/#{ENV['BUILD_NUMBER']}/changelog.xml"
|
12
|
+
def integrate
|
13
|
+
job_name = options['job-name']
|
14
|
+
tracker_project_id = options['tracker-project-id']
|
15
|
+
|
16
|
+
begin
|
17
|
+
JenkinsTracker::Base.new(
|
18
|
+
:changelog_file => options['changelog-file'],
|
19
|
+
:tracker_token => options['tracker-token'],
|
20
|
+
:job_name => job_name,
|
21
|
+
:build_url => options['build-url']
|
22
|
+
).integrate_job_with_tracker(tracker_project_id)
|
23
|
+
|
24
|
+
say "Successfully integrated Jenkins Job (#{job_name}) with Pivotal Tracker Project (#{tracker_project_id})", :green
|
25
|
+
rescue
|
26
|
+
# do nothing
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module JenkinsTracker
|
2
|
+
class TrackerClient
|
3
|
+
|
4
|
+
attr_writer :use_ssl
|
5
|
+
attr_reader :token
|
6
|
+
|
7
|
+
def initialize(options = {})
|
8
|
+
@token = options[:token]
|
9
|
+
end
|
10
|
+
|
11
|
+
def connection(options = {})
|
12
|
+
@connection ||= RestClient::Resource.new(api_url, :headers => { 'X-TrackerToken' => token, 'Content-Type' => 'application/xml' })
|
13
|
+
end
|
14
|
+
|
15
|
+
def add_note_to_story(project_id, story_id, note)
|
16
|
+
connection["projects/#{project_id}/stories/#{story_id}/notes"].post("<note><text>#{note}</text></note>")
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def tracker_host
|
23
|
+
'www.pivotaltracker.com'
|
24
|
+
end
|
25
|
+
|
26
|
+
def api_path
|
27
|
+
'/services/v3'
|
28
|
+
end
|
29
|
+
|
30
|
+
def api_url
|
31
|
+
"#{protocol}://#{tracker_host}#{api_path}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def use_ssl
|
35
|
+
@use_ssl || false
|
36
|
+
end
|
37
|
+
|
38
|
+
def protocol
|
39
|
+
use_ssl ? 'https' : 'http'
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module JenkinsTracker
|
2
|
+
module Util
|
3
|
+
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
end
|
10
|
+
|
11
|
+
#def parse_json(str, options = {})
|
12
|
+
# JSON.parse(str, options)
|
13
|
+
#end
|
14
|
+
|
15
|
+
def parse_changelog(str)
|
16
|
+
results = []
|
17
|
+
|
18
|
+
str.scan(/(\[[#a-zA-Z0-9\s]+\])(.*)/) do |ids, msg|
|
19
|
+
parse_tracker_story_ids(ids).each do |id|
|
20
|
+
results << OpenStruct.new(:story_id => id, :commit_message => "#{ids}#{msg}".strip)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
results
|
25
|
+
end
|
26
|
+
|
27
|
+
def parse_tracker_story_ids(str)
|
28
|
+
str.strip.gsub(/[\[#\]]/, '').split(' ').map(&:to_i).reject { |i| i == 0 }
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Changes in branch origin/master, between c0d9a605c020d0ccaac2ef7f4a52607f0b1032ff and 05b96f9a60360525b5a17721e0ed107e53f42ede
|
2
|
+
commit 05b96f9a60360525b5a17721e0ed107e53f42ede
|
3
|
+
tree 90fae1497ff2e0eb19992993ac2a335561ef9e21
|
4
|
+
parent b1d0cda2f3766e5285cbe6f8c788d5d3c2d0aaf3
|
5
|
+
author Prashant Nadarajan <mrp@example.com> 1360758891 +0800
|
6
|
+
committer Prashant Nadarajan <mrp@example.com> 1360758902 +0800
|
7
|
+
|
8
|
+
[#123 #456] added more test
|
9
|
+
|
10
|
+
:100644 100644 7da3210b8da221718054af45ca5384a1b3c5a654 e57a7a9b044142080875d0b5b6548ea62f666143 M README.md
|
11
|
+
|
12
|
+
commit b1d0cda2f3766e5285cbe6f8c788d5d3c2d0aaf3
|
13
|
+
tree 5364d5d2ec4e082218ef7a1d779ac35a89647f3b
|
14
|
+
parent c0d9a605c020d0ccaac2ef7f4a52607f0b1032ff
|
15
|
+
author Prashant Nadarajan <mrp@example.com> 1360758738 +0800
|
16
|
+
committer Prashant Nadarajan <mrp@example.com> 1360758738 +0800
|
17
|
+
|
18
|
+
[Fixes #456 #789] added test 1 to readme
|
19
|
+
|
20
|
+
:100644 100644 3979ab174391acf45520c09801a8b6919fd9df95 7da3210b8da221718054af45ca5384a1b3c5a654 M README.md
|
@@ -0,0 +1,105 @@
|
|
1
|
+
{
|
2
|
+
"actions": [
|
3
|
+
{
|
4
|
+
"causes": [
|
5
|
+
{
|
6
|
+
"shortDescription": "Started by user Prashant Nadarajan",
|
7
|
+
"userId": "prashantrajan",
|
8
|
+
"userName": "Prashant Nadarajan"
|
9
|
+
}
|
10
|
+
]
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"buildsByBranchName": {
|
14
|
+
"origin/master": {
|
15
|
+
"buildNumber": 2,
|
16
|
+
"buildResult": null,
|
17
|
+
"revision": {
|
18
|
+
"SHA1": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
19
|
+
"branch": [
|
20
|
+
{
|
21
|
+
"SHA1": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
22
|
+
"name": "origin/master"
|
23
|
+
}
|
24
|
+
]
|
25
|
+
}
|
26
|
+
}
|
27
|
+
},
|
28
|
+
"lastBuiltRevision": {
|
29
|
+
"SHA1": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
30
|
+
"branch": [
|
31
|
+
{
|
32
|
+
"SHA1": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
33
|
+
"name": "origin/master"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
},
|
37
|
+
"remoteUrls": ["ssh://git@github.com/prashantrajan/zz_test.git"],
|
38
|
+
"scmName": ""
|
39
|
+
},
|
40
|
+
{},
|
41
|
+
{}
|
42
|
+
],
|
43
|
+
"artifacts": [],
|
44
|
+
"building": false,
|
45
|
+
"description": null,
|
46
|
+
"duration": 1355,
|
47
|
+
"estimatedDuration": 1618,
|
48
|
+
"executor": null,
|
49
|
+
"fullDisplayName": "zz_test #2",
|
50
|
+
"id": "2013-02-13_04-37-49",
|
51
|
+
"keepLog": false, "number": 2,
|
52
|
+
"result": "SUCCESS",
|
53
|
+
"timestamp": 1360759069600,
|
54
|
+
"url": "http://jenkins.example.com/job/zz_test/2/",
|
55
|
+
"builtOn": "",
|
56
|
+
"changeSet": {
|
57
|
+
"items": [
|
58
|
+
{
|
59
|
+
"affectedPaths": ["README.md"],
|
60
|
+
"commitId": "b1d0cda2f3766e5285cbe6f8c788d5d3c2d0aaf3",
|
61
|
+
"timestamp": 1360758738000,
|
62
|
+
"author": {
|
63
|
+
"absoluteUrl": "http://jenkins.example.com/user/prashantrajan",
|
64
|
+
"fullName": "Prashant Nadarajan"
|
65
|
+
},
|
66
|
+
"comment": "[#44375023] added test 1 to readme\n",
|
67
|
+
"date": "2013-02-13 04:32:18 +0800",
|
68
|
+
"id": "b1d0cda2f3766e5285cbe6f8c788d5d3c2d0aaf3",
|
69
|
+
"msg": "[#44375023] added test 1 to readme",
|
70
|
+
"paths": [
|
71
|
+
{
|
72
|
+
"editType": "edit",
|
73
|
+
"file": "README.md"
|
74
|
+
}
|
75
|
+
]
|
76
|
+
},
|
77
|
+
{
|
78
|
+
"affectedPaths": ["README.md"],
|
79
|
+
"commitId": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
80
|
+
"timestamp": 1360758891000,
|
81
|
+
"author": {
|
82
|
+
"absoluteUrl": "http://jenkins.example.com/user/prashantrajan",
|
83
|
+
"fullName": "Prashant Nadarajan"
|
84
|
+
},
|
85
|
+
"comment": "[#44375023 #44375221] added more test\n",
|
86
|
+
"date": "2013-02-13 04:34:51 +0800",
|
87
|
+
"id": "05b96f9a60360525b5a17721e0ed107e53f42ede",
|
88
|
+
"msg": "[#44375023 #44375221] added more test",
|
89
|
+
"paths": [
|
90
|
+
{
|
91
|
+
"editType": "edit",
|
92
|
+
"file": "README.md"
|
93
|
+
}
|
94
|
+
]
|
95
|
+
}
|
96
|
+
],
|
97
|
+
"kind": null
|
98
|
+
},
|
99
|
+
"culprits": [
|
100
|
+
{
|
101
|
+
"absoluteUrl": "http://jenkins.example.com/user/prashantrajan",
|
102
|
+
"fullName": "Prashant Nadarajan"
|
103
|
+
}
|
104
|
+
]
|
105
|
+
}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JenkinsTracker::Base do
|
4
|
+
|
5
|
+
describe '#initialize' do
|
6
|
+
it 'does basic set up' do
|
7
|
+
obj = described_class.new(
|
8
|
+
:changelog_file => fixture_file_path('git_changelog.txt'),
|
9
|
+
:tracker_token => 'xxx',
|
10
|
+
:job_name => 'foo_job',
|
11
|
+
:build_url => 'http://jenkins.bitium/com/foo_job/3'
|
12
|
+
)
|
13
|
+
expect(obj.changelog).to eq( File.read(fixture_file_path('git_changelog.txt')) )
|
14
|
+
expect(obj.tracker_client.token).to eq('xxx')
|
15
|
+
expect(obj.job_name).to eq('foo_job')
|
16
|
+
expect(obj.build_url).to eq('http://jenkins.bitium/com/foo_job/3')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe JenkinsTracker::TrackerClient do
|
4
|
+
|
5
|
+
describe '#connection' do
|
6
|
+
it 'returns an instance of RestClient::Resource' do
|
7
|
+
tracker_client = described_class.new(:token => 'xxx')
|
8
|
+
expect(tracker_client.connection).to be_an_instance_of(RestClient::Resource)
|
9
|
+
expect(tracker_client.connection.to_s).to eq('http://www.pivotaltracker.com/services/v3')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
class UtilModuleTester
|
5
|
+
include JenkinsTracker::Util
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
describe JenkinsTracker::Util do
|
10
|
+
let!(:class_instance) { UtilModuleTester.new }
|
11
|
+
|
12
|
+
#describe '#parse_json' do
|
13
|
+
# let(:json_str) { load_fixture_as_str('job.json') }
|
14
|
+
#
|
15
|
+
# it 'returns a Ruby data structure representation of the JSON string' do
|
16
|
+
# results = class_instance.parse_json(json_str)
|
17
|
+
# expect(results['changeSet']['items'].size).to eq(2)
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
#end
|
21
|
+
|
22
|
+
describe '#parse_changelog' do
|
23
|
+
let(:git_changelog) { load_fixture_as_str('git_changelog.txt') }
|
24
|
+
|
25
|
+
it 'returns an array of struct objects' do
|
26
|
+
results = class_instance.parse_changelog(git_changelog)
|
27
|
+
expect(results.first.story_id).to eq(123)
|
28
|
+
expect(results.first.commit_message).to eq('[#123 #456] added more test')
|
29
|
+
|
30
|
+
expect(results.last.story_id).to eq(789)
|
31
|
+
expect(results.last.commit_message).to eq('[Fixes #456 #789] added test 1 to readme')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'jenkins_tracker'
|
2
|
+
|
3
|
+
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '../'))
|
4
|
+
Dir[ File.join(PROJECT_ROOT, 'spec', 'support/**/*.rb') ].each { |f| require f }
|
5
|
+
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
14
|
+
# the seed, which is printed after each run.
|
15
|
+
# --seed 1234
|
16
|
+
config.order = 'random'
|
17
|
+
|
18
|
+
config.include FixtureLoader
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jenkins_tracker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Prashant Nadarajan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rest-client
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.6'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.6'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: thor
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0.15'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0.15'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.8'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.8'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ~>
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '2.12'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ~>
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.12'
|
78
|
+
description: ! 'Integrate Jenkins build info with Pivotal Tracker project stories '
|
79
|
+
email:
|
80
|
+
- prashant.nadarajan@gmail.com
|
81
|
+
executables:
|
82
|
+
- jenkins_tracker
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- .rspec
|
88
|
+
- Gemfile
|
89
|
+
- MIT-LICENSE
|
90
|
+
- README.md
|
91
|
+
- Rakefile
|
92
|
+
- bin/jenkins_tracker
|
93
|
+
- jenkins_tracker.gemspec
|
94
|
+
- lib/jenkins_tracker.rb
|
95
|
+
- lib/jenkins_tracker/base.rb
|
96
|
+
- lib/jenkins_tracker/cli.rb
|
97
|
+
- lib/jenkins_tracker/tracker_client.rb
|
98
|
+
- lib/jenkins_tracker/util.rb
|
99
|
+
- lib/jenkins_tracker/version.rb
|
100
|
+
- spec/fixtures/git_changelog.txt
|
101
|
+
- spec/fixtures/job.json
|
102
|
+
- spec/jenkins_tracker/base_spec.rb
|
103
|
+
- spec/jenkins_tracker/tracker_client_spec.rb
|
104
|
+
- spec/jenkins_tracker/util_spec.rb
|
105
|
+
- spec/spec_helper.rb
|
106
|
+
- spec/support/fixture_loader.rb
|
107
|
+
homepage: https://github.com/prashantrajan/jenkins_tracker
|
108
|
+
licenses: []
|
109
|
+
post_install_message:
|
110
|
+
rdoc_options: []
|
111
|
+
require_paths:
|
112
|
+
- lib
|
113
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
119
|
+
segments:
|
120
|
+
- 0
|
121
|
+
hash: 1872917664060546366
|
122
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
segments:
|
129
|
+
- 0
|
130
|
+
hash: 1872917664060546366
|
131
|
+
requirements: []
|
132
|
+
rubyforge_project:
|
133
|
+
rubygems_version: 1.8.24
|
134
|
+
signing_key:
|
135
|
+
specification_version: 3
|
136
|
+
summary: Integrate Jenkins build info as notes to the relevant Pivotal Tracker stories
|
137
|
+
based on post commit message syntax
|
138
|
+
test_files:
|
139
|
+
- spec/fixtures/git_changelog.txt
|
140
|
+
- spec/fixtures/job.json
|
141
|
+
- spec/jenkins_tracker/base_spec.rb
|
142
|
+
- spec/jenkins_tracker/tracker_client_spec.rb
|
143
|
+
- spec/jenkins_tracker/util_spec.rb
|
144
|
+
- spec/spec_helper.rb
|
145
|
+
- spec/support/fixture_loader.rb
|