buildrdeb 0.0.3 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +10 -7
- data/buildrdeb.gemspec +1 -1
- data/lib/buildrdeb/package.rb +22 -30
- data/rakelib/all-in-one.rake +113 -0
- data/rakelib/checks.rake +2 -2
- data/rakelib/doc.rake +20 -3
- data/rakelib/metrics.rake +39 -0
- data/rakelib/package.rake +1 -1
- data/rakelib/release.rake +9 -6
- data/rakelib/rspec.rake +28 -9
- data/rakelib/setup.rake +15 -3
- data/rakelib/stage.rake +23 -9
- data/spec/buildrdeb/package_spec.rb +37 -3
- metadata +6 -5
- data/rakelib/jekylltask.rb +0 -120
data/README.rdoc
CHANGED
@@ -6,16 +6,19 @@ See the official Buildr site: http://buildr.apache.org
|
|
6
6
|
|
7
7
|
== Install buildrdeb
|
8
8
|
|
9
|
-
*
|
10
|
-
* For the impatient:
|
11
|
-
* gem sources -a http://gems.github.com
|
12
|
-
* sudo gem install intalio-buildrdeb
|
9
|
+
* gem install buildrdeb
|
13
10
|
|
14
|
-
==
|
11
|
+
== Manual
|
15
12
|
|
16
|
-
|
13
|
+
define "foo" do
|
14
|
+
|
15
|
+
package(:deb).enhance do |deb|
|
16
|
+
deb.control = _("config/control")
|
17
|
+
deb.preinst = _("config/preinst")
|
18
|
+
deb.include(_("target/myfolder"))
|
19
|
+
end
|
17
20
|
|
18
|
-
|
21
|
+
end
|
19
22
|
|
20
23
|
== License
|
21
24
|
|
data/buildrdeb.gemspec
CHANGED
data/lib/buildrdeb/package.rb
CHANGED
@@ -26,43 +26,38 @@ module BuildrDeb
|
|
26
26
|
# With deb we recreate the structure asked by the user
|
27
27
|
# then we will call dpkg --build over it.
|
28
28
|
def create_from(file_map)
|
29
|
-
root = File.join("target", "
|
29
|
+
root = File.join("target", "#{File.basename(name)}-contents")
|
30
30
|
mkpath File.join(root, "DEBIAN")
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
31
|
+
for filename in ["control", "prerm", "postinst", "postrm", "preinst", "triggers"]
|
32
|
+
file = send(filename)
|
33
|
+
if file.nil?
|
34
|
+
raise "no control file was defined when packaging as a deb file" if filename == "control"
|
35
|
+
else
|
36
|
+
raise "Cannot find #{filename}: #{file} doesn't exist" if !File.exists? file
|
37
|
+
target = File.join(root, "DEBIAN", filename)
|
38
|
+
contents = File.read(file)
|
39
|
+
# Replace version if we are looking at control.
|
40
|
+
contents.gsub!(/^Version: .*$/, "Version: #{@version}") if (filename == "control" && !@version.nil?)
|
41
|
+
File.open(target, "w+") {|t|
|
42
|
+
t.write eval("\"#{contents}\"")
|
43
43
|
}
|
44
|
-
|
45
|
-
actualFile.close
|
46
|
-
File.chmod 0755, targetFile
|
47
|
-
#cp send(file.to_sym), File.join(root, "DEBIAN", file)
|
48
|
-
#File.chmod 0755, File.join(root, "DEBIAN", file)
|
44
|
+
File.chmod 0755, target
|
49
45
|
end
|
50
46
|
end
|
51
|
-
|
52
47
|
file_map.each do |path, content|
|
53
48
|
_path = File.join(root, path)
|
54
49
|
if content.respond_to?(:call)
|
55
50
|
raise "Not implemented"
|
56
|
-
content.call path
|
57
|
-
elsif content.nil?
|
58
|
-
|
51
|
+
#content.call path
|
52
|
+
elsif content.nil?
|
53
|
+
mkdir_p _path
|
54
|
+
elsif File.directory?(content.to_s)
|
55
|
+
|
59
56
|
else
|
60
|
-
|
57
|
+
mkdir_p File.dirname(_path) if !File.exists?(File.dirname(_path))
|
61
58
|
cp content.to_s, _path
|
62
59
|
end
|
63
60
|
end
|
64
|
-
|
65
|
-
|
66
61
|
out = %x[ dpkg --build \"#{root}\" \"#{name}\" 2>&1 ]
|
67
62
|
raise "dpkg failed with this error:\n#{out}" if $? != 0
|
68
63
|
end
|
@@ -74,13 +69,10 @@ module BuildrDeb
|
|
74
69
|
|
75
70
|
def package_as_deb(file_name)
|
76
71
|
deb = DebTask.define_task(file_name)
|
77
|
-
deb.tap do
|
78
|
-
package ||= project.id
|
79
|
-
version ||= project.version
|
80
|
-
end
|
81
72
|
deb.enhance do |task|
|
82
73
|
task.enhance do
|
83
|
-
|
74
|
+
package ||= project.id
|
75
|
+
version ||= project.version
|
84
76
|
end
|
85
77
|
end
|
86
78
|
return deb
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
desc "Create JRuby all-in-one distribution"
|
17
|
+
task "all-in-one" => 'all-in-one:all-in-one'
|
18
|
+
|
19
|
+
namespace :'all-in-one' do
|
20
|
+
|
21
|
+
version = "1.5.2"
|
22
|
+
jruby_distro = "jruby-bin-#{version}.tar.gz"
|
23
|
+
url = "http://jruby.org.s3.amazonaws.com/downloads/#{version}/#{jruby_distro}"
|
24
|
+
dir = "jruby-#{version}"
|
25
|
+
|
26
|
+
task "all-in-one" => [:gem,
|
27
|
+
# Prepare to run
|
28
|
+
:prepare,
|
29
|
+
# Download and extract JRuby
|
30
|
+
:download_and_extract,
|
31
|
+
# Cleanup JRuby distribution
|
32
|
+
:clean_dist,
|
33
|
+
# Install Buildr gem and dependencies
|
34
|
+
:install_dependencies,
|
35
|
+
# Add Buildr executables/scripts
|
36
|
+
:add_execs,
|
37
|
+
# Package distribution
|
38
|
+
:package
|
39
|
+
]
|
40
|
+
|
41
|
+
desc 'Prepare to run'
|
42
|
+
task :prepare do
|
43
|
+
mkpath '_all-in-one'
|
44
|
+
cd '_all-in-one'
|
45
|
+
end
|
46
|
+
|
47
|
+
desc 'Download and extract JRuby'
|
48
|
+
task :download_and_extract do
|
49
|
+
unless File.exist? jruby_distro
|
50
|
+
puts "Downloading JRuby from #{url} ..."
|
51
|
+
sh 'wget', url
|
52
|
+
puts "[X] Downloaded JRuby"
|
53
|
+
end
|
54
|
+
|
55
|
+
rm_rf dir if File.exist? dir
|
56
|
+
|
57
|
+
puts "Extracting JRuby to #{dir} ..."
|
58
|
+
sh 'tar', 'xzf', jruby_distro
|
59
|
+
puts "[X] Extracted JRuby"
|
60
|
+
cd dir
|
61
|
+
end
|
62
|
+
|
63
|
+
desc 'Cleanup JRuby distribution'
|
64
|
+
task :clean_dist do
|
65
|
+
puts 'Cleaning...'
|
66
|
+
rm_rf 'docs'
|
67
|
+
mkpath 'jruby-docs'
|
68
|
+
mv Dir["COPYING*"], 'jruby-docs'
|
69
|
+
mv Dir["LICENSE*"], 'jruby-docs'
|
70
|
+
mv 'README', 'jruby-docs'
|
71
|
+
rm_rf 'lib/ruby/1.9'
|
72
|
+
rm_rf 'lib/ruby/gems/1.8/doc'
|
73
|
+
rm_rf 'samples'
|
74
|
+
rm_rf 'share'
|
75
|
+
end
|
76
|
+
|
77
|
+
desc 'Install Buildr gem and dependencies'
|
78
|
+
task :install_dependencies do
|
79
|
+
puts "Install Buildr gem ..."
|
80
|
+
sh "bin/jruby", '-S', 'gem', 'install', FileList['../../pkg/*-java.gem'].first,
|
81
|
+
'--no-rdoc', '--no-ri'
|
82
|
+
puts "[X] Install Buildr gem"
|
83
|
+
end
|
84
|
+
|
85
|
+
desc 'Add Buildr executables/scripts'
|
86
|
+
task :add_execs do
|
87
|
+
cp 'bin/jruby.exe', 'bin/_buildr.exe'
|
88
|
+
cp Dir["../../all-in-one/*"], 'bin'
|
89
|
+
end
|
90
|
+
|
91
|
+
desc 'Package distribution'
|
92
|
+
task :package do
|
93
|
+
puts "Zipping distribution ..."
|
94
|
+
cd '..'
|
95
|
+
new_dir = "#{spec.name}-#{spec.version}"
|
96
|
+
mv dir, new_dir
|
97
|
+
zip = "#{new_dir}.zip"
|
98
|
+
rm zip if File.exist? zip
|
99
|
+
sh 'zip', '-q', '-r', zip, new_dir
|
100
|
+
puts "[X] Zipped distribution"
|
101
|
+
|
102
|
+
puts "Tarring distribution ..."
|
103
|
+
tar = "#{new_dir}.tar.gz"
|
104
|
+
rm tar if File.exist? tar
|
105
|
+
sh 'tar', 'czf', tar, new_dir
|
106
|
+
puts "[X] Tarred distribution"
|
107
|
+
|
108
|
+
rm_rf new_dir
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
|
113
|
+
task(:clobber) { rm_rf '_all-in-one' }
|
data/rakelib/checks.rake
CHANGED
@@ -18,7 +18,7 @@ desc "Check that source files contain the Apache license"
|
|
18
18
|
task :license=>FileList["**/*.{rb,rake,java,gemspec,buildfile}", 'Rakefile'] do |task|
|
19
19
|
puts "Checking that files contain the Apache license ... "
|
20
20
|
required = task.prerequisites.select { |fn| File.file?(fn) }
|
21
|
-
missing = required.reject { |fn|
|
21
|
+
missing = required.reject { |fn|
|
22
22
|
comments = File.read(fn).scan(/(\/\*(.*?)\*\/)|^#\s+(.*?)$|^-#\s+(.*?)$|<!--(.*?)-->/m).
|
23
23
|
map { |match| match.compact }.flatten.join("\n")
|
24
24
|
comments =~ /Licensed to the Apache Software Foundation/ && comments =~ /http:\/\/www.apache.org\/licenses\/LICENSE-2.0/
|
@@ -45,7 +45,7 @@ task :dependency do
|
|
45
45
|
dep_spec.runtime_dependencies.map { |trans| transitive[trans].push(trans) }.flatten.uniq }
|
46
46
|
# For each dependency, make sure *all* its transitive dependencies are listed
|
47
47
|
# as a Buildr dependency, and order is preserved.
|
48
|
-
spec.dependencies.each_with_index do |dep, index|
|
48
|
+
spec.dependencies.select {|dep| dep.type == :runtime }.each_with_index do |dep, index|
|
49
49
|
puts "checking #{dep.name}"
|
50
50
|
transitive[dep].each do |trans|
|
51
51
|
matching = spec.dependencies.find { |existing| trans =~ existing }
|
data/rakelib/doc.rake
CHANGED
@@ -36,7 +36,17 @@ end
|
|
36
36
|
|
37
37
|
|
38
38
|
begin
|
39
|
-
require '
|
39
|
+
require 'jekylltask'
|
40
|
+
module TocFilter
|
41
|
+
def toc(input)
|
42
|
+
input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).inject(%{<ol class="toc">}) { |toc, entry|
|
43
|
+
id = entry[1][/^id=(['"])(.*)\1$/, 2]
|
44
|
+
title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
|
45
|
+
toc << %{<li><a href="##{id}">#{title}</a></li>}
|
46
|
+
} << "</ol>"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
Liquid::Template.register_filter(TocFilter)
|
40
50
|
|
41
51
|
desc "Generate Buildr documentation in _site/"
|
42
52
|
JekyllTask.new :jekyll do |task|
|
@@ -45,9 +55,9 @@ begin
|
|
45
55
|
end
|
46
56
|
|
47
57
|
rescue LoadError
|
48
|
-
puts "Buildr uses the
|
58
|
+
puts "Buildr uses the jekyll gem to generate the Web site. You can install it by running rake doc:setup"
|
49
59
|
task 'doc:setup' do
|
50
|
-
install_gem '
|
60
|
+
install_gem 'jekyll', :version=>'0.6.2'
|
51
61
|
if `pygmentize -V`.empty?
|
52
62
|
args = %w{easy_install Pygments}
|
53
63
|
args.unshift 'sudo' unless Config::CONFIG['host_os'] =~ /windows/
|
@@ -71,6 +81,13 @@ task :site=>['_site', :rdoc, '_reports/specs.html', '_reports/coverage', 'buildr
|
|
71
81
|
cp_r '_reports/coverage', '_site'
|
72
82
|
fail 'No coverage report in site directory' unless File.exist?('_site/coverage/index.html')
|
73
83
|
cp 'CHANGELOG', '_site'
|
84
|
+
open("_site/.htaccess", "w") do |htaccess|
|
85
|
+
htaccess << %Q{
|
86
|
+
<FilesMatch "CHANGELOG">
|
87
|
+
ForceType 'text/plain; charset=UTF-8'
|
88
|
+
</FilesMatch>
|
89
|
+
}
|
90
|
+
end
|
74
91
|
cp 'buildr.pdf', '_site'
|
75
92
|
fail 'No PDF in site directory' unless File.exist?('_site/buildr.pdf')
|
76
93
|
puts 'OK'
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
namespace :metrics do
|
17
|
+
desc 'run Saikuro reports'
|
18
|
+
task :saikuro do
|
19
|
+
gem 'atoulme-Saikuro'
|
20
|
+
require 'saikuro'
|
21
|
+
output_dir = File.expand_path(File.join(File.dirname(__FILE__), "..", "_reports", "saikuro"))
|
22
|
+
base_dir = Pathname.new(File.expand_path(File.join(File.dirname(__FILE__), "..")))
|
23
|
+
rb_files = ["lib", "addon"].collect { |folder|
|
24
|
+
FileList[File.expand_path(File.join(File.dirname(__FILE__), "..", folder, "**", "*.rb"))]
|
25
|
+
}.flatten.collect {|path|
|
26
|
+
Pathname.new(path).relative_path_from(base_dir).to_s
|
27
|
+
}
|
28
|
+
SaikuroRunner.new.run(rb_files, output_dir)
|
29
|
+
end
|
30
|
+
|
31
|
+
desc 'generate ccn treemap'
|
32
|
+
task :ccn_treemap do
|
33
|
+
require 'saikuro_treemap'
|
34
|
+
SaikuroTreemap.generate_treemap :code_dirs => ['lib', 'addon'], :output_file => "_reports/saikuro_treemap.html"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
desc 'Run all metrics tools'
|
39
|
+
task :metrics => ["metrics:saikuro", "metrics:ccn_treemap"]
|
data/rakelib/package.rake
CHANGED
@@ -67,7 +67,7 @@ task :snapshot=>[:package] do
|
|
67
67
|
cp FileList['pkg/{*.gem,*.tgz,*.zip}'], '_snapshot/gems'
|
68
68
|
puts "Generating gem index ..."
|
69
69
|
sh 'gem', 'generate_index', '--directory', '_snapshot'
|
70
|
-
puts "Copying gem and index back to Apache"
|
70
|
+
puts "Copying gem and index back to Apache"
|
71
71
|
sh 'rsync', '--progress', '--recursive', '_snapshot/', 'people.apache.org:public_html/buildr/snapshot/'
|
72
72
|
end
|
73
73
|
task(:clobber) { rm_rf '_snapshot' }
|
data/rakelib/release.rake
CHANGED
@@ -45,6 +45,9 @@ task :release do
|
|
45
45
|
|
46
46
|
# Upload binary and source packages to RubyForge.
|
47
47
|
lambda do
|
48
|
+
sh 'rubyforge', 'login'
|
49
|
+
# update rubyforge projects, processors, etc. in local config
|
50
|
+
sh 'rubyforge', 'config'
|
48
51
|
files = FileList["_release/#{spec.version}/dist/*.{gem,tgz,zip}"]
|
49
52
|
puts "Uploading #{spec.version} to RubyForge ... "
|
50
53
|
rubyforge = RubyForge.new.configure
|
@@ -63,7 +66,7 @@ task :release do
|
|
63
66
|
# Create an SVN tag for this release.
|
64
67
|
lambda do
|
65
68
|
info = `svn info` + `git svn info` # Using either svn or git-svn
|
66
|
-
if url = info[/^URL:/] && info.scan(/^URL: (.*)/)[0][0]
|
69
|
+
if url = info[/^URL:/] && info.scan(/^URL: (.*)/)[0][0]
|
67
70
|
new_url = url.sub(/(trunk$)|(branches\/\w*)$/, "tags/#{spec.version}")
|
68
71
|
unless url == new_url
|
69
72
|
sh 'svn', 'copy', url, new_url, '-m', "Release #{spec.version}" do |ok, res|
|
@@ -80,7 +83,7 @@ task :release do
|
|
80
83
|
|
81
84
|
|
82
85
|
# Update CHANGELOG to next release number.
|
83
|
-
lambda do
|
86
|
+
lambda do
|
84
87
|
next_version = spec.version.to_s.split('.').map { |v| v.to_i }.
|
85
88
|
zip([0, 0, 1]).map { |a| a.inject(0) { |t,i| t + i } }.join('.')
|
86
89
|
modified = "#{next_version} (Pending)\n\n" + File.read('CHANGELOG')
|
@@ -89,7 +92,7 @@ task :release do
|
|
89
92
|
end
|
90
93
|
puts "[X] Updated CHANGELOG and added entry for next release"
|
91
94
|
end.call
|
92
|
-
|
95
|
+
|
93
96
|
|
94
97
|
# Update source files to next release number.
|
95
98
|
lambda do
|
@@ -98,7 +101,7 @@ task :release do
|
|
98
101
|
|
99
102
|
ver_file = "lib/#{spec.name}.rb"
|
100
103
|
if File.exist?(ver_file)
|
101
|
-
modified = File.read(ver_file).sub(/(VERSION\s*=\s*)(['"])(.*)\2/) { |line| "#{$1}#{$2}#{next_version}#{$2}" }
|
104
|
+
modified = File.read(ver_file).sub(/(VERSION\s*=\s*)(['"])(.*)\2/) { |line| "#{$1}#{$2}#{next_version}#{$2}" }
|
102
105
|
File.open ver_file, 'w' do |file|
|
103
106
|
file.write modified
|
104
107
|
end
|
@@ -107,7 +110,7 @@ task :release do
|
|
107
110
|
|
108
111
|
spec_file = "#{spec.name}.gemspec"
|
109
112
|
if File.exist?(spec_file)
|
110
|
-
modified = File.read(spec_file).sub(/(s(?:pec)?\.version\s*=\s*)(['"])(.*)\2/) { |line| "#{$1}#{$2}#{next_version}#{$2}" }
|
113
|
+
modified = File.read(spec_file).sub(/(s(?:pec)?\.version\s*=\s*)(['"])(.*)\2/) { |line| "#{$1}#{$2}#{next_version}#{$2}" }
|
111
114
|
File.open spec_file, 'w' do |file|
|
112
115
|
file.write modified
|
113
116
|
end
|
@@ -115,7 +118,7 @@ task :release do
|
|
115
118
|
end
|
116
119
|
end.call
|
117
120
|
|
118
|
-
|
121
|
+
|
119
122
|
# Prepare release announcement email.
|
120
123
|
lambda do
|
121
124
|
changes = File.read("_release/#{spec.version}/CHANGES")[/.*?\n(.*)/m, 1]
|
data/rakelib/rspec.rake
CHANGED
@@ -18,34 +18,53 @@ begin
|
|
18
18
|
require 'spec/rake/spectask'
|
19
19
|
directory '_reports'
|
20
20
|
|
21
|
+
def default_spec_opts
|
22
|
+
default = %w{--format failing_examples:failed --format html:_reports/specs.html --backtrace}
|
23
|
+
default << '--colour' if $stdout.isatty
|
24
|
+
default
|
25
|
+
end
|
26
|
+
|
21
27
|
desc "Run all specs"
|
22
|
-
Spec::Rake::SpecTask.new :spec=>'_reports' do |task|
|
28
|
+
Spec::Rake::SpecTask.new :spec=>['_reports', :compile] do |task|
|
29
|
+
ENV['USE_FSC'] = 'no'
|
23
30
|
task.spec_files = FileList['spec/**/*_spec.rb']
|
24
31
|
task.spec_files.exclude('spec/groovy/*') if RUBY_PLATFORM[/java/]
|
25
|
-
task.spec_opts =
|
26
|
-
task.spec_opts << '--
|
32
|
+
task.spec_opts = default_spec_opts
|
33
|
+
task.spec_opts << '--format specdoc'
|
27
34
|
end
|
28
35
|
file('_reports/specs.html') { task(:spec).invoke }
|
29
36
|
|
30
37
|
desc 'Run all failed examples from previous run'
|
31
38
|
Spec::Rake::SpecTask.new :failed do |task|
|
39
|
+
ENV['USE_FSC'] = 'no'
|
32
40
|
task.spec_files = FileList['spec/**/*_spec.rb']
|
33
|
-
task.spec_opts =
|
34
|
-
task.spec_opts << '--
|
41
|
+
task.spec_opts = default_spec_opts
|
42
|
+
task.spec_opts << '--format specdoc' << '--example failed'
|
35
43
|
end
|
36
44
|
|
37
45
|
desc 'Run RSpec and generate Spec and coverage reports (slow)'
|
38
|
-
Spec::Rake::SpecTask.new :coverage=>'_reports' do |task|
|
46
|
+
Spec::Rake::SpecTask.new :coverage=>['_reports', :compile] do |task|
|
47
|
+
ENV['USE_FSC'] = 'no'
|
39
48
|
task.spec_files = FileList['spec/**/*_spec.rb']
|
40
|
-
task.spec_opts =
|
41
|
-
task.spec_opts << '--
|
49
|
+
task.spec_opts = default_spec_opts
|
50
|
+
task.spec_opts << '--format progress'
|
42
51
|
task.rcov = true
|
43
52
|
task.rcov_dir = '_reports/coverage'
|
44
53
|
task.rcov_opts = %w{--exclude / --include-file ^lib --text-summary}
|
45
54
|
end
|
46
55
|
file('_reports/coverage') { task(:coverage).invoke }
|
47
56
|
|
48
|
-
|
57
|
+
task :load_ci_reporter do
|
58
|
+
gem 'ci_reporter'
|
59
|
+
ENV['CI_REPORTS'] = '_reports/ci'
|
60
|
+
# CI_Reporter does not quote the path to rspec_loader which causes problems when ruby is installed in C:/Program Files
|
61
|
+
ci_rep_path = Gem.loaded_specs['ci_reporter'].full_gem_path
|
62
|
+
ENV["SPEC_OPTS"] = [ENV["SPEC_OPTS"], default_spec_opts, "--require", "\"#{ci_rep_path}/lib/ci/reporter/rake/rspec_loader.rb\"", "--format", "CI::Reporter::RSpec"].join(" ")
|
63
|
+
end
|
64
|
+
|
65
|
+
desc 'Run all specs with CI reporter'
|
66
|
+
task :ci=>[:load_ci_reporter, :spec]
|
67
|
+
|
49
68
|
# Useful for testing with JRuby when using Ruby and vice versa.
|
50
69
|
namespace :spec do
|
51
70
|
desc "Run all specs specifically with Ruby"
|
data/rakelib/setup.rake
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
require 'jruby' if RUBY_PLATFORM[/java/]
|
18
18
|
require 'rubygems/source_info_cache'
|
19
19
|
|
20
|
-
RAKE_SUDO = case (ENV['RAKE_SUDO'] or '
|
20
|
+
RAKE_SUDO = case (ENV['RAKE_SUDO'] or 'false').strip.downcase
|
21
21
|
when 'yes', 'true'
|
22
22
|
true
|
23
23
|
else
|
@@ -35,7 +35,14 @@ def install_gem(name, options = {})
|
|
35
35
|
args = []
|
36
36
|
args << 'sudo' << 'env' << "JAVA_HOME=#{ENV['JAVA_HOME']}" if sudo_needed? and RAKE_SUDO
|
37
37
|
args << rb_bin << '-S' << 'gem' << 'install' << name
|
38
|
-
|
38
|
+
|
39
|
+
if (spec.respond_to? :requirement)
|
40
|
+
args << '--version' << dep.requirement.to_s
|
41
|
+
else
|
42
|
+
# Dependency.version_requirements deprecated in rubygems 1.3.6
|
43
|
+
args << '--version' << dep.version_requirements.to_s
|
44
|
+
end
|
45
|
+
|
39
46
|
args << '--source' << options[:source] if options[:source]
|
40
47
|
args << '--source' << 'http://gems.rubyforge.org'
|
41
48
|
args << '--install-dir' << ENV['GEM_HOME'] if ENV['GEM_HOME']
|
@@ -49,6 +56,11 @@ desc "If you're building from sources, run this task first to setup the necessar
|
|
49
56
|
task :setup do
|
50
57
|
missing = spec.dependencies.select { |dep| Gem::SourceIndex.from_installed_gems.search(dep).empty? }
|
51
58
|
missing.each do |dep|
|
52
|
-
|
59
|
+
if (spec.respond_to? :requirement)
|
60
|
+
install_gem dep.name, :version=>dep.requirement
|
61
|
+
else
|
62
|
+
# Dependency.version_requirements deprecated in rubygems 1.3.6
|
63
|
+
install_gem dep.name, :version=>dep.version_requirements
|
64
|
+
end
|
53
65
|
end
|
54
66
|
end
|
data/rakelib/stage.rake
CHANGED
@@ -23,6 +23,7 @@ rescue LoadError
|
|
23
23
|
task(:setup) { install_gem 'rubyforge' }
|
24
24
|
end
|
25
25
|
|
26
|
+
gpg_cmd = 'gpg2'
|
26
27
|
|
27
28
|
task :prepare do |task, args|
|
28
29
|
# Make sure we're doing a release from checked code.
|
@@ -47,7 +48,12 @@ task :prepare do |task, args|
|
|
47
48
|
# Need GPG to sign the packages.
|
48
49
|
lambda do
|
49
50
|
args.gpg or fail "Please run with gpg=<argument for gpg --local-user>"
|
50
|
-
|
51
|
+
gpg_ok = `gpg2 --list-keys #{args.gpg}`
|
52
|
+
if !$?.success?
|
53
|
+
gpg_ok = `gpg --list-keys #{args.gpg}`
|
54
|
+
gpg_cmd = 'gpg'
|
55
|
+
end
|
56
|
+
fail "No GPG user #{args.gpg}" if gpg_ok.empty?
|
51
57
|
end.call
|
52
58
|
|
53
59
|
task(:license).invoke
|
@@ -62,11 +68,18 @@ task :prepare do |task, args|
|
|
62
68
|
puts "[X] We have JRuby, Scala and Groovy"
|
63
69
|
end.call
|
64
70
|
|
71
|
+
# Need Prince to generate PDF
|
72
|
+
lambda do
|
73
|
+
puts "Checking that we have prince available ... "
|
74
|
+
sh 'prince --version'
|
75
|
+
puts "[X] We have prince available"
|
76
|
+
end.call
|
77
|
+
|
65
78
|
# Need RubyForge to upload new release files.
|
66
79
|
lambda do
|
67
80
|
puts "[!] Make sure you have admin privileges to make a release on RubyForge"
|
68
81
|
rubyforge = RubyForge.new.configure
|
69
|
-
rubyforge.login
|
82
|
+
rubyforge.login
|
70
83
|
rubyforge.scrape_project(spec.name)
|
71
84
|
end.call
|
72
85
|
|
@@ -99,14 +112,14 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
|
|
99
112
|
task(:package).invoke
|
100
113
|
mkpath '_staged/dist'
|
101
114
|
FileList['pkg/*.{gem,zip,tgz}'].each do |source|
|
102
|
-
pkg = source.pathmap('_staged/dist/%n%x')
|
115
|
+
pkg = source.pathmap('_staged/dist/%n%x')
|
103
116
|
cp source, pkg
|
104
117
|
bytes = File.open(pkg, 'rb') { |file| file.read }
|
105
118
|
File.open(pkg + '.md5', 'w') { |file| file.write Digest::MD5.hexdigest(bytes) << ' ' << File.basename(pkg) }
|
106
119
|
File.open(pkg + '.sha1', 'w') { |file| file.write Digest::SHA1.hexdigest(bytes) << ' ' << File.basename(pkg) }
|
107
|
-
sh
|
120
|
+
sh gpg_cmd, '--local-user', args.gpg, '--armor', '--output', pkg + '.asc', '--detach-sig', pkg, :verbose=>true
|
108
121
|
end
|
109
|
-
cp 'etc/KEYS', '_staged'
|
122
|
+
cp 'etc/KEYS', '_staged/dist'
|
110
123
|
puts "[X] Created and signed release packages in _staged/dist"
|
111
124
|
end.call
|
112
125
|
|
@@ -114,10 +127,11 @@ task :stage=>['setup', 'doc:setup', :clobber, :prepare] do |task, args|
|
|
114
127
|
# want to do that before generating the site/documentation.
|
115
128
|
lambda do
|
116
129
|
puts "Updating download page with links to release packages ... "
|
117
|
-
|
130
|
+
mirror = "http://www.apache.org/dyn/closer.cgi/#{spec.name}/#{spec.version}"
|
131
|
+
official = "http://www.apache.org/dist/#{spec.name}/#{spec.version}"
|
118
132
|
rows = FileList['_staged/dist/*.{gem,tgz,zip}'].map { |pkg|
|
119
133
|
name, md5 = File.basename(pkg), Digest::MD5.file(pkg).to_s
|
120
|
-
%{| "#{name}":#{
|
134
|
+
%{| "#{name}":#{mirror}/#{name} | "#{md5}":#{official}/#{name}.md5 | "Sig":#{official}/#{name}.asc |}
|
121
135
|
}
|
122
136
|
textile = <<-TEXTILE
|
123
137
|
h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
|
@@ -125,7 +139,7 @@ h3. #{spec.name} #{spec.version} (#{Time.now.strftime('%Y-%m-%d')})
|
|
125
139
|
|_. Package |_. MD5 Checksum |_. PGP |
|
126
140
|
#{rows.join("\n")}
|
127
141
|
|
128
|
-
p>. ("Release signing keys":#{
|
142
|
+
p>. ("Release signing keys":#{official}/KEYS)
|
129
143
|
TEXTILE
|
130
144
|
file_name = 'doc/download.textile'
|
131
145
|
print "Adding download links to #{file_name} ... "
|
@@ -154,7 +168,7 @@ p>. ("Release signing keys":#{url}/KEYS)
|
|
154
168
|
sh 'rsync', '--progress', '--recursive', '_staged/', url
|
155
169
|
puts "[X] Uploaded _staged directory to #{url}"
|
156
170
|
end.call
|
157
|
-
|
171
|
+
|
158
172
|
|
159
173
|
# Prepare a release vote email. In the distant future this will also send the
|
160
174
|
# email for you and vote on it.
|
@@ -42,6 +42,9 @@ CONTROL
|
|
42
42
|
Buildr::write "control2", ""
|
43
43
|
Buildr::write "postinst", ""
|
44
44
|
Buildr::write "prerm", ""
|
45
|
+
Buildr::write "postinst2", <<-POSTINST2
|
46
|
+
bash generate_code(#\{MY_CUSTOM_VALUE\})
|
47
|
+
POSTINST2
|
45
48
|
end
|
46
49
|
|
47
50
|
it "should throw an error if no control file is given" do
|
@@ -51,7 +54,7 @@ CONTROL
|
|
51
54
|
project.package(:deb).postinst = _("postinst")
|
52
55
|
project.package(:deb).prerm = _("prerm")
|
53
56
|
end
|
54
|
-
lambda { project("foo").package(:deb).invoke }.should raise_error(/no control file was defined when packaging
|
57
|
+
lambda { project("foo").package(:deb).invoke }.should raise_error(/no control file was defined when packaging as a deb file/)
|
55
58
|
end
|
56
59
|
|
57
60
|
it "should raise an exception if the control is incorrectly formatted" do
|
@@ -62,7 +65,6 @@ CONTROL
|
|
62
65
|
project.package(:deb).prerm = _("prerm")
|
63
66
|
end
|
64
67
|
lambda { project("foo").package(:deb).invoke }.should raise_error(/dpkg failed with this error:/)
|
65
|
-
File.exists?("target/foo-1.0.deb").should be_false
|
66
68
|
end
|
67
69
|
|
68
70
|
it "should give a project the ability to package as deb" do
|
@@ -86,8 +88,9 @@ CONTROL
|
|
86
88
|
project.package(:deb).postinst = _("postinst")
|
87
89
|
project.package(:deb).prerm = _("prerm")
|
88
90
|
project.package(:deb).include("blah.class", :path => "lib")
|
89
|
-
project.package(:deb).include("folder", :as => "otherlib")
|
91
|
+
project.package(:deb).include("folder", :as => "otherlib/")
|
90
92
|
end
|
93
|
+
project("foo").package(:deb).invoke
|
91
94
|
lambda { project("foo").package(:deb).invoke }.should_not raise_error
|
92
95
|
File.exists?("target/foo-1.0.deb").should be_true
|
93
96
|
#check the contents of the deb file:
|
@@ -111,4 +114,35 @@ CONTROL
|
|
111
114
|
project("foo").package(:deb, :file => "bar-1.0.deb").invoke
|
112
115
|
File.exists?("bar-1.0.deb").should be_true
|
113
116
|
end
|
117
|
+
|
118
|
+
it 'should change the version in the control file' do
|
119
|
+
write_files
|
120
|
+
define("foo", :version => "2.0") do
|
121
|
+
project.package(:deb).tap do |deb|
|
122
|
+
deb.control = _("control")
|
123
|
+
deb.postinst = _("postinst")
|
124
|
+
deb.prerm = _("prerm")
|
125
|
+
end
|
126
|
+
end
|
127
|
+
project("foo").package(:deb).invoke
|
128
|
+
File.exists?( project("foo").package(:deb).to_s).should be_true
|
129
|
+
File.exists?("target/foo-2.0.deb-contents/DEBIAN/control").should be_true
|
130
|
+
File.read("target/foo-2.0.deb-contents/DEBIAN/control").should match /^Version: 2.0$/
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should evaluate the contents of the file" do
|
134
|
+
write_files
|
135
|
+
define("foo", :version => "2.0") do
|
136
|
+
project.package(:deb).tap do |deb|
|
137
|
+
deb.control = _("control")
|
138
|
+
deb.postinst = _("postinst2")
|
139
|
+
deb.prerm = _("prerm")
|
140
|
+
end
|
141
|
+
end
|
142
|
+
MY_CUSTOM_VALUE = "custom"
|
143
|
+
project("foo").package(:deb).invoke
|
144
|
+
File.exists?( project("foo").package(:deb).to_s).should be_true
|
145
|
+
File.exists?("target/foo-2.0.deb-contents/DEBIAN/postinst").should be_true
|
146
|
+
File.read("target/foo-2.0.deb-contents/DEBIAN/postinst").should match MY_CUSTOM_VALUE
|
147
|
+
end
|
114
148
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildrdeb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
|
+
- 1
|
7
8
|
- 0
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.3
|
10
|
+
version: 1.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Antoine Toulme
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-25 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -34,9 +34,10 @@ extra_rdoc_files:
|
|
34
34
|
files:
|
35
35
|
- lib/buildrdeb/package.rb
|
36
36
|
- lib/buildrdeb.rb
|
37
|
+
- rakelib/all-in-one.rake
|
37
38
|
- rakelib/checks.rake
|
38
39
|
- rakelib/doc.rake
|
39
|
-
- rakelib/
|
40
|
+
- rakelib/metrics.rake
|
40
41
|
- rakelib/package.rake
|
41
42
|
- rakelib/release.rake
|
42
43
|
- rakelib/rspec.rake
|
data/rakelib/jekylltask.rb
DELETED
@@ -1,120 +0,0 @@
|
|
1
|
-
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
-
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
-
# work for additional information regarding copyright ownership. The ASF
|
4
|
-
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
-
# "License"); you may not use this file except in compliance with the License.
|
6
|
-
# You may obtain a copy of the License at
|
7
|
-
#
|
8
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
#
|
10
|
-
# Unless required by applicable law or agreed to in writing, software
|
11
|
-
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
-
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
-
# License for the specific language governing permissions and limitations under
|
14
|
-
# the License.
|
15
|
-
|
16
|
-
|
17
|
-
gem 'mojombo-jekyll', '~> 0.5.2' # skip past some buggy versions
|
18
|
-
require 'rake/tasklib'
|
19
|
-
require 'jekyll'
|
20
|
-
|
21
|
-
|
22
|
-
class JekyllTask < Rake::TaskLib
|
23
|
-
def initialize(name=:jekyll) # :yield: self
|
24
|
-
@name = name
|
25
|
-
@source = name
|
26
|
-
@target = name
|
27
|
-
yield self if block_given?
|
28
|
-
task name, :auto, :needs=>[@source] do |task, args|
|
29
|
-
generate args.auto
|
30
|
-
end
|
31
|
-
if @source != @target
|
32
|
-
file @target=>FileList["#{@source}/**/*"] do
|
33
|
-
generate
|
34
|
-
end
|
35
|
-
task 'clobber' do
|
36
|
-
rm_rf @target
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
attr_accessor :source
|
42
|
-
attr_accessor :target
|
43
|
-
|
44
|
-
def generate(auto = false)
|
45
|
-
options = { 'source'=>source, 'destination'=>target }
|
46
|
-
options = Jekyll.configuration(options)
|
47
|
-
site = Jekyll::Site.new(options)
|
48
|
-
|
49
|
-
if auto
|
50
|
-
require 'directory_watcher'
|
51
|
-
puts "Auto generating: just edit a page and save, watch the console to see when we're done regenerating pages"
|
52
|
-
dw = DirectoryWatcher.new(source)
|
53
|
-
dw.interval = 1
|
54
|
-
dw.glob = Dir.chdir(source) do
|
55
|
-
dirs = Dir['*'].select { |x| File.directory?(x) }
|
56
|
-
dirs -= [target]
|
57
|
-
dirs = dirs.map { |x| "#{x}/**/*" }
|
58
|
-
dirs += ['*']
|
59
|
-
end
|
60
|
-
dw.start
|
61
|
-
dw.add_observer do |*args|
|
62
|
-
t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
63
|
-
puts "[#{t}] regeneration: #{args.size} files changed"
|
64
|
-
site.process
|
65
|
-
puts "Done"
|
66
|
-
end
|
67
|
-
loop { sleep 1 }
|
68
|
-
else
|
69
|
-
puts "Generating documentation in #{target}"
|
70
|
-
site.process
|
71
|
-
touch target
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
|
77
|
-
module TocFilter
|
78
|
-
def toc(input)
|
79
|
-
input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).inject(%{<ol class="toc">}) { |toc, entry|
|
80
|
-
id = entry[1][/^id=(['"])(.*)\1$/, 2]
|
81
|
-
title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
|
82
|
-
toc << %{<li><a href="##{id}">#{title}</a></li>}
|
83
|
-
} << "</ol>"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
Liquid::Template.register_filter(TocFilter)
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
# Under Ruby 1.9 [a,b,c].to_s doesn't join the array first. (Jekyll 0.5.2 requires this)
|
91
|
-
module Jekyll
|
92
|
-
class HighlightBlock < Liquid::Block
|
93
|
-
def render(context)
|
94
|
-
if context.registers[:site].pygments
|
95
|
-
render_pygments(context, super.join)
|
96
|
-
else
|
97
|
-
render_codehighlighter(context, super.join)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
# Ruby 1.9 has sane closure scoping which manages to mess Liquid filters. (Liquid 2.0.0 requires this)
|
104
|
-
module Liquid
|
105
|
-
class Variable
|
106
|
-
def render(context)
|
107
|
-
return '' if @name.nil?
|
108
|
-
@filters.inject(context[@name]) do |output, filter|
|
109
|
-
filterargs = filter[1].to_a.collect do |a|
|
110
|
-
context[a]
|
111
|
-
end
|
112
|
-
begin
|
113
|
-
context.invoke(filter[0], output, *filterargs)
|
114
|
-
rescue FilterNotFound
|
115
|
-
raise FilterNotFound, "Error - filter '#{filter[0]}' in '#{@markup.strip}' could not be found."
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|