File: Rakefile

package info (click to toggle)
chake 0.93.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 412 kB
  • sloc: ruby: 1,276; sh: 112; makefile: 5; sed: 3
file content (137 lines) | stat: -rw-r--r-- 3,910 bytes parent folder | download
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'