-
Notifications
You must be signed in to change notification settings - Fork 409
/
Rakefile
79 lines (61 loc) · 2.35 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# frozen_string_literal: true
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
windows = RUBY_PLATFORM =~ /mswin|mingw/
require 'bundler/gem_tasks'
desc 'run specs'
task(:spec) { ruby "-S rspec spec#{' -c' unless windows}" }
desc 'generate gemspec, update readme'
task update: :completion do
require 'travis/version'
content = File.read('travis.gemspec')
# fetch data
fields = {
authors: sort_by_commits_alpha(`git shortlog -sn`.b, /[^\d\s].*/).uniq,
email: sort_by_commits_alpha(`git shortlog -sne`.b, /[^<]+@[^>]+/).uniq,
files: `git ls-files`.b.split("\n").reject { |f| f =~ /^(\.|Gemfile)/ }
}
# :(
fields[:email].delete('[email protected]')
# insert data
fields.each do |field, values|
updated = " s.#{field} = ["
updated << values.map { |v| "\n %p" % v }.join(',')
updated << "\n ]"
content.sub!(/ s\.#{field} = \[\n( .*\n)* \]/, updated)
end
# set version
content.sub!(/(s\.version.*=\s+).*/, "\\1\"#{Travis::VERSION}\"")
# escape unicode
content.gsub!(/./) { |c| c.bytesize > 1 ? "\\u{#{c.codepoints.first.to_s(16)}}" : c }
File.open('travis.gemspec', 'w') { |f| f << content }
readme = File.read('README.md').b
readme.gsub!(/^(\s+\$ travis version\n\s+).*$/, "\\1#{Travis::VERSION}")
readme.gsub!(/(gem install travis -v )\S+/, "\\1#{Travis::VERSION}")
readme.gsub!(/^\*\*#{Regexp.escape(Travis::VERSION)}\*\* \(not yet released?\)\n/i,
"**#{Travis::VERSION}** (#{Time.now.strftime('%B %-d, %Y')})\n")
Travis::CLI.commands.each do |c|
readme.sub!(/^( \* \[`#{c.command_name}`\]\(##{c.command_name}\)).*$/, "\\1 - #{c.description}")
end
File.write('README.md', readme)
end
task :completion do
require 'travis/tools/completion'
Travis::Tools::Completion.compile
end
task 'travis.gemspec' => :update
task 'README.md' => :update
task gemspec: :update
task default: :spec
task default: :gemspec unless windows || (RUBY_VERSION < '2.0')
task test: :spec
def sort_by_commits_alpha(shortlog_output, patt)
shortlog_output.split("\n").sort do |a, b|
a_comm, a_name = a.strip.split(/\t/)
b_comm, b_name = b.strip.split(/\t/)
if a_comm.to_i != b_comm.to_i
a_comm.to_i <=> b_comm.to_i
else
b_name <=> a_name # we will reserve this sort afterwards, so we need the opposite order here
end
end.join("\n").scan(patt).reverse
end