octopolo 0.0.2 → 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 +8 -8
- data/.gitignore +1 -0
- data/CHANGELOG.markdown +10 -0
- data/lib/octopolo/config.rb +4 -0
- data/lib/octopolo/github.rb +12 -0
- data/lib/octopolo/github/label.rb +86 -0
- data/lib/octopolo/scripts/deployable.rb +7 -0
- data/lib/octopolo/version.rb +1 -1
- data/octopolo.gemspec +1 -1
- data/spec/octopolo/config_spec.rb +10 -0
- data/spec/octopolo/github/label_spec.rb +103 -0
- data/spec/octopolo/scripts/deployable_spec.rb +24 -1
- data/spec/spec_helper.rb +1 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2Q4NWI4ZGY4Y2M3NmNmNTc1MjU0YTcwYjM3YjkyMmU5ZmFjMmViNA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NjFiZjgyMmZiODM0M2ZlZDM4ODVlY2E2M2QxMzMyMmRjMzcwMjkwNg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGNmMTYzMmI5ZjM1YTk0M2Q3NTY3MGFmMTFlNmEzZDAwNTlhZDkxMDg1ZWU4
|
10
|
+
ODk0NDFjMDI4YmFiOThkMDU3NWYzOGQ3MDcyOTZiMDcyN2RhMzUxNzlkMTk1
|
11
|
+
YWQxYWY3OWM2NjlhZmJkMDMyN2ViYTIyYzUyMmUxYWQ1NzM3OWY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OWU3MzBjNWJlMTc4NjRmMjNiZmQ3ZmEwZmQ1NmQxZDE4Njk5YTc5NWQyY2Y1
|
14
|
+
ODVjODVlYmMxYWFjNDdhNDRiZGMxYjAzODdmZDRmNzM1ZGNkZTVmYTYzZGJi
|
15
|
+
ZGUwZGFiZjlmZWZhMzJhZjZkZjkwNzA1YTI5N2UxMWJiYTUwMzI=
|
data/.gitignore
CHANGED
data/CHANGELOG.markdown
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
#### v0.1.0
|
2
|
+
|
3
|
+
* Add Label for deployable
|
4
|
+
|
5
|
+
> Elliot Hursh: Nick LaMuro: https://github.com/sportngin/octopolo/pull/20
|
6
|
+
|
7
|
+
* upgraded rspec to 2.99.0, moved deprecation warning output to deprecations.log
|
8
|
+
|
9
|
+
> Elliot Hursh: Nick LaMuro: https://github.com/sportngin/octopolo/pull/18
|
10
|
+
|
data/lib/octopolo/config.rb
CHANGED
data/lib/octopolo/github.rb
CHANGED
@@ -86,6 +86,18 @@ module Octopolo
|
|
86
86
|
["tst-octopolo"]
|
87
87
|
end
|
88
88
|
|
89
|
+
def self.labels *args
|
90
|
+
client.labels *args
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.add_label *args
|
94
|
+
client.add_label *args
|
95
|
+
end
|
96
|
+
|
97
|
+
def self.add_labels_to_pull *args
|
98
|
+
client.add_labels_to_an_issue *args
|
99
|
+
end
|
100
|
+
|
89
101
|
# now that you've set up your credentials, try again
|
90
102
|
TryAgain = Class.new(StandardError)
|
91
103
|
# the credentials you've entered are bad
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require_relative "../github"
|
2
|
+
require "yaml"
|
3
|
+
require "octokit"
|
4
|
+
|
5
|
+
module Octopolo
|
6
|
+
module GitHub
|
7
|
+
class Label
|
8
|
+
extend ConfigWrapper
|
9
|
+
|
10
|
+
attr_accessor :name
|
11
|
+
attr_accessor :color
|
12
|
+
|
13
|
+
def initialize(name, color)
|
14
|
+
self.name = name
|
15
|
+
self.color = color
|
16
|
+
end
|
17
|
+
|
18
|
+
def == (obj)
|
19
|
+
(self.name == obj.name) ? true : false
|
20
|
+
end
|
21
|
+
|
22
|
+
# Public: Grabs all labels from either file or github
|
23
|
+
# This is the method to override for labels from files
|
24
|
+
def self.all_labels
|
25
|
+
from_github
|
26
|
+
end
|
27
|
+
|
28
|
+
# Public: Gets the names of labels
|
29
|
+
#
|
30
|
+
# label_array - an array of labels
|
31
|
+
#
|
32
|
+
# returns - an array of all names from label_array
|
33
|
+
def self.get_names(label_array)
|
34
|
+
label_array.map{ |label| label.name }
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: Checks to see if label exists on remote, if not makes one.
|
38
|
+
#
|
39
|
+
# label - a label object
|
40
|
+
def self.first_or_create(label)
|
41
|
+
unless all_labels.include?(label)
|
42
|
+
GitHub.add_label(config.github_repo, label.name, label.color)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Public: Adds labels to a pull-request
|
47
|
+
#
|
48
|
+
# labels - an array of labels
|
49
|
+
# pull_number - number of the pull_request to add label to
|
50
|
+
def self.add_to_pull(pull_number, *labels)
|
51
|
+
built_labels = build_label_array(labels)
|
52
|
+
GitHub.add_labels_to_pull(config.github_repo, pull_number, get_names(built_labels) )
|
53
|
+
end
|
54
|
+
|
55
|
+
# Private: takes in a hash, out puts a label
|
56
|
+
#
|
57
|
+
# label_hash - a hashed label
|
58
|
+
#
|
59
|
+
# returns - a label
|
60
|
+
def self.to_label(label_hash)
|
61
|
+
Label.new(label_hash[:name], label_hash[:color])
|
62
|
+
end
|
63
|
+
private_class_method :to_label
|
64
|
+
|
65
|
+
# Private: Gets all the labels from given repository on github
|
66
|
+
#
|
67
|
+
# returns - an array of labels
|
68
|
+
def self.from_github
|
69
|
+
GitHub.labels(config.github_repo).map{ |label_hash| to_label(label_hash) }
|
70
|
+
end
|
71
|
+
private_class_method :from_github
|
72
|
+
|
73
|
+
# Private: Finds or creates each of the passed in labels
|
74
|
+
#
|
75
|
+
# labels - label objects, can be a single label, an array of labels,
|
76
|
+
# or a list of labels
|
77
|
+
#
|
78
|
+
# returns - an array of labels.
|
79
|
+
def self.build_label_array(*labels)
|
80
|
+
Array(labels).flatten.each {|label| first_or_create(label)}
|
81
|
+
end
|
82
|
+
private_class_method :build_label_array
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative "../scripts"
|
2
2
|
require_relative "../pull_request_merger"
|
3
|
+
require_relative "../github/label"
|
3
4
|
|
4
5
|
module Octopolo
|
5
6
|
module Scripts
|
@@ -13,6 +14,10 @@ module Octopolo
|
|
13
14
|
new(pull_request_id).execute
|
14
15
|
end
|
15
16
|
|
17
|
+
def self.deployable_label
|
18
|
+
Octopolo::GitHub::Label.new("deployable", "428BCA")
|
19
|
+
end
|
20
|
+
|
16
21
|
def initialize(pull_request_id=nil)
|
17
22
|
@pull_request_id = pull_request_id
|
18
23
|
end
|
@@ -21,7 +26,9 @@ module Octopolo
|
|
21
26
|
def execute
|
22
27
|
self.pull_request_id ||= cli.prompt("Pull Request ID: ")
|
23
28
|
PullRequestMerger.perform Git::DEPLOYABLE_PREFIX, Integer(@pull_request_id), :user_notifications => config.user_notifications
|
29
|
+
Octopolo::GitHub::Label.add_to_pull(Integer(@pull_request_id), Deployable.deployable_label) if config.deployable_label
|
24
30
|
end
|
31
|
+
|
25
32
|
end
|
26
33
|
end
|
27
34
|
end
|
data/lib/octopolo/version.rb
CHANGED
data/octopolo.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.add_dependency 'pivotal-tracker', '~> 0.5'
|
25
25
|
gem.add_dependency 'jiralicious'
|
26
26
|
|
27
|
-
gem.add_development_dependency 'rspec', '~> 2.
|
27
|
+
gem.add_development_dependency 'rspec', '~> 2.99.0'
|
28
28
|
gem.add_development_dependency "guard"
|
29
29
|
gem.add_development_dependency "guard-rspec"
|
30
30
|
gem.add_development_dependency 'octopolo-plugin-example'
|
@@ -62,6 +62,16 @@ module Octopolo
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
context "#deployable_label" do
|
66
|
+
it "is true by default" do
|
67
|
+
expect(Config.new.deployable_label).to eq(true)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "is can be configured as well" do
|
71
|
+
expect(Config.new(deployable_label: false).deployable_label).to eq(false)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
65
75
|
context "#github_repo" do
|
66
76
|
it "raises an exception if not given" do
|
67
77
|
expect { Config.new.github_repo }.to raise_error(Config::MissingRequiredAttribute)
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require_relative "../../../lib/octopolo/github/label"
|
3
|
+
|
4
|
+
module Octopolo
|
5
|
+
module GitHub
|
6
|
+
describe Label do
|
7
|
+
|
8
|
+
let(:label_hash_1) { {name: "low-risk", url: "github.com", color: "343434"} }
|
9
|
+
let(:label_hash_2) { {name: "high-risk", url: "github.com", color: "565656"} }
|
10
|
+
let(:labels_hash) { [label_hash_1,label_hash_2] }
|
11
|
+
let(:label1) { Label.new("low-risk", "343434") }
|
12
|
+
let(:label2) { Label.new("high-risk", '565656') }
|
13
|
+
let(:config) { stub(:config, github_repo: "foo") }
|
14
|
+
|
15
|
+
subject { Label }
|
16
|
+
|
17
|
+
before do
|
18
|
+
subject.config = config
|
19
|
+
end
|
20
|
+
|
21
|
+
context "#all_labels" do
|
22
|
+
it "gets and returns all labels belonging to a repository" do
|
23
|
+
allow(GitHub).to receive(:labels).and_return(labels_hash)
|
24
|
+
expect(Label.all_labels).to eq([label1,label2])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "#first_or_create" do
|
29
|
+
it "finds the existing label and doesn't do anything" do
|
30
|
+
allow(Label).to receive(:all_labels).and_return([label1,label2])
|
31
|
+
expect(GitHub).not_to receive(:add_label)
|
32
|
+
Label.first_or_create(label1)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "doesn't find a label and creates one" do
|
36
|
+
allow(Label).to receive(:all_labels).and_return([label1,label2])
|
37
|
+
expect(GitHub).to receive(:add_label).with(config.github_repo, "medium-risk", "454545")
|
38
|
+
Label.first_or_create(Label.new("medium-risk","454545"))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "#to_label" do
|
43
|
+
it "returns a label object" do
|
44
|
+
expect(Label).to receive(:new)
|
45
|
+
Label.send(:to_label, label_hash_1)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "#==" do
|
50
|
+
it "returns true if names are same ignoring color" do
|
51
|
+
expect(label1 == Label.new("low-risk","121212")).to eq(true)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "returns true if names are same ignoring color" do
|
55
|
+
expect(label1 == label2).to eq(false)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context "#add_to_pull" do
|
60
|
+
let (:pull_number) {007}
|
61
|
+
it "sends the correct arguments to add_labels_to_pull for multiple labels" do
|
62
|
+
allow(Label).to receive(:first_or_create)
|
63
|
+
expect(GitHub).to receive(:add_labels_to_pull).with(config.github_repo, pull_number, ["low-risk","high-risk"])
|
64
|
+
Label.add_to_pull(pull_number,[label1, label2])
|
65
|
+
end
|
66
|
+
|
67
|
+
it "sends the correct arguments to add_labels_to_pull for a single label" do
|
68
|
+
allow(Label).to receive(:first_or_create)
|
69
|
+
expect(GitHub).to receive(:add_labels_to_pull).with(config.github_repo, pull_number, ["low-risk"])
|
70
|
+
Label.add_to_pull(pull_number,label1)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#build_labels" do
|
75
|
+
it "returns an array of label when given a label" do
|
76
|
+
allow(Label).to receive(:first_or_create)
|
77
|
+
expect(Label.send(:build_label_array,label1)).to eq([label1])
|
78
|
+
end
|
79
|
+
|
80
|
+
it "returns an array of labels when given a list of labels" do
|
81
|
+
allow(Label).to receive(:first_or_create)
|
82
|
+
expect(Label.send(:build_label_array,label1,label2)).to eq([label1,label2])
|
83
|
+
end
|
84
|
+
|
85
|
+
it "returns an array of labels when given an array of length 1" do
|
86
|
+
allow(Label).to receive(:first_or_create)
|
87
|
+
expect(Label.send(:build_label_array,[label1])).to eq([label1])
|
88
|
+
end
|
89
|
+
|
90
|
+
it "returns an array of labels when given an array of length 1" do
|
91
|
+
allow(Label).to receive(:first_or_create)
|
92
|
+
expect(Label.send(:build_label_array,[label1,label2])).to eq([label1,label2])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "#get_names" do
|
97
|
+
it "returns a list of names when given an array of labels" do
|
98
|
+
expect(Label.get_names([label1,label2])).to eq(["low-risk","high-risk"])
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -5,7 +5,7 @@ module Octopolo
|
|
5
5
|
module Scripts
|
6
6
|
describe Deployable do
|
7
7
|
let(:cli) { stub(:Cli) }
|
8
|
-
let(:config) { stub(:user_notifications => ['NickLaMuro']) }
|
8
|
+
let(:config) { stub(:user_notifications => ['NickLaMuro'], :github_repo => 'foo', :deployable_label => true) }
|
9
9
|
before { Deployable.any_instance.stub(:cli => cli, :config => config) }
|
10
10
|
|
11
11
|
context "#execute" do
|
@@ -13,6 +13,7 @@ module Octopolo
|
|
13
13
|
subject { Deployable.new 42 }
|
14
14
|
|
15
15
|
it "delegates the work to PullRequestMerger" do
|
16
|
+
allow(Octopolo::GitHub::Label).to receive(:add_to_pull)
|
16
17
|
PullRequestMerger.should_receive(:perform).with(Git::DEPLOYABLE_PREFIX, 42, :user_notifications => ["NickLaMuro"])
|
17
18
|
subject.execute
|
18
19
|
end
|
@@ -29,6 +30,7 @@ module Octopolo
|
|
29
30
|
end
|
30
31
|
|
31
32
|
it "delegates the work to PullRequestMerger" do
|
33
|
+
allow(Octopolo::GitHub::Label).to receive(:add_to_pull)
|
32
34
|
PullRequestMerger.should_receive(:perform).with(Git::DEPLOYABLE_PREFIX, 42, :user_notifications => ["NickLaMuro"])
|
33
35
|
subject.execute
|
34
36
|
end
|
@@ -46,6 +48,27 @@ module Octopolo
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
51
|
+
|
52
|
+
context "with various values for deployable_label" do
|
53
|
+
let(:deployable_label) {Octopolo::GitHub::Label.new("deployable", "428BCA")}
|
54
|
+
subject { Deployable.new 42 }
|
55
|
+
before do
|
56
|
+
allow(PullRequestMerger).to receive(:perform)
|
57
|
+
end
|
58
|
+
|
59
|
+
it "calls add_to_pull when deployable_label is true" do
|
60
|
+
expect(Octopolo::GitHub::Label).to receive(:add_to_pull).with(42,deployable_label)
|
61
|
+
subject.execute
|
62
|
+
end
|
63
|
+
|
64
|
+
context "deployable_label is set to false " do
|
65
|
+
let(:config) { stub(:user_notifications => ['NickLaMuro'], :github_repo => 'foo', :deployable_label => false) }
|
66
|
+
it "skips add_to_pull when deployable_label is false" do
|
67
|
+
expect(Octopolo::GitHub::Label).to_not receive(:add_to_pull).with(42,deployable_label)
|
68
|
+
subject.execute
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
49
72
|
end
|
50
73
|
end
|
51
74
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,6 +8,7 @@ require_relative "../lib/octopolo"
|
|
8
8
|
Octopolo.instance_variable_set(:@config, Octopolo::Config.new({:deploy_branch => "master"}))
|
9
9
|
|
10
10
|
RSpec.configure do |config|
|
11
|
+
config.deprecation_stream = 'log/deprecations.log'
|
11
12
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
13
|
config.run_all_when_everything_filtered = true
|
13
14
|
config.filter_run :focus
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octopolo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Byrne
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-07-
|
12
|
+
date: 2014-07-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -115,14 +115,14 @@ dependencies:
|
|
115
115
|
requirements:
|
116
116
|
- - ~>
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: 2.
|
118
|
+
version: 2.99.0
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ~>
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: 2.
|
125
|
+
version: 2.99.0
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: guard
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -179,6 +179,7 @@ files:
|
|
179
179
|
- .ruby-gemset
|
180
180
|
- .ruby-version
|
181
181
|
- .travis.yml
|
182
|
+
- CHANGELOG.markdown
|
182
183
|
- Gemfile
|
183
184
|
- Guardfile
|
184
185
|
- MIT-LICENSE
|
@@ -211,6 +212,7 @@ files:
|
|
211
212
|
- lib/octopolo/git.rb
|
212
213
|
- lib/octopolo/github.rb
|
213
214
|
- lib/octopolo/github/commit.rb
|
215
|
+
- lib/octopolo/github/label.rb
|
214
216
|
- lib/octopolo/github/pull_request.rb
|
215
217
|
- lib/octopolo/github/pull_request_creator.rb
|
216
218
|
- lib/octopolo/github/user.rb
|
@@ -248,6 +250,7 @@ files:
|
|
248
250
|
- spec/octopolo/dated_branch_creator_spec.rb
|
249
251
|
- spec/octopolo/git_spec.rb
|
250
252
|
- spec/octopolo/github/commit_spec.rb
|
253
|
+
- spec/octopolo/github/label_spec.rb
|
251
254
|
- spec/octopolo/github/pull_request_creator_spec.rb
|
252
255
|
- spec/octopolo/github/pull_request_spec.rb
|
253
256
|
- spec/octopolo/github/user_spec.rb
|
@@ -312,6 +315,7 @@ test_files:
|
|
312
315
|
- spec/octopolo/dated_branch_creator_spec.rb
|
313
316
|
- spec/octopolo/git_spec.rb
|
314
317
|
- spec/octopolo/github/commit_spec.rb
|
318
|
+
- spec/octopolo/github/label_spec.rb
|
315
319
|
- spec/octopolo/github/pull_request_creator_spec.rb
|
316
320
|
- spec/octopolo/github/pull_request_spec.rb
|
317
321
|
- spec/octopolo/github/user_spec.rb
|