prima-twig 0.2.27 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -79,7 +79,7 @@ class OpenPR
79
79
  exit 0
80
80
  end
81
81
 
82
- pr = create_pull_request(choose_base_branch)
82
+ pr = create_pull_request('master')
83
83
  puts "Pull Request ##{ pr.number } creata".green
84
84
  cmd = %{ twig pr "#{ pr.number }"}
85
85
  exec(cmd)
@@ -89,16 +89,6 @@ class OpenPR
89
89
  exit 0
90
90
  end
91
91
 
92
- def choose_base_branch
93
- choose do |menu|
94
- menu.prompt = 'Su quale branch vuoi effettuare la PR? '.cyan
95
- menu.shell = true
96
-
97
- menu.choice('dev') {'dev'}
98
- menu.choice('master') {'master'}
99
- end
100
- end
101
-
102
92
  def is_on_github?
103
93
  begin
104
94
  @prima.gh.branch @prima.repo_name, @prima.current_branch_name
@@ -4,6 +4,7 @@ require 'rubygems'
4
4
  require_relative '../lib/prima_twig.rb'
5
5
  require 'colorize'
6
6
  require 'highline/import'
7
+ require 'pp'
7
8
 
8
9
  def help_content
9
10
  <<-HELP
@@ -45,14 +46,24 @@ class PickIssue
45
46
  end
46
47
 
47
48
  issues = @prima.list_issues
48
- issues.delete_if do |issue|
49
- issue.pull_request?
49
+
50
+ issue_number = nil
51
+ if args[0] && args[0].to_i > 0
52
+ issues.keep_if do |issue|
53
+ issue.number == args[0].to_i
54
+ end
55
+ stop_if issue.empty? "Issue #{args[0].to_i} non trovata!"
56
+ issue_number = args[0].to_i
57
+ else
58
+ issues.delete_if do |issue|
59
+ issue.pull_request?
60
+ end
61
+ issue_number = choose_issue issues
50
62
  end
51
63
 
52
- issue_number = choose_issue issues
53
- issue_type = select_issue_type issue_number
54
- base_branch_name_default = issue_type == 'hotfix' ? 'master' : 'dev'
55
- branch_name = ask('Inserisci il nome del branch (puoi omettere feature/ o hotfix/): '.cyan)
64
+ issue_type = 'feature'
65
+ base_branch_name_default = 'master'
66
+ branch_name = ask('Inserisci il nome del branch (puoi omettere feature/): '.cyan)
56
67
  if branch_name.length == 0
57
68
  puts 'Devi inserire il nome del branch'.red
58
69
  exit 1
@@ -75,6 +86,10 @@ class PickIssue
75
86
  end
76
87
 
77
88
  def choose_issue(issues)
89
+
90
+ pp issues
91
+ exit
92
+
78
93
  choose do |menu|
79
94
  menu.prompt = 'Pick an issue: '.cyan
80
95
  menu.shell = true
@@ -89,29 +104,6 @@ class PickIssue
89
104
  end
90
105
  end
91
106
  end
92
-
93
- def select_issue_type(issue_number)
94
- has_hotfix_label = @prima.issue_has_label?(issue_number, Prima::LABEL_HOTFIX)
95
-
96
- if has_hotfix_label
97
- continue_hotfix = @prima.yesno 'La issue ha la label hotfix, sei sicuro di procedere come hotfix?'.cyan # ask('La issue ha la label hotfix, sei sicuro di procedere come hotfix? (y/n)'.cyan) { |q| q.default = 'y' }
98
- issue_type = continue_hotfix ? 'hotfix' : 'feature'
99
- else
100
- issue_type = choose do |menu|
101
- menu.prompt = 'Seleziona se la issue dev\'essere trattata come feature oppure hotfix'.cyan
102
- menu.shell = true
103
-
104
- menu.choice('feature') {'feature'}
105
- menu.choice('hotfix') {'hotfix'}
106
- end
107
-
108
- if issue_type == 'hotfix'
109
- puts "Aggiungo la label #{Prima::LABEL_HOTFIX} alla issue".green
110
- @prima.update_issue_with_label issue_number, Prima::LABEL_HOTFIX
111
- end
112
- end
113
- issue_type
114
- end
115
107
  end
116
108
 
117
109
  PickIssue.new.execute!
@@ -16,9 +16,16 @@ class Prima
16
16
  attr_reader :gh, :twig, :config, :rugged, :aws
17
17
 
18
18
  def initialize
19
- @twig = Twig.new(:read_options => true)
19
+ @twig = Twig.new(:read_options => true, :max_days_old => 30)
20
20
  unless has_config?
21
- generate_config
21
+ if File.exist?('../prima/twig.yml')
22
+ `cp ../prima/twig.yml .`
23
+ else
24
+ generate_config
25
+ end
26
+ if File.exist?('./projects/prima')
27
+ `git submodule init && git submodule update`
28
+ end
22
29
  end
23
30
  unless has_latest_config?
24
31
  update_config
@@ -119,7 +126,7 @@ class Prima
119
126
  def clean_branch_name(branch_name)
120
127
  branch_name.gsub! /[^a-zA-Z0-9\-_]/, '_'
121
128
  branch_name.gsub! /_+/, '_'
122
- branch_name
129
+ branch_name.downcase
123
130
  end
124
131
 
125
132
  # proxy di tutti i metodi a rugged
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prima-twig
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.27
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Giachino
@@ -11,132 +11,132 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-02-03 00:00:00.000000000 Z
14
+ date: 2016-03-03 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: twig
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - "~>"
20
+ - - ~>
21
21
  - !ruby/object:Gem::Version
22
22
  version: '1.7'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.7'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: octokit
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - "~>"
34
+ - - ~>
35
35
  - !ruby/object:Gem::Version
36
36
  version: '3.0'
37
37
  type: :runtime
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - "~>"
41
+ - - ~>
42
42
  - !ruby/object:Gem::Version
43
43
  version: '3.0'
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: colorize
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - "~>"
48
+ - - ~>
49
49
  - !ruby/object:Gem::Version
50
50
  version: '0.7'
51
51
  type: :runtime
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - "~>"
55
+ - - ~>
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0.7'
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: highline
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - "~>"
62
+ - - ~>
63
63
  - !ruby/object:Gem::Version
64
64
  version: '1.6'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - "~>"
69
+ - - ~>
70
70
  - !ruby/object:Gem::Version
71
71
  version: '1.6'
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: launchy
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - "~>"
76
+ - - ~>
77
77
  - !ruby/object:Gem::Version
78
78
  version: '2.0'
79
79
  type: :runtime
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - "~>"
83
+ - - ~>
84
84
  - !ruby/object:Gem::Version
85
85
  version: '2.0'
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rugged
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - "~>"
90
+ - - ~>
91
91
  - !ruby/object:Gem::Version
92
92
  version: '0.22'
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - "~>"
97
+ - - ~>
98
98
  - !ruby/object:Gem::Version
99
99
  version: '0.22'
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: redcarpet
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - "~>"
104
+ - - ~>
105
105
  - !ruby/object:Gem::Version
106
106
  version: '3.3'
107
107
  type: :runtime
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - "~>"
111
+ - - ~>
112
112
  - !ruby/object:Gem::Version
113
113
  version: '3.3'
114
114
  - !ruby/object:Gem::Dependency
115
115
  name: mail
116
116
  requirement: !ruby/object:Gem::Requirement
117
117
  requirements:
118
- - - "~>"
118
+ - - ~>
119
119
  - !ruby/object:Gem::Version
120
120
  version: '2.6'
121
121
  type: :runtime
122
122
  prerelease: false
123
123
  version_requirements: !ruby/object:Gem::Requirement
124
124
  requirements:
125
- - - "~>"
125
+ - - ~>
126
126
  - !ruby/object:Gem::Version
127
127
  version: '2.6'
128
128
  - !ruby/object:Gem::Dependency
129
129
  name: aws-sdk
130
130
  requirement: !ruby/object:Gem::Requirement
131
131
  requirements:
132
- - - "~>"
132
+ - - ~>
133
133
  - !ruby/object:Gem::Version
134
134
  version: '2'
135
135
  type: :runtime
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
138
138
  requirements:
139
- - - "~>"
139
+ - - ~>
140
140
  - !ruby/object:Gem::Version
141
141
  version: '2'
142
142
  description: Our tools to manage git and github
@@ -149,7 +149,6 @@ executables:
149
149
  - twig-hotfix
150
150
  - twig-deploy
151
151
  - twig-feature
152
- - twig-release
153
152
  extensions: []
154
153
  extra_rdoc_files: []
155
154
  files:
@@ -160,7 +159,6 @@ files:
160
159
  - bin/twig-hotfix
161
160
  - bin/twig-deploy
162
161
  - bin/twig-feature
163
- - bin/twig-release
164
162
  - lib/command.rb
165
163
  - lib/prima_twig.rb
166
164
  homepage: http://rubygems.org/gems/prima-twig
@@ -173,12 +171,12 @@ require_paths:
173
171
  - lib
174
172
  required_ruby_version: !ruby/object:Gem::Requirement
175
173
  requirements:
176
- - - ">="
174
+ - - '>='
177
175
  - !ruby/object:Gem::Version
178
176
  version: '0'
179
177
  required_rubygems_version: !ruby/object:Gem::Requirement
180
178
  requirements:
181
- - - ">="
179
+ - - '>='
182
180
  - !ruby/object:Gem::Version
183
181
  version: '0'
184
182
  requirements: []
@@ -1,227 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'rubygems'
4
- require 'redcarpet'
5
- require 'mail'
6
- require_relative '../lib/prima_twig.rb'
7
-
8
- class Release
9
- include Command
10
-
11
- def initialize
12
- @prima = Prima.new
13
- end
14
-
15
- def execute! args
16
- possible_args = ["start", "finish"]
17
- stop_if args.empty?, [:wrong_args, possible_args]
18
- stop_if args.length > 1, [:wrong_args, possible_args]
19
-
20
- stop_if @prima.head_detached?, :detached_head
21
- stop_unless @prima.is_clean?, :clean
22
-
23
- case args[0]
24
- when "start"
25
- start_release!
26
- when "finish"
27
- finish_release!
28
- else
29
- stop_if true, [:wrong_args, possible_args]
30
- end
31
- end
32
-
33
- def start_release!
34
-
35
- release_name = @prima.clean_branch_name(ask('Inserisci il nome della release (senza prefisso release/): '.cyan))
36
-
37
- branch_name = "release/#{release_name}/#{Time.now.strftime('%Y%m%d')}"
38
-
39
- output "Il nome del branch sarà #{branch_name.yellow}"
40
-
41
- exec_step "git checkout dev"
42
- exec_step "git pull origin dev"
43
- exec_step "git checkout -b #{branch_name}"
44
- exec_step "git push -u origin #{branch_name}"
45
-
46
- pr = @prima.create_pull_request('master', branch_name, branch_name, '')
47
- @prima.twig.set_branch_property(branch_name, 'pr', pr.number)
48
- @prima.twig.set_branch_property(branch_name, 'diff-branch', 'dev')
49
-
50
- commits = get_commits(pr.number)
51
- issues = get_issues(pr.number)
52
-
53
- issues.each do |issue|
54
- @prima.delete_label_from_issue(issue.number, Prima::LABEL_NEXT_RELEASE)
55
- @prima.update_issue_with_label(issue.number, Prima::LABEL_IN_STAGING)
56
- end
57
-
58
- pr_body = build_pr_body(issues, commits)
59
- @prima.update_pr pr.number, {:body => pr_body}
60
-
61
- mail = Mail.new do
62
- from 'deploy@prima.it'
63
- to 'deploy@prima.it'
64
- subject "#{`git config user.name`} ha iniziato la creazione della release #{branch_name}"
65
- end
66
-
67
- htmlBody = build_pr_body(issues, commits, 'html')
68
-
69
- html_part = Mail::Part.new do
70
- content_type 'text/html; charset=UTF-8'
71
- body htmlBody
72
- end
73
- text_part = Mail::Part.new do
74
- body htmlBody.gsub(/<br\s?\/?>/, "\r\n").gsub(/<\/?[^>]*>/, '')
75
- end
76
-
77
- mail.html_part = html_part
78
- mail.text_part = text_part
79
-
80
- opts = {address: 'smtp.mandrillapp.com', port: '587'}
81
- opts[:user_name] = 'deploy@prima.it'
82
- opts[:password] = @prima.config['mandrill']
83
-
84
- mail.delivery_method(:smtp, opts)
85
- mail.deliver
86
- end
87
-
88
- def finish_release!
89
- current_branch_name = @prima.twig.current_branch_name
90
- stop_unless (current_branch_name =~ /^release\//), "Non sei su un branch di release, non posso mergiare nulla"
91
-
92
- # Mergia la PR
93
- pr = @prima.get_pr
94
- stop_unless pr, 'Pull Request not found'
95
- @prima.merge_pull_request pr
96
-
97
- output "La Pull Request e' stata mergiata!".green
98
-
99
- # Mergia il branch su dev e pusha
100
- exec_step 'git fetch'
101
- exec_step 'git checkout dev'
102
- exec_step 'git merge origin/dev'
103
- exec_step "git merge --no-ff #{current_branch_name}"
104
-
105
- exec_step 'git push origin dev' if @prima.yesno 'Vuoi effettuare il push di dev?'.blue
106
-
107
- # Aggiorno le issue
108
- issues = get_issues(pr.number)
109
- issues.each do |issue|
110
- @prima.delete_label_from_issue(issue.number, Prima::LABEL_IN_STAGING)
111
- @prima.close_issue issue.number
112
- end
113
-
114
- # Rimuove il branch remoto
115
- exec_step "git push origin :#{current_branch_name}" if @prima.yesno "Vuoi eliminare il branch remoto #{current_branch_name}?".blue
116
-
117
- # Crea il tag e la release con la description figa
118
- exec_step 'git checkout master'
119
- exec_step 'git pull'
120
- res = @prima.rugged.tags.create(current_branch_name, @prima.rugged.head.target_id)
121
-
122
- exec_step 'git push --tags'
123
-
124
- commits = get_commits(pr.number)
125
- pr_body = build_pr_body(issues, commits)
126
-
127
- @prima.create_release(current_branch_name, {:name => current_branch_name, :body => pr_body})
128
-
129
- output 'Release creata con successo!'.green
130
- end
131
-
132
- def get_commits(pr_number)
133
- commits = []
134
-
135
- @prima.get_pr_commits(pr_number).each do |item|
136
- commits << item
137
- end
138
-
139
- commits
140
- end
141
-
142
- def get_issues(pr_number)
143
- issues = []
144
- issues_ids = []
145
-
146
- self.get_commits(pr_number).each do |item|
147
- if item.commit.message =~ /^\[*#(\d+)\]*\s-/
148
- issue_id = item.commit.message.match(/^\[*#(\d+)\]*\s-/).captures.first
149
- issues_ids << issue_id unless issues_ids.include? issue_id
150
- end
151
- end
152
-
153
- issues_ids.each do |id|
154
- issues << @prima.get_issue(id)
155
- end
156
-
157
- issues
158
- end
159
-
160
- def build_pr_body(issues, commits, output_format = 'markdown')
161
- body = ''
162
-
163
- body << "# Issues\n\n"
164
-
165
- issues.each do |issue|
166
- body << "### [##{issue.number} - #{issue.title.gsub(/\n/,' ')}](#{get_issue_url(issue.number)})\n\n"
167
- body << "#{issue.body}\n\n"
168
- end
169
-
170
- body << "# Commits\n\n"
171
-
172
- commits.each do |commit|
173
- body << "* [#{commit.commit.message.gsub(/\n/,' ')}](#{get_commit_url(commit.sha)})\n"
174
- end
175
-
176
- if output_format == 'html'
177
- markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML.new)
178
- body = markdown.render body
179
- end
180
-
181
- body
182
-
183
- end
184
-
185
- def get_commit_url(sha)
186
- "https://github.com/#{@prima.repo_name}/commit/#{sha}"
187
- end
188
-
189
- def get_issue_url(number)
190
- "https://github.com/#{@prima.repo_name}/issues/#{number}"
191
- end
192
- end
193
-
194
- def help_content
195
- <<-HELP
196
-
197
- twig-release
198
- ===========
199
-
200
- Manage release creation
201
-
202
- Synopsis
203
- --------
204
-
205
- twig release start
206
- twig release finish
207
-
208
- Description
209
- -----------
210
-
211
- start creates an release from dev branch
212
- finish finishes the actual release by merging to dev and master
213
-
214
- Subcommand for Twig: <http://rondevera.github.io/twig/>
215
- Author: Andrea Usuelli <https://github.com/andreausu>
216
-
217
- HELP
218
- end
219
-
220
- args = ARGV.dup
221
-
222
- if args.include?('--help')
223
- puts help_content
224
- exit
225
- end
226
-
227
- Release.new.execute!(args)