forked from engineyard/engineyard
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
129 lines (105 loc) · 3.59 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new do |t|
t.rspec_opts = %w[--color]
t.pattern = 'spec/**/*_spec.rb'
end
task :coverage => [:coverage_env, :spec]
task :coverage_env do
ENV['COVERAGE'] = '1'
end
task :test => :spec
task :default => :spec
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
require 'rdoc/task'
require File.expand_path("../lib/engineyard", __FILE__)
Rake::RDocTask.new do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = "engineyard #{EY::VERSION}"
rdoc.rdoc_files.include('README*')
rdoc.rdoc_files.include('lib/**/*.rb')
end
def bump
require 'engineyard'
version_file = "module EY\n VERSION = '_VERSION_GOES_HERE_'\nend\n"
new_version = if EY::VERSION =~ /\.pre$/
EY::VERSION.gsub(/\.pre$/, '')
else
digits = EY::VERSION.scan(/(\d+)/).map { |x| x.first.to_i }
digits[-1] += 1
digits.join('.') + ".pre"
end
puts "New version is #{new_version}"
File.open('lib/engineyard/version.rb', 'w') do |f|
f.write version_file.gsub(/_VERSION_GOES_HERE_/, new_version)
end
new_version
end
def release_changelog(version)
clog = Pathname.new('ChangeLog.md')
new_clog = clog.read.sub(/^## NEXT$/, <<-SUB.chomp)
## NEXT
*
## v#{version} (#{Date.today})
SUB
clog.open('w') { |f| f.puts new_clog }
end
def bump_serverside_adapter
specs = Gem::SpecFetcher.fetcher.fetch(Gem::Dependency.new("engineyard-serverside-adapter"))
versions = specs.map {|spec,| spec.version}.sort
latest_adapter_version = versions.last.to_s
File.open('engineyard.gemspec', 'r') do |read_gemfile|
File.unlink('engineyard.gemspec')
File.open('engineyard.gemspec', 'w') do |write_gemfile|
read_gemfile.each_line do |line|
if line =~ /s.add_dependency\('engineyard-serverside-adapter',/
write_gemfile.write(" s.add_dependency(\'engineyard-serverside-adapter\', \'=#{latest_adapter_version}\') # This line maintained by rake; edits may be stomped on\n")
else
write_gemfile.write(line)
end
end
end
end
end
desc "Bump serverside adapter"
task "bump:serverside" do
bump_serverside_adapter
end
desc "Bump version of this gem"
task :bump do
ver = bump
puts "New version is #{ver}"
end
def run_commands(*cmds)
cmds.flatten.each do |c|
system(c) or raise "Command #{c.inspect} failed to execute; aborting!"
end
end
desc "Release gem"
task :release do
# Make sure we work with the latest version of serverside(-adapter)
bump_serverside_adapter
run_commands(
"bundle install",
"rake spec") # can't invoke directly; new gems won't get picked up
new_version = bump
release_changelog(new_version)
run_commands(
"git add Gemfile ChangeLog.md lib/engineyard/version.rb engineyard.gemspec",
"git commit -m 'Bump versions for release #{new_version}'",
"gem build engineyard.gemspec")
if system("gem spec engineyard-#{new_version}.gem | grep Syck")
raise "Syck found in gemspec! Aborting!\nYou will need to revert the last commit yourself and build from a ruby without this Syck problem: 1.8 or a properly Psych linked 1.9."
end
load 'lib/engineyard/version.rb'
bump
run_commands(
"git add lib/engineyard/version.rb",
"git commit -m 'Add .pre for next release'",
"git tag v#{new_version} HEAD^")
puts <<-PUSHGEM
## To publish the gem: #########################################################
gem push engineyard-#{new_version}.gem
git push origin master v#{new_version}
## No public changes yet. ######################################################
PUSHGEM
end