redmine_stagecoach 0.6.10 → 0.6.12
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/Gemfile +1 -1
- data/Gemfile.lock +4 -9
- data/VERSION +1 -1
- data/bin/stagecoach +24 -18
- data/lib/githooks/commit-msg +1 -1
- data/lib/stagecoach/config.rb +33 -8
- data/lib/stagecoach/git.rb +6 -6
- data/lib/stagecoach/redmine.rb +22 -14
- data/redmine_stagecoach.gemspec +6 -6
- metadata +8 -8
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,3 @@
|
|
1
|
-
GIT
|
2
|
-
remote: git://github.com/stephencelis/ghi.git
|
3
|
-
revision: 1eef298c50744b54d06925d70c5bc26225f51d3d
|
4
|
-
specs:
|
5
|
-
ghi (0.9.0.20120501)
|
6
|
-
|
7
1
|
GEM
|
8
2
|
remote: http://rubygems.org/
|
9
3
|
specs:
|
@@ -23,14 +17,15 @@ GEM
|
|
23
17
|
net-sftp (>= 2.0.0)
|
24
18
|
net-ssh (>= 2.0.14)
|
25
19
|
net-ssh-gateway (>= 1.1.0)
|
20
|
+
ghi (0.9.0.dev1)
|
26
21
|
git (1.2.5)
|
27
|
-
highline (1.6.
|
22
|
+
highline (1.6.12)
|
28
23
|
i18n (0.6.0)
|
29
24
|
jeweler (1.6.4)
|
30
25
|
bundler (~> 1.0)
|
31
26
|
git (>= 1.2.5)
|
32
27
|
rake
|
33
|
-
multi_json (1.3.
|
28
|
+
multi_json (1.3.5)
|
34
29
|
net-scp (1.0.4)
|
35
30
|
net-ssh (>= 1.99.1)
|
36
31
|
net-sftp (2.0.5)
|
@@ -53,7 +48,7 @@ DEPENDENCIES
|
|
53
48
|
activeresource
|
54
49
|
bundler (~> 1.0.0)
|
55
50
|
capistrano
|
56
|
-
ghi
|
51
|
+
ghi (~> 0.9.0.dev1)
|
57
52
|
jeweler (~> 1.6.4)
|
58
53
|
shoulda
|
59
54
|
trollop
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.12
|
data/bin/stagecoach
CHANGED
@@ -4,7 +4,8 @@ require File.dirname(__FILE__) + '/../lib/stagecoach.rb'
|
|
4
4
|
|
5
5
|
module Stagecoach
|
6
6
|
VERSION = File.open(File.dirname(__FILE__) + '/../VERSION').read
|
7
|
-
CONFIG_FILE = `pwd`.chomp + '/.stagecoach
|
7
|
+
CONFIG_FILE = `pwd`.chomp + '/.stagecoach'
|
8
|
+
OLD_CONFIG_FILE = `pwd`.chomp + '/.stagecoach~'
|
8
9
|
|
9
10
|
# Command line options courtesy of the Trollop gem.
|
10
11
|
opts = CommandLine.trollop
|
@@ -101,7 +102,7 @@ module Stagecoach
|
|
101
102
|
exit
|
102
103
|
end
|
103
104
|
|
104
|
-
if redmine_issue.status.id !=
|
105
|
+
if redmine_issue.status.id != 1
|
105
106
|
puts "Warning!".red
|
106
107
|
puts "This issue is in status '#{redmine_issue.status.name}'"
|
107
108
|
begin
|
@@ -119,6 +120,7 @@ module Stagecoach
|
|
119
120
|
|
120
121
|
# Set the redmine issue status to 'In Bearbeitung'
|
121
122
|
redmine_issue.status_id = 2
|
123
|
+
redmine_issue.assigned_to_id = config["redmine_user_id"]
|
122
124
|
redmine_issue.save
|
123
125
|
end
|
124
126
|
|
@@ -198,17 +200,11 @@ module Stagecoach
|
|
198
200
|
# Create a Git issue.
|
199
201
|
github_issue = Git.new_issue(redmine_issue.subject, body)
|
200
202
|
github_issue_id = github_issue[/\d+/]
|
203
|
+
Git.assign_issue_to_me(github_issue_id)
|
201
204
|
|
202
205
|
# Save it so we can reference it in commits using the magic of git hooks!
|
203
206
|
config[Git.current_branch] = {:github_issue => github_issue_id, :redmine_issue => redmine_issue_number}
|
204
207
|
|
205
|
-
|
206
|
-
print "Would you like to edit the issue on Github? [Y]es or anything else to continue: "
|
207
|
-
|
208
|
-
if STDIN.gets.chomp == 'Y'
|
209
|
-
Git.view_issue(github_issue_id)
|
210
|
-
else
|
211
|
-
end
|
212
208
|
end
|
213
209
|
|
214
210
|
# Github issues are easier.
|
@@ -236,7 +232,7 @@ module Stagecoach
|
|
236
232
|
unless Git.branch_has_commits?(branch)
|
237
233
|
puts "You don't have any uncommitted changes on branch #{branch}."
|
238
234
|
puts "If you have already pushed your changes, run:"
|
239
|
-
puts "stagecoach -d [deploy_branch]
|
235
|
+
puts "stagecoach -d [deploy_branch]"
|
240
236
|
puts "Otherwise, go make some commits!"
|
241
237
|
puts "#%s for help" % "stagecoach -h".green
|
242
238
|
puts "Exiting..."
|
@@ -263,8 +259,6 @@ module Stagecoach
|
|
263
259
|
end
|
264
260
|
end
|
265
261
|
|
266
|
-
# TODO this needs removing if we implement the 'deploy to staging' stuff
|
267
|
-
# Stop anybody deploying master to staging...
|
268
262
|
case branch
|
269
263
|
when 'master', 'Master', 'staging', 'Staging'
|
270
264
|
puts "You can't use stagecoach to deploy your #{branch} branch.\nExiting..."
|
@@ -276,7 +270,7 @@ module Stagecoach
|
|
276
270
|
|
277
271
|
puts "Push successful."
|
278
272
|
unless opts[:deploy_given]
|
279
|
-
"stagecoach -d [branch_name] to deploy
|
273
|
+
"stagecoach -d [branch_name] to deploy."
|
280
274
|
"exiting..."
|
281
275
|
exit
|
282
276
|
end
|
@@ -299,11 +293,23 @@ module Stagecoach
|
|
299
293
|
# Redmine issue to feedback status
|
300
294
|
if redmine_issue_number = config[from_branch][:redmine_issue]
|
301
295
|
CommandLine.line_break
|
302
|
-
puts "
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
296
|
+
puts "Would you like to change your Redmine ticket status to [F]eedback or [E]rledigt? Leave blank to do nothing: "
|
297
|
+
case STDIN.gets.chomp
|
298
|
+
when 'F', 'f'
|
299
|
+
puts "Attempting to change Redmine ticket status to 'Feedback' for you..."
|
300
|
+
issue = Redmine.issue(redmine_issue_number)
|
301
|
+
issue.status_id = 4
|
302
|
+
issue.save
|
303
|
+
puts "Status set to 'Feedback'"
|
304
|
+
when 'E', 'e'
|
305
|
+
puts "Attempting to change Redmine ticket status to 'Erledigt' for you..."
|
306
|
+
issue = Redmine.issue(redmine_issue_number)
|
307
|
+
issue.status_id = 5
|
308
|
+
issue.save
|
309
|
+
puts "Status set to 'Erledigt'"
|
310
|
+
else
|
311
|
+
end
|
312
|
+
puts 'Completed deploy.'
|
307
313
|
end
|
308
314
|
end
|
309
315
|
end
|
data/lib/githooks/commit-msg
CHANGED
@@ -30,7 +30,7 @@ end
|
|
30
30
|
if gem_available?('redmine_stagecoach') == false
|
31
31
|
exit
|
32
32
|
else
|
33
|
-
config = YAML::load(File.open(File.dirname(__FILE__) + '/../../.stagecoach
|
33
|
+
config = YAML::load(File.open(File.dirname(__FILE__) + '/../../.stagecoach', 'r'))
|
34
34
|
end
|
35
35
|
|
36
36
|
# Find out what branch we are on
|
data/lib/stagecoach/config.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
require 'psych'
|
2
3
|
require 'yaml'
|
3
4
|
require 'fileutils'
|
@@ -6,7 +7,14 @@ module Stagecoach
|
|
6
7
|
class Config
|
7
8
|
class << self
|
8
9
|
def new
|
9
|
-
File.open(CONFIG_FILE, 'w') { |f| f.write("---\nredmine_site:
|
10
|
+
File.open(CONFIG_FILE, 'w') { |f| f.write("---\nredmine_site: \nredmine_api_key: \nredmine_user_id:")}
|
11
|
+
end
|
12
|
+
|
13
|
+
def check_if_outdated
|
14
|
+
if File.exist?(OLD_CONFIG_FILE) && !File.exist?(CONFIG_FILE)
|
15
|
+
FileUtils.move(OLD_CONFIG_FILE, CONFIG_FILE)
|
16
|
+
puts "Stagecoach config is now at #{CONFIG_FILE}"
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
20
|
def open
|
@@ -44,7 +52,8 @@ module Stagecoach
|
|
44
52
|
# Create a config file if necessary
|
45
53
|
case STDIN.gets.chomp
|
46
54
|
when 'C'
|
47
|
-
|
55
|
+
Config.check_if_outdated
|
56
|
+
Config.new unless File.exist?(CONFIG_FILE)
|
48
57
|
when 'Q'
|
49
58
|
puts "Exiting..."
|
50
59
|
exit
|
@@ -120,23 +129,39 @@ module Stagecoach
|
|
120
129
|
# TODO Some verification of the input at this stage, for example test the
|
121
130
|
# connection and have the user re-enter the details if necessary
|
122
131
|
# http://api.rubyonrails.org/classes/ActiveResource/Connection.html#method-i-head
|
123
|
-
|
132
|
+
config = Config.yaml_to_hash
|
133
|
+
unless config["redmine_site"] && config["redmine_api_key"] && config["redmine_user_id"]
|
124
134
|
CommandLine.line_break
|
125
135
|
print "Enter your redmine/planio repository, eg. https://digitaleseiten.plan.io: "
|
126
|
-
|
136
|
+
redmine_site = STDIN.gets.chomp
|
127
137
|
print "Enter your API key for that repo: "
|
128
138
|
redmine_api_key = STDIN.gets.chomp
|
129
139
|
|
130
|
-
|
140
|
+
RedmineApi::Client.instance_eval do
|
141
|
+
self.site = config["redmine_site"] || redmine_site
|
142
|
+
self.user = config["redmine_api_key"] || redmine_api_key
|
143
|
+
end
|
144
|
+
|
145
|
+
all_users = Redmine.users
|
146
|
+
|
147
|
+
puts "ID | User Name"
|
148
|
+
all_users.each {|u| puts printf("%-5d",u.attributes["id"]).to_s + " | " + u.attributes["firstname"] + " " + u.attributes["lastname"]} rescue puts "This one"
|
149
|
+
|
150
|
+
puts "Which id is yours?"
|
151
|
+
user_id = STDIN.gets.chomp
|
152
|
+
Config.save({"redmine_site" => redmine_site, "redmine_api_key" => redmine_api_key, "redmine_user_id" => user_id.to_i })
|
131
153
|
|
132
154
|
CommandLine.line_break
|
133
155
|
puts "Settings saved OK:"
|
134
|
-
puts "Repository: " +
|
135
|
-
puts "API Key: " + redmine_api_key
|
156
|
+
puts "Repository: " + redmine_site if redmine_site
|
157
|
+
puts "API Key: " + redmine_api_key if redmine_api_key
|
158
|
+
puts "User ID: " + user_id if user_id
|
136
159
|
CommandLine.line_break
|
137
160
|
puts "Exiting..."
|
138
|
-
exit
|
139
161
|
end
|
162
|
+
|
163
|
+
exit
|
164
|
+
|
140
165
|
end
|
141
166
|
end
|
142
167
|
end
|
data/lib/stagecoach/git.rb
CHANGED
@@ -97,7 +97,11 @@ module Stagecoach
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def new_issue(title, description)
|
100
|
-
`ghi -
|
100
|
+
`ghi open -m "#{title}\n#{description}"`
|
101
|
+
end
|
102
|
+
|
103
|
+
def assign_issue_to_me(issue_number)
|
104
|
+
`ghi assign #{issue_number}`
|
101
105
|
end
|
102
106
|
|
103
107
|
def branch_has_commits?(branch)
|
@@ -109,12 +113,8 @@ module Stagecoach
|
|
109
113
|
end
|
110
114
|
end
|
111
115
|
|
112
|
-
def view_issue(github_issue)
|
113
|
-
`ghi -u#{github_issue}`
|
114
|
-
end
|
115
|
-
|
116
116
|
def issue(id)
|
117
|
-
`ghi
|
117
|
+
`ghi list #{id}`
|
118
118
|
end
|
119
119
|
end
|
120
120
|
end
|
data/lib/stagecoach/redmine.rb
CHANGED
@@ -4,29 +4,37 @@ require 'active_resource'
|
|
4
4
|
module RedmineApi
|
5
5
|
class Client < ActiveResource::Base; end
|
6
6
|
class Issue < RedmineApi::Client; end
|
7
|
+
class Users < RedmineApi::Client; end
|
7
8
|
end
|
8
9
|
|
9
10
|
module Stagecoach
|
10
11
|
class Redmine
|
11
|
-
|
12
|
-
return RedmineApi::Issue.find(issue_number)
|
13
|
-
end
|
12
|
+
class << self
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def users
|
15
|
+
RedmineApi::Users.find(:all, :params => {:nometa => 1})
|
16
|
+
end
|
17
|
+
|
18
|
+
def issue(issue_number)
|
19
|
+
return RedmineApi::Issue.find(issue_number)
|
20
|
+
end
|
21
|
+
|
22
|
+
def issue_url(issue)
|
23
|
+
# originally this was:
|
24
|
+
#
|
25
|
+
# RedmineApi::Client.site + "/issues/" + issue.id
|
26
|
+
#
|
27
|
+
# but this caused URI merge errors on some setups.
|
28
|
+
"#{RedmineApi::Client.site}/issues/#{issue.id}"
|
29
|
+
end
|
23
30
|
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
# Open the issue in a browser.
|
32
|
+
def view_issue(issue)
|
33
|
+
issue_url = Redmine.issue_url(issue)
|
27
34
|
print "Open issue in browser? [Y]es or anything else to exit: "
|
28
35
|
`open #{issue_url.to_s}` if gets.chomp == "Y"
|
29
36
|
puts "Staging completed! Exiting..."
|
37
|
+
end
|
30
38
|
end
|
31
39
|
end
|
32
40
|
end
|
data/redmine_stagecoach.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "redmine_stagecoach"
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.12"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Oli Barnett"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-18"
|
13
13
|
s.description = "Git/capistrano workflow automation script with Redmine & Github issue integration"
|
14
14
|
s.email = "o.barnett@digitaleseiten.de"
|
15
15
|
s.executables = ["stagecoach"]
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
42
42
|
s.homepage = "http://github.com/omnikron/stagecoach"
|
43
43
|
s.licenses = ["MIT"]
|
44
44
|
s.require_paths = ["lib"]
|
45
|
-
s.rubygems_version = "1.8.
|
45
|
+
s.rubygems_version = "1.8.24"
|
46
46
|
s.summary = "Stagecoach is in ur Redmine, automating ur Git workflow."
|
47
47
|
|
48
48
|
if s.respond_to? :specification_version then
|
@@ -50,7 +50,7 @@ Gem::Specification.new do |s|
|
|
50
50
|
|
51
51
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
52
52
|
s.add_runtime_dependency(%q<activeresource>, [">= 0"])
|
53
|
-
s.add_runtime_dependency(%q<ghi>, ["
|
53
|
+
s.add_runtime_dependency(%q<ghi>, ["~> 0.9.0.dev1"])
|
54
54
|
s.add_runtime_dependency(%q<trollop>, [">= 0"])
|
55
55
|
s.add_runtime_dependency(%q<capistrano>, [">= 0"])
|
56
56
|
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
@@ -58,7 +58,7 @@ Gem::Specification.new do |s|
|
|
58
58
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
59
59
|
else
|
60
60
|
s.add_dependency(%q<activeresource>, [">= 0"])
|
61
|
-
s.add_dependency(%q<ghi>, ["
|
61
|
+
s.add_dependency(%q<ghi>, ["~> 0.9.0.dev1"])
|
62
62
|
s.add_dependency(%q<trollop>, [">= 0"])
|
63
63
|
s.add_dependency(%q<capistrano>, [">= 0"])
|
64
64
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
@@ -67,7 +67,7 @@ Gem::Specification.new do |s|
|
|
67
67
|
end
|
68
68
|
else
|
69
69
|
s.add_dependency(%q<activeresource>, [">= 0"])
|
70
|
-
s.add_dependency(%q<ghi>, ["
|
70
|
+
s.add_dependency(%q<ghi>, ["~> 0.9.0.dev1"])
|
71
71
|
s.add_dependency(%q<trollop>, [">= 0"])
|
72
72
|
s.add_dependency(%q<capistrano>, [">= 0"])
|
73
73
|
s.add_dependency(%q<shoulda>, [">= 0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_stagecoach
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.12
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activeresource
|
@@ -32,17 +32,17 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 0.9.0.dev1
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 0.9.0.dev1
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: trollop
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -168,7 +168,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
segments:
|
170
170
|
- 0
|
171
|
-
hash:
|
171
|
+
hash: -1007617363068209098
|
172
172
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
173
173
|
none: false
|
174
174
|
requirements:
|
@@ -177,7 +177,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
177
|
version: '0'
|
178
178
|
requirements: []
|
179
179
|
rubyforge_project:
|
180
|
-
rubygems_version: 1.8.
|
180
|
+
rubygems_version: 1.8.24
|
181
181
|
signing_key:
|
182
182
|
specification_version: 3
|
183
183
|
summary: Stagecoach is in ur Redmine, automating ur Git workflow.
|