socialcast-git-extensions 2.0.8 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/git-integrate +0 -6
- data/bin/git-promote +0 -5
- data/bin/git-release +0 -6
- data/bin/git-release-staging +0 -31
- data/bin/git-reset-prototype +0 -4
- data/bin/git-reset-staging +0 -6
- data/bin/git-start +9 -13
- data/lib/socialcast-git-extensions.rb +1 -104
- data/lib/socialcast-git-extensions/version.rb +1 -1
- data/socialcast-git-extensions.gemspec +0 -1
- metadata +10 -24
data/bin/git-integrate
CHANGED
@@ -10,14 +10,8 @@ include Socialcast
|
|
10
10
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
11
11
|
|
12
12
|
branch = current_branch
|
13
|
-
tickets = tickets_from_arguments_or_branch(ARGV, branch)
|
14
13
|
|
15
14
|
run_cmd 'git update'
|
16
15
|
integrate(branch, 'prototype')
|
17
16
|
|
18
|
-
if tickets.any?
|
19
|
-
update_tickets tickets, :branch => branch, :in_prototype => true
|
20
|
-
start_tickets tickets
|
21
|
-
end
|
22
|
-
|
23
17
|
run_cmd "socialcast share '#worklog integrating #{branch} into prototype #scgitx'" unless is_quiet
|
data/bin/git-promote
CHANGED
@@ -6,15 +6,10 @@ include Socialcast
|
|
6
6
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
7
7
|
|
8
8
|
branch = current_branch
|
9
|
-
tickets = tickets_from_arguments_or_branch(ARGV, branch)
|
10
9
|
|
11
10
|
run_cmd 'git update'
|
12
11
|
integrate(branch, 'staging')
|
13
12
|
|
14
|
-
if tickets.any?
|
15
|
-
update_tickets tickets, :branch => branch, :in_prototype => true, :in_staging => true
|
16
|
-
resolve_tickets tickets
|
17
|
-
end
|
18
13
|
|
19
14
|
integrate('staging', 'prototype')
|
20
15
|
run_cmd "git checkout #{branch}"
|
data/bin/git-release
CHANGED
@@ -7,18 +7,12 @@ branch = current_branch
|
|
7
7
|
abort("Cannot release reserved branch") if %w{master staging prototype}.include?(branch)
|
8
8
|
|
9
9
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
10
|
-
tickets = tickets_from_arguments_or_branch(ARGV, branch)
|
11
10
|
|
12
11
|
exit unless HighLine.agree("<%= color('Release #{branch} to production? (y/n)', :green) %>")
|
13
12
|
|
14
13
|
run_cmd 'git update'
|
15
14
|
integrate branch, 'master'
|
16
15
|
|
17
|
-
if tickets.any?
|
18
|
-
update_tickets tickets, :branch => branch
|
19
|
-
release_tickets tickets
|
20
|
-
end
|
21
|
-
|
22
16
|
integrate branch, 'staging'
|
23
17
|
integrate 'staging', 'prototype'
|
24
18
|
run_cmd "git checkout master"
|
data/bin/git-release-staging
CHANGED
@@ -10,37 +10,6 @@ run_cmd 'git pull'
|
|
10
10
|
run_cmd 'git pull origin last_known_good_staging'
|
11
11
|
run_cmd 'git push origin HEAD'
|
12
12
|
|
13
|
-
filter_id = '10102'
|
14
|
-
issues = jira_server.getIssuesFromFilterWithLimit filter_id, 0, 1000
|
15
|
-
branches = issues.collect do |issue|
|
16
|
-
field = issue.customFieldValues.detect {|k| k.customfieldId == GIT_BRANCH_FIELD }
|
17
|
-
field ? field.values.first : nil
|
18
|
-
end.uniq.compact
|
19
|
-
|
20
|
-
issues_with_no_branch = issues.reject do |issue|
|
21
|
-
issue.customFieldValues.detect {|k| k.customfieldId == GIT_BRANCH_FIELD }
|
22
|
-
end
|
23
|
-
if issues_with_no_branch.any?
|
24
|
-
HighLine.say "\n<%= color('The following tickets do NOT have a git branch properly configured:', :red) %>"
|
25
|
-
issues_with_no_branch.each do |issue|
|
26
|
-
print_issue issue
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
branches.each do |branch|
|
31
|
-
HighLine.say "\nThe changes on branch <%= color('#{branch}', :green) %> "
|
32
|
-
if branches(:merged => true, :remote => true).include?(branch)
|
33
|
-
HighLine.say "<%= color('HAVE', :green) %> been merged into master"
|
34
|
-
releasable_tickets = tickets_from_branch(branch).select do |issue|
|
35
|
-
print_issue issue
|
36
|
-
HighLine.agree("Mark this issue as released? (y/n)")
|
37
|
-
end
|
38
|
-
release_tickets releasable_tickets
|
39
|
-
else
|
40
|
-
HighLine.say "<%= color('HAVE NOT', :red) %> been merged into master"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
13
|
run_cmd 'git prune-merged -r'
|
45
14
|
|
46
15
|
run_cmd "socialcast share '#worklog releasing staging branch to production #scgitx'" unless is_quiet
|
data/bin/git-reset-prototype
CHANGED
@@ -6,11 +6,7 @@ include Socialcast
|
|
6
6
|
reset_branch('prototype')
|
7
7
|
reset_branch('last_known_good_prototype')
|
8
8
|
|
9
|
-
filter_id = '10151'
|
10
|
-
issues = jira_server.getIssuesFromFilterWithLimit filter_id, 0, 1000
|
11
|
-
|
12
9
|
HighLine.say "\n<%= color('Updating the following tickets to no longer be in prototype:', :red) %>"
|
13
|
-
update_tickets issues, :in_prototype => false
|
14
10
|
|
15
11
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
16
12
|
run_cmd "socialcast share '#worklog resetting prototype branch #scgitx'" unless is_quiet
|
data/bin/git-reset-staging
CHANGED
@@ -6,11 +6,5 @@ include Socialcast
|
|
6
6
|
reset_branch('staging')
|
7
7
|
reset_branch('last_known_good_staging')
|
8
8
|
|
9
|
-
filter_id = '10102'
|
10
|
-
issues = jira_server.getIssuesFromFilterWithLimit filter_id, 0, 1000
|
11
|
-
|
12
|
-
HighLine.say "\n<%= color('Updating the following tickets to no longer be in staging:', :red) %>"
|
13
|
-
update_tickets issues, :in_staging => false
|
14
|
-
|
15
9
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
16
10
|
run_cmd "socialcast share '#worklog resetting staging branch #scgitx'" unless is_quiet
|
data/bin/git-start
CHANGED
@@ -6,25 +6,21 @@ require File.join(File.dirname(__FILE__), '..', 'lib', 'socialcast-git-extension
|
|
6
6
|
include Socialcast
|
7
7
|
|
8
8
|
is_quiet = ARGV.delete("--quiet") || ARGV.delete("-q")
|
9
|
-
tickets = tickets_from_arguments ARGV
|
10
9
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
10
|
+
unless branch_name = ARGV.first
|
11
|
+
example_branch = %w{ api-fix-invalid-auth desktop-cleanup-avatar-markup share-form-add-edit-link }.sort_by { rand }.first
|
12
|
+
repo = Grit::Repo.new(Dir.pwd)
|
13
|
+
remote_branches = repo.remotes.collect {|b| b.name.split('/').last }
|
14
|
+
until branch_name = HighLine.ask("What would you like to name your branch? (ex: #{example_branch})") {|q|
|
15
|
+
q.validate = Proc.new { |branch|
|
16
|
+
branch =~ /^[A-Za-z0-9\-_]+$/ && !remote_branches.include?(branch)
|
17
|
+
}
|
17
18
|
}
|
18
|
-
|
19
|
+
end
|
19
20
|
end
|
20
21
|
|
21
22
|
run_cmd 'git checkout master'
|
22
23
|
run_cmd 'git pull'
|
23
24
|
run_cmd "git checkout -b #{branch_name}"
|
24
25
|
|
25
|
-
if tickets.any?
|
26
|
-
update_tickets tickets, :branch => branch_name
|
27
|
-
start_tickets tickets
|
28
|
-
end
|
29
|
-
|
30
26
|
run_cmd "socialcast share '#worklog starting work on #{branch_name} #scgitx'" unless is_quiet
|
@@ -1,117 +1,14 @@
|
|
1
|
-
require 'jira4r'
|
2
1
|
require 'grit'
|
3
2
|
require 'active_support/all'
|
4
3
|
require 'highline/import'
|
5
4
|
|
6
5
|
module Socialcast
|
7
|
-
GIT_BRANCH_FIELD = 'customfield_10010'
|
8
|
-
IN_PROTOTYPE_FIELD = 'customfield_10033'
|
9
|
-
IN_STAGING_FIELD = 'customfield_10020'
|
10
|
-
JIRA_CREDENTIALS_FILE = File.expand_path('~/.jira_key')
|
11
6
|
|
12
7
|
def current_branch
|
13
8
|
repo = Grit::Repo.new(Dir.pwd)
|
14
9
|
Grit::Head.current(repo).name
|
15
10
|
end
|
16
|
-
|
17
|
-
@credentials ||= YAML.load_file(JIRA_CREDENTIALS_FILE).symbolize_keys!
|
18
|
-
@credentials
|
19
|
-
end
|
20
|
-
def jira_server
|
21
|
-
return @jira if @jira
|
22
|
-
if !File.exists?(JIRA_CREDENTIALS_FILE)
|
23
|
-
input = {}
|
24
|
-
input[:username] = HighLine.ask("JIRA username: ")
|
25
|
-
input[:password] = HighLine.ask("JIRA password: ") { |q| q.echo = "*" }
|
26
|
-
|
27
|
-
File.open(JIRA_CREDENTIALS_FILE, "w") do |f|
|
28
|
-
f.write input.to_yaml
|
29
|
-
end
|
30
|
-
end
|
31
|
-
File.chmod 0600, JIRA_CREDENTIALS_FILE
|
32
|
-
credentials = jira_credentials
|
33
|
-
|
34
|
-
begin
|
35
|
-
@jira = Jira4R::JiraTool.new 2, "https://issues.socialcast.com"
|
36
|
-
@jira.login credentials[:username], credentials[:password]
|
37
|
-
return @jira
|
38
|
-
rescue => e
|
39
|
-
print_error e.message
|
40
|
-
File.delete config_file
|
41
|
-
raise e
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def assert_tickets_provided(ticket_ids, branch)
|
46
|
-
tickets = tickets_from_arguments_or_branch(ticket_ids, branch)
|
47
|
-
abort("JIRA ticket id or existing JIRA Git Branch is required to run this process") unless tickets.any?
|
48
|
-
tickets
|
49
|
-
end
|
50
|
-
def tickets_from_arguments_or_branch(ticket_ids, branch)
|
51
|
-
ticket_ids.any? ? tickets_from_arguments(ticket_ids) : tickets_from_branch(branch)
|
52
|
-
end
|
53
|
-
def tickets_from_arguments(ticket_ids)
|
54
|
-
ticket_ids.collect do |key|
|
55
|
-
jira_server.getIssue key
|
56
|
-
end
|
57
|
-
end
|
58
|
-
def tickets_from_branch(branch)
|
59
|
-
jira_server.getIssuesFromJqlSearch "project = 'SCWEBAPP' and 'Git Branch' ~ '#{branch}'", 1000
|
60
|
-
end
|
61
|
-
def update_tickets(tickets, options = {})
|
62
|
-
tickets.each do |ticket|
|
63
|
-
print_issue ticket
|
64
|
-
fields = []
|
65
|
-
fields << Jira4R::V2::RemoteFieldValue.new(GIT_BRANCH_FIELD, [options[:branch]]) unless options[:branch].nil?
|
66
|
-
fields << Jira4R::V2::RemoteFieldValue.new(IN_PROTOTYPE_FIELD, [options[:in_prototype].to_s]) unless options[:in_prototype].nil?
|
67
|
-
fields << Jira4R::V2::RemoteFieldValue.new(IN_STAGING_FIELD, [options[:in_staging] ? 'true' : '']) unless options[:in_staging].nil?
|
68
|
-
begin
|
69
|
-
jira_server.updateIssue ticket.key, fields
|
70
|
-
rescue => e
|
71
|
-
print_error e.message
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
STANDARD_WORKFLOW_TYPES = []
|
76
|
-
STANDARD_WORKFLOW_TYPES << 1 #bug
|
77
|
-
STANDARD_WORKFLOW_TYPES << 2 #feature
|
78
|
-
STANDARD_WORKFLOW_TYPES << 9 #story
|
79
|
-
|
80
|
-
WORKFLOW_MAPPINGS = {
|
81
|
-
:start => {:standard => 11, :other => 21},
|
82
|
-
:resolve => {:standard => 21, :other => nil},
|
83
|
-
:release => {:standard => 101, :other => 31}
|
84
|
-
}
|
85
|
-
def start_tickets(tickets)
|
86
|
-
transition_tickets tickets, :start
|
87
|
-
end
|
88
|
-
def resolve_tickets(tickets)
|
89
|
-
start_tickets tickets
|
90
|
-
transition_tickets tickets, :resolve
|
91
|
-
end
|
92
|
-
def release_tickets(tickets)
|
93
|
-
resolve_tickets tickets
|
94
|
-
transition_tickets tickets, :release
|
95
|
-
end
|
96
|
-
def transition_tickets(tickets, action)
|
97
|
-
tickets.each do |ticket|
|
98
|
-
begin
|
99
|
-
mappings = WORKFLOW_MAPPINGS[action]
|
100
|
-
transition = STANDARD_WORKFLOW_TYPES.include?(ticket.type.to_i) ? mappings[:standard] : mappings[:other]
|
101
|
-
next unless transition
|
102
|
-
jira_server.progressWorkflowAction ticket.key, transition.to_s, []
|
103
|
-
rescue => e
|
104
|
-
print_error "Unable to transition issue #{ticket.key} to #{action}"
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
def print_issue(issue)
|
109
|
-
HighLine.say "<%= color('#{issue.key}', :green) %> - #{issue.summary}"
|
110
|
-
end
|
111
|
-
def print_error(message)
|
112
|
-
HighLine.say "<%= color('Error: ', :red) %> #{message}"
|
113
|
-
end
|
114
|
-
|
11
|
+
|
115
12
|
def run_cmd(cmd)
|
116
13
|
HighLine.say "\n> <%= color('#{cmd.gsub("'", '')}', :red) %>"
|
117
14
|
raise "#{cmd} failed" unless system cmd
|
@@ -15,7 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.rubyforge_project = "socialcast-git-extensions"
|
16
16
|
|
17
17
|
s.add_runtime_dependency(%q<grit>, [">= 0"])
|
18
|
-
s.add_runtime_dependency(%q<wireframe-jira4r>, [">= 0"])
|
19
18
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
20
19
|
s.add_runtime_dependency(%q<git_remote_branch>, [">= 0"])
|
21
20
|
s.add_runtime_dependency(%q<highline>, [">= 0"])
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: socialcast-git-extensions
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 2.0.8
|
10
|
+
version: 2.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ryan Sonnek
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-12 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: grit
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
type: :runtime
|
33
33
|
version_requirements: *id001
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
|
-
name:
|
35
|
+
name: activesupport
|
36
36
|
prerelease: false
|
37
37
|
requirement: &id002 !ruby/object:Gem::Requirement
|
38
38
|
none: false
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
49
|
+
name: git_remote_branch
|
50
50
|
prerelease: false
|
51
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
@@ -60,7 +60,7 @@ dependencies:
|
|
60
60
|
type: :runtime
|
61
61
|
version_requirements: *id003
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
63
|
+
name: highline
|
64
64
|
prerelease: false
|
65
65
|
requirement: &id004 !ruby/object:Gem::Requirement
|
66
66
|
none: false
|
@@ -73,24 +73,10 @@ dependencies:
|
|
73
73
|
version: "0"
|
74
74
|
type: :runtime
|
75
75
|
version_requirements: *id004
|
76
|
-
- !ruby/object:Gem::Dependency
|
77
|
-
name: highline
|
78
|
-
prerelease: false
|
79
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
|
-
requirements:
|
82
|
-
- - ">="
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
|
-
segments:
|
86
|
-
- 0
|
87
|
-
version: "0"
|
88
|
-
type: :runtime
|
89
|
-
version_requirements: *id005
|
90
76
|
- !ruby/object:Gem::Dependency
|
91
77
|
name: socialcast
|
92
78
|
prerelease: false
|
93
|
-
requirement: &
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
94
80
|
none: false
|
95
81
|
requirements:
|
96
82
|
- - ">="
|
@@ -102,7 +88,7 @@ dependencies:
|
|
102
88
|
- 4
|
103
89
|
version: 0.3.4
|
104
90
|
type: :runtime
|
105
|
-
version_requirements: *
|
91
|
+
version_requirements: *id005
|
106
92
|
description: GIT it done!
|
107
93
|
email:
|
108
94
|
- ryan@socialcast.com
|
@@ -176,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
162
|
requirements: []
|
177
163
|
|
178
164
|
rubyforge_project: socialcast-git-extensions
|
179
|
-
rubygems_version: 1.8.
|
165
|
+
rubygems_version: 1.8.5
|
180
166
|
signing_key:
|
181
167
|
specification_version: 3
|
182
168
|
summary: git extension scripts for socialcast workflow
|