|
1 | 1 | require "bundler/gem_tasks" |
2 | 2 | require "rake/testtask" |
3 | 3 |
|
4 | | -helper = Bundler::GemHelper.instance |
5 | | - |
6 | 4 | Rake::TestTask.new(:test) do |t| |
7 | 5 | t.test_files = FileList["test/**/test_*.rb"] |
8 | 6 | end |
9 | 7 |
|
10 | 8 | task :default => :test |
11 | 9 |
|
12 | | -task "build" => "date_epoch" |
13 | | -task "build" => "changelogs" |
14 | | - |
15 | | -task "date_epoch" do |
16 | | - ENV["SOURCE_DATE_EPOCH"] = IO.popen(%W[git -C #{__dir__} log -1 --format=%ct], &:read).chomp |
17 | | -end |
18 | | - |
19 | | -def helper.update_gemspec |
20 | | - path = "#{__dir__}/#{gemspec.name}.gemspec" |
21 | | - File.open(path, "r+b") do |f| |
22 | | - if (d = f.read).sub!(/^(version\s*=\s*)".*"/) {$1 + gemspec.version.to_s.dump} |
23 | | - f.rewind |
24 | | - f.truncate(0) |
25 | | - f.print(d) |
26 | | - end |
27 | | - end |
28 | | -end |
29 | | - |
30 | | -def helper.commit_bump |
31 | | - sh(%W[git -C #{__dir__} commit -m bump\ up\ to\ #{gemspec.version} |
32 | | - #{gemspec.name}.gemspec]) |
33 | | -end |
34 | | - |
35 | | -def helper.version=(v) |
36 | | - gemspec.version = v |
37 | | - update_gemspec |
38 | | - commit_bump |
39 | | -end |
40 | | -major, minor, teeny = helper.gemspec.version.segments |
41 | | - |
42 | | -task "bump:teeny" do |
43 | | - helper.version = Gem::Version.new("#{major}.#{minor}.#{teeny+1}") |
44 | | -end |
45 | | - |
46 | 10 | task "bump:minor" do |
47 | 11 | raise "can't bump up minor" |
48 | 12 | end |
49 | 13 |
|
50 | 14 | task "bump:major" do |
51 | 15 | raise "can't bump up major" |
52 | 16 | end |
53 | | - |
54 | | -task "bump" => "bump:teeny" |
55 | | - |
56 | | -task "tag" do |
57 | | - helper.__send__(:tag_version) |
58 | | -end |
59 | | - |
60 | | -def changelog(output, ver = nil, prev = nil) |
61 | | - ver &&= Gem::Version.new(ver) |
62 | | - range = [[prev], [ver, "HEAD"]].map {|ver, branch| ver ? "v#{ver.to_s}" : branch}.compact.join("..") |
63 | | - IO.popen(%W[git log --format=fuller --topo-order --no-merges #{range}]) do |log| |
64 | | - line = log.gets |
65 | | - FileUtils.mkpath(File.dirname(output)) |
66 | | - File.open(output, "wb") do |f| |
67 | | - f.print "-*- coding: utf-8 -*-\n\n", line |
68 | | - log.each_line do |line| |
69 | | - line.sub!(/^(?!:)(?:Author|Commit)?(?:Date)?: /, ' \&') |
70 | | - line.sub!(/ +$/, '') |
71 | | - f.print(line) |
72 | | - end |
73 | | - end |
74 | | - end |
75 | | -end |
76 | | - |
77 | | -tags = IO.popen(%w[git tag -l v0.*]).grep(/v(.*)/) {$1} |
78 | | -tags.sort_by! {|tag| tag.scan(/\d+/).map(&:to_i)} |
79 | | -tags.inject(nil) do |prev, tag| |
80 | | - task("logs/ChangeLog-#{tag}") {|t| changelog(t.name, tag, prev)} |
81 | | - tag |
82 | | -end |
83 | | - |
84 | | -desc "Make ChangeLog" |
85 | | -task "ChangeLog", [:ver, :prev] do |t, ver: nil, prev: tags.last| |
86 | | - changelog(t.name, ver, prev) |
87 | | -end |
88 | | -changelogs = ["ChangeLog", *tags.map {|tag| "logs/ChangeLog-#{tag}"}] |
89 | | -task "changelogs" => changelogs |
90 | | -CLOBBER.concat(changelogs) << "logs" |
0 commit comments