Skip to content

Commit ccf2e8e

Browse files
committed
Added a Rake task for updating the version and compiling the CHANGELOG
1 parent bce6c42 commit ccf2e8e

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed

Rakefile

+114
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,117 @@ task :release do
126126
puts '-'*80
127127
end
128128
end
129+
130+
desc <<-DESC
131+
Update Rubygems versions in version.rb and *.gemspec files
132+
133+
Example:
134+
135+
$ rake update_version[5.0.0,5.0.1]
136+
DESC
137+
task :update_version, :old, :new do |task, args|
138+
require 'ansi'
139+
140+
puts "[!!!] Required argument [old] missing".ansi(:red) unless args[:old]
141+
puts "[!!!] Required argument [new] missing".ansi(:red) unless args[:new]
142+
143+
files = Dir['**/**/version.rb','**/**/*.gemspec']
144+
145+
longest_line = files.map { |f| f.size }.max
146+
147+
puts "\n", "= FILES ".ansi(:faint) + ('='*92).ansi(:faint), "\n"
148+
149+
files.each do |file|
150+
begin
151+
File.open(file, 'r+') do |f|
152+
content = f.read
153+
if content.match Regexp.new(args[:old])
154+
content.gsub! Regexp.new(args[:old]), args[:new]
155+
puts "+ [#{file}]".ansi(:green).ljust(longest_line+20) + " [#{args[:old]}] -> [#{args[:new]}]".ansi(:green,:bold)
156+
f.rewind
157+
f.write content
158+
else
159+
puts "- [#{file}]".ansi(:yellow).ljust(longest_line+20) + " -".ansi(:faint,:strike)
160+
end
161+
end
162+
rescue Exception => e
163+
puts "[!!!] #{e.class} : #{e.message}".ansi(:red,:bold)
164+
raise e
165+
end
166+
end
167+
168+
puts "\n\n", "= CHANGELOG ".ansi(:faint) + ('='*88).ansi(:faint), "\n"
169+
170+
log = `git --no-pager log --reverse --no-color --pretty='* %s' HEAD --not v#{args[:old]} elasticsearch-*`.split("\n")
171+
172+
puts log.join("\n")
173+
174+
log_entries = {}
175+
log_entries[:common] = log.reject { |l| l =~ /^* \[/ }
176+
log_entries[:model] = log.select { |l| l =~ /^* \[MODEL\]/ }
177+
log_entries[:store] = log.select { |l| l =~ /^* \[STORE\]/ }
178+
log_entries[:rails] = log.select { |l| l =~ /^* \[RAILS\]/ }
179+
180+
changelog = File.read(File.open('CHANGELOG.md', 'r'))
181+
182+
changelog_update = ''
183+
184+
changelog_update << "## #{args[:new]}\n\n"
185+
186+
unless log_entries[:common].empty?
187+
changelog_update << log_entries[:common]
188+
.map { |l| "#{l}" }
189+
.join("\n")
190+
changelog_update << "\n\n"
191+
end
192+
193+
unless log_entries[:model].empty?
194+
changelog_update << "### ActiveModel\n\n"
195+
changelog_update << log_entries[:model]
196+
.map { |l| l.gsub /\[.+\] /, '' }
197+
.map { |l| "#{l}" }
198+
.join("\n")
199+
changelog_update << "\n\n"
200+
end
201+
202+
unless log_entries[:store].empty?
203+
changelog_update << "### Persistence\n\n"
204+
changelog_update << log_entries[:store]
205+
.map { |l| l.gsub /\[.+\] /, '' }
206+
.map { |l| "#{l}" }
207+
.join("\n")
208+
changelog_update << "\n\n"
209+
end
210+
211+
unless log_entries[:rails].empty?
212+
changelog_update << "### Ruby on Rails\n\n"
213+
changelog_update << log_entries[:rails]
214+
.map { |l| l.gsub /\[.+\] /, '' }
215+
.map { |l| "#{l}" }
216+
.join("\n")
217+
changelog_update << "\n\n"
218+
end
219+
220+
unless changelog =~ /^## #{args[:new]}/
221+
File.open('CHANGELOG.md', 'w+') { |f| f.write changelog_update and f.write changelog }
222+
end
223+
224+
puts "\n\n", "= DIFF ".ansi(:faint) + ('='*93).ansi(:faint)
225+
226+
diff = `git --no-pager diff --patch --word-diff=color --minimal elasticsearch-*`.split("\n")
227+
228+
puts diff
229+
.reject { |l| l =~ /^\e\[1mdiff \-\-git/ }
230+
.reject { |l| l =~ /^\e\[1mindex [a-z0-9]{7}/ }
231+
.reject { |l| l =~ /^\e\[1m\-\-\- i/ }
232+
.reject { |l| l =~ /^\e\[36m@@/ }
233+
.map { |l| l =~ /^\e\[1m\+\+\+ w/ ? "\n#{l} " + '-'*(104-l.size) : l }
234+
.join("\n")
235+
236+
puts "\n\n", "= COMMIT ".ansi(:faint) + ('='*91).ansi(:faint), "\n"
237+
238+
puts "git add CHANGELOG.md elasticsearch-*",
239+
"git commit --verbose --message='Release #{args[:new]}' --edit",
240+
"rake release"
241+
"\n"
242+
end

0 commit comments

Comments
 (0)