mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
99 lines
3.3 KiB
Ruby
99 lines
3.3 KiB
Ruby
|
require "rake"
|
||
|
require "rake/tasklib"
|
||
|
|
||
|
module Fog
|
||
|
module Rake
|
||
|
class ChangelogTask < ::Rake::TaskLib
|
||
|
|
||
|
def initialize
|
||
|
desc "Update the changelog since the last release"
|
||
|
task(:changelog) do
|
||
|
timestamp = Time.now.utc.strftime('%m/%d/%Y')
|
||
|
sha = `git log | head -1`.split(' ').last
|
||
|
changelog = ["#{Fog::VERSION} #{timestamp} #{sha}"]
|
||
|
changelog << ('=' * changelog[0].length)
|
||
|
changelog << ''
|
||
|
|
||
|
require 'multi_json'
|
||
|
github_repo_data = Fog::JSON.decode(Excon.get('https://api.github.com/repos/fog/fog').body)
|
||
|
data = github_repo_data.reject {|key, value| !['forks', 'open_issues', 'watchers'].include?(key)}
|
||
|
github_collaborator_data = Fog::JSON.decode(Excon.get('https://api.github.com/repos/fog/fog/collaborators').body)
|
||
|
data['collaborators'] = github_collaborator_data.length
|
||
|
rubygems_data = Fog::JSON.decode(Excon.get('https://rubygems.org/api/v1/gems/fog.json').body)
|
||
|
data['downloads'] = rubygems_data['downloads']
|
||
|
stats = []
|
||
|
for key in data.keys.sort
|
||
|
stats << "'#{key}' => #{data[key]}"
|
||
|
end
|
||
|
changelog << "Stats! { #{stats.join(', ')} }"
|
||
|
changelog << ''
|
||
|
|
||
|
last_sha = `cat changelog.txt | head -1`.split(' ').last
|
||
|
shortlog = `git shortlog #{last_sha}..HEAD`
|
||
|
changes = {}
|
||
|
committers = {}
|
||
|
for line in shortlog.split("\n")
|
||
|
if line =~ /^\S/
|
||
|
committer = line.split(' (', 2).first
|
||
|
committers[committer] = 0
|
||
|
elsif line =~ /^\s*((Merge.*)|(Release.*))?$/
|
||
|
# skip empty lines, Merge and Release commits
|
||
|
else
|
||
|
unless line[-1..-1] == '.'
|
||
|
line << '.'
|
||
|
end
|
||
|
line.lstrip!
|
||
|
line.gsub!(/^\[([^\]]*)\] /, '')
|
||
|
tag = $1 || 'misc'
|
||
|
changes[tag] ||= []
|
||
|
changes[tag] << (line << ' thanks ' << committer)
|
||
|
committers[committer] += 1
|
||
|
end
|
||
|
end
|
||
|
|
||
|
for committer, commits in committers.to_a.sort {|x,y| y[1] <=> x[1]}
|
||
|
if [
|
||
|
'Aaron Suggs',
|
||
|
'Brian Hartsock',
|
||
|
'Christopher Oliver',
|
||
|
'Decklin Foster',
|
||
|
'Dylan Egan',
|
||
|
'geemus',
|
||
|
'Henry Addison',
|
||
|
'Kevin Menard',
|
||
|
'Lincoln Stoll',
|
||
|
'Luqman Amjad',
|
||
|
'Michael Zeng',
|
||
|
'Nick Osborn',
|
||
|
'nightshade427',
|
||
|
'Patrick Debois',
|
||
|
'Stepan G. Fedorov',
|
||
|
'Wesley Beary'
|
||
|
].include?(committer)
|
||
|
next
|
||
|
end
|
||
|
changelog << "MVP! #{committer}"
|
||
|
changelog << ''
|
||
|
break
|
||
|
end
|
||
|
|
||
|
for tag in changes.keys.sort
|
||
|
changelog << ('[' << tag << ']')
|
||
|
for commit in changes[tag]
|
||
|
changelog << (' ' << commit)
|
||
|
end
|
||
|
changelog << ''
|
||
|
end
|
||
|
|
||
|
old_changelog = File.read('changelog.txt')
|
||
|
File.open('changelog.txt', 'w') do |file|
|
||
|
file.write(changelog.join("\n"))
|
||
|
file.write("\n\n")
|
||
|
file.write(old_changelog)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|