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 130 131 132 133 134 135 136 137
|
namespace :bundler do
require 'bundler/gem_tasks'
end
task :test do
sh 'rspec', '--color'
end
pkg = Gem::Specification.load('chake.gemspec')
task 'bundler:build' => :manifest
task 'build:tarball' => 'bundler:build' do
chdir 'pkg' do
sh 'gem2tgz', "#{pkg.name}-#{pkg.version}.gem"
end
end
desc 'Create Debian source package'
task 'build:debsrc' => ['bundler:clobber', 'build:tarball'] do
dirname = "#{pkg.name}-#{pkg.version}"
v = `git describe`.strip.tr('-', '.').sub(/^v/, '')
chdir 'pkg' do
sh 'gem2deb', '--no-wnpp-check', '-s', '-p', pkg.name, "#{dirname}.tar.gz"
sh "rename s/#{pkg.version}/#{v}/ *.orig.tar.gz"
chdir dirname do
ln 'man/Rakefile', 'debian/dh_ruby.rake'
sh "dch --preserve -v #{v}-1 'Development snapshot'"
sh "sed -i -e 's/#{pkg.version}/#{v}/' lib/chake/version.rb"
sh 'dpkg-buildpackage', '--diff-ignore=version.rb', '-S', '-us', '-uc'
end
end
end
desc 'Builds and installs Debian package'
task 'deb:install' => 'build:debsrc' do
chdir "pkg/#{pkg.name}-#{pkg.version}" do
sh 'dpkg-buildpackage --diff-ignore=version.rb -us -uc'
sh 'sudo apt-get install -qy --reinstall $(debc --list-debs)'
end
end
desc 'Create source RPM package'
task 'build:rpmsrc' => ['build:tarball', 'pkg/chake.spec'] do
chdir 'pkg' do
sh 'rpmbuild --define "_topdir .rpmbuild" --define "_sourcedir $(pwd)" --define "_srcrpmdir $(pwd)" -bs chake.spec --nodeps'
end
end
file 'pkg/chake.spec' => ['chake.spec.erb', 'lib/chake/version.rb'] do |t|
require 'erb'
pkg = Gem::Specification.load('chake.gemspec')
template = ERB.new(File.read('chake.spec.erb'))
File.open(t.name, 'w') do |f|
f.puts(template.result(binding))
end
puts "Generated #{t.name}"
end
task 'build:all' => ['build:debsrc', 'build:rpmsrc']
desc 'lists changes since last release'
task :changelog do
last_tag = `git tag | sort -V`.split.last
sh 'git', 'shortlog', "#{last_tag}.."
end
task :check_tag do
last_tag = `git tag | sort -V`.split.last
if last_tag == "v#{pkg.version}"
raise "Version #{pkg.version} was already released!"
end
end
desc 'checks if the latest release is properly documented in ChangeLog.md'
task :check_changelog do
sh 'grep', "^#\\s*#{pkg.version}", 'ChangeLog.md'
rescue StandardError
puts "Version #{pkg.version} not documented in ChangeLog.md!"
raise
end
desc 'Updates manifest file'
task :manifest do
manifest = File.read('.manifest')
git = `git ls-files`
if manifest != git
File.write('.manifest', git)
sh 'git commit .manifest -m "Update manifest"'
end
end
desc 'Starts a new release'
task :new_release do
last_tag = `git tag | sort -V`.split.last
last_version = last_tag.sub(/^v/, '')
v = last_tag.sub(/^v/, '').split('.').map(&:to_i)
v[-1] += 1
suggested_version = v.join('.')
printf "Next version [#{suggested_version}]: "
version = $stdin.gets.strip
if version == ''
version = suggested_version
end
mv 'ChangeLog.md', 'ChangeLog.orig'
sh "(echo '# #{version}' && echo) > ChangeLog.md"
sh "git log --oneline --no-merges --reverse --format='- %s' #{last_tag}.. >> ChangeLog.md"
sh '(echo && cat ChangeLog.orig) >> ChangeLog.md && rm -f ChangeLog.orig'
sh "sed -i -e 's/#{last_version}/#{version}/' lib/chake/version.rb"
sh 'git diff'
printf 'Confirm [y/N]? '
if $stdin.gets.strip.downcase != 'y'
next
end
sh "git commit -a -m 'New release'"
sh 'rake release'
end
desc 'Makes a release'
task release: [:check_tag, :check_changelog, :default, 'bundler:release']
desc 'Check coding style'
task :style do
sh 'rubocop'
end
desc 'Check spelling in the source code'
task :codespell do
sh 'codespell', '--skip=.git', '--skip=coverage', '--skip=*.asc', '--skip=*.swp', '--skip=tags', '--skip=*.1', '--skip=pkg', '--skip=man'
end
task default: [:test, :style, :codespell]
task clean: 'bundler:clobber'
load './man/Rakefile'
|