Author: assaf
Date: Wed Nov 14 08:38:52 2007
New Revision: 594938

URL: http://svn.apache.org/viewvc?rev=594938&view=rev
Log:
Rakefile AWOL, found and added

Added:
    incubator/buildr/trunk/Rakefile

Added: incubator/buildr/trunk/Rakefile
URL: 
http://svn.apache.org/viewvc/incubator/buildr/trunk/Rakefile?rev=594938&view=auto
==============================================================================
--- incubator/buildr/trunk/Rakefile (added)
+++ incubator/buildr/trunk/Rakefile Wed Nov 14 08:38:52 2007
@@ -0,0 +1,244 @@
+require "rubygems"
+Gem::manage_gems
+require "rake/gempackagetask"
+require "spec/rake/spectask"
+
+
+# Gem specification comes first, other tasks rely on it.
+def specify(platform)
+  Gem::Specification.new do |spec|
+    spec.name         = "buildr"
+    spec.version      = 
File.read(__FILE__.pathmap("%d/lib/buildr.rb")).scan(/VERSION\s*=\s*(['"])(.*)\1/)[0][1]
+    spec.author       = "Apache Buildr"
+    spec.email        = "[EMAIL PROTECTED]"
+    spec.homepage     = "http://incubator.apache.org/#{spec.name}/";
+    spec.summary      = "A build system that doesn't suck"
+    spec.files        = FileList["lib/**/*", "CHANGELOG", "README", "LICENSE", 
"Rakefile"].collect
+    spec.require_path = "lib"
+    spec.autorequire  = "buildr.rb"
+    spec.has_rdoc     = true
+    spec.extra_rdoc_files = ["README", "CHANGELOG", "LICENSE"]
+    spec.rdoc_options << "--title" << "Buildr -- #{spec.summary}" <<
+                         "--main" << "README" << "--line-numbers" << 
"-inline-source"
+    spec.rubyforge_project = "buildr"
+
+    spec.bindir = "bin"                               # Use these for 
applications.
+    spec.executables = ["buildr"]
+
+    # Tested against these dependencies.
+    spec.add_dependency "rake",                 "= 0.7.3"
+    spec.add_dependency "facets",               "= 1.8.54"
+    spec.add_dependency "builder",              "= 2.1.2"
+    spec.add_dependency "net-ssh",              "= 1.1.2"
+    spec.add_dependency "net-sftp",             "= 1.1.0"
+    spec.add_dependency "rubyzip",              "= 0.9.1"
+    spec.add_dependency "highline",             "= 1.4.0"
+    spec.add_dependency "Antwrap",              "= 0.6.0"
+    spec.add_dependency "rspec",                "= 1.0.8"
+    spec.add_dependency "xml-simple",           "= 1.0.11"
+    spec.add_dependency "archive-tar-minitar",  "= 0.5.1"
+    
+    spec.platform = platform
+
+    yield spec if block_given?
+  end
+end
+
+spec = specify(Gem::Platform::RUBY) { |spec| spec.add_dependency "rjb", ">= 
1.0.11" }
+jruby_spec = specify('java')
+package = Rake::GemPackageTask.new(spec) do |pkg|
+  pkg.need_tar = true
+  pkg.need_zip = true
+end
+jruby_package = Rake::GemPackageTask.new(jruby_spec)
+
+desc "Install the package locally"
+task :install=>:package do |task|
+  install = RUBY_PLATFORM == 'java' ? jruby_package : package
+  system 'gem', 'install', File.expand_path(install.gem_file, 
install.package_dir)
+end
+
+desc "Uninstall previously installed packaged"
+task :uninstall do |task|
+  install = RUBY_PLATFORM == 'java' ? jruby_package : package
+  system "gem", "uninstall", install.name, "-v", install.version.to_s
+end
+
+
+# Testing is everything.
+desc "Run test cases"
+Spec::Rake::SpecTask.new(:test) do |task|
+  task.spec_files = FileList["test/**/*.rb"]
+  task.spec_opts = [ "--format", "specdoc", "--color", "--diff" ]
+end
+
+desc "Run test cases with rcov"
+Spec::Rake::SpecTask.new(:rcov) do |task|
+  task.spec_files = FileList["test/**/*.rb"]
+  task.spec_opts = [ "--format", "specdoc", "--color", "--diff" ]
+  task.rcov = true
+end
+
+
+# Documentation.
+begin
+  require "rake/rdoctask"
+  require "docter"
+  require "docter/server"
+  require "docter/ultraviolet"
+
+  desc "Generate RDoc documentation"
+  rdoc = Rake::RDocTask.new(:rdoc) do |rdoc|
+    rdoc.rdoc_dir = "html/rdoc"
+    rdoc.title    = spec.name
+    rdoc.options  = spec.rdoc_options
+    rdoc.rdoc_files.include("lib/**/*.rb")
+    rdoc.rdoc_files.include spec.extra_rdoc_files
+  end
+
+  web_collection = 
Docter.collection.using("doc/web.toc.textile").include("doc/pages", "CHANGELOG")
+  web_template = Docter.template("doc/web.haml").include("doc/css", 
"doc/images")
+  print_collection = 
Docter.collection.using("doc/print.toc.textile").include("doc/pages")
+  print_template = Docter.template("doc/print.haml").include("doc/css", 
"doc/images")
+
+  Docter.filter_for(:footnote) do |html|
+    html.gsub(/<p id="fn(\d+)">(.*?)<\/p>/, %{<p id="fn\\1" 
class="footnote">\\2</p>})
+  end
+
+  desc "Produce PDF"
+  print = Docter::Rake.generate("print", print_collection, print_template, 
:one_page)
+  pdf_file = file("html/buildr.pdf"=>print) do |task|
+    mkpath "html"
+    sh *%W{prince #{print}/index.html -o #{task.name}} do |ok, res|
+      fail "Failed to create PDF, see errors above" unless ok
+    end
+  end
+  task("pdf"=>pdf_file) { |task| `kpdf #{File.expand_path(pdf_file.to_s)}` }
+
+  desc "Generate HTML documentation"
+  html = Docter::Rake.generate("html", web_collection, web_template)
+  desc "Run Docter server"
+  Docter::Rake.serve :docter, web_collection, web_template, :port=>3000
+
+  desc "Generate all documentation merged into the html directory"
+  task "docs"=>[html, rdoc.name, pdf_file]
+  task("clobber") { rm_rf [html, print].map(&:to_s) }
+
+rescue LoadError=>error
+  puts error
+  puts "To create the Buildr documentation you need to:"
+  puts "  gem install docter"
+  puts "  gem install ultraviolet"
+end
+
+
+# Commit to SVN, upload and do the release cycle.
+namespace :svn do
+  task :clean? do |task|
+    status = `svn status`.reject { |line| line =~ /\s(pkg|html)$/ }
+    fail "Cannot release unless all local changes are in SVN:\n#{status}" 
unless status.empty?
+  end
+  
+  task :tag do |task|
+    cur_url = `svn info`.scan(/URL: (.*)/)[0][0]
+    new_url = cur_url.sub(/trunk$/, "tags/#{spec.version.to_s}")
+    system "svn", "remove", new_url, "-m", "Removing old copy" rescue nil
+    system "svn", "copy", cur_url, new_url, "-m", "Release 
#{spec.version.to_s}"
+  end
+end
+
+namespace :upload do
+
+  task :docs=>"rake:docs" do |task|
+    sh "rsync -r --del --progress html/*  
people.apache.org:/www/incubator.apache.org/#{spec.rubyforge_project.downcase}/"
+  end
+
+  task :packages=>["rake:docs", "rake:package"] do |task|
+    require 'rubyforge'
+
+    # Read the changes for this release.
+    pattern = /(^(\d+\.\d+(?:\.\d+)?)\s+\(\d+\/\d+\/\d+\)\s*((:?^[^\n]+\n)*))/
+    changelog = File.read(__FILE__.pathmap("%d/CHANGELOG"))
+    changes = changelog.scan(pattern).inject({}) { |hash, set| hash[set[1]] = 
set[2] ; hash }
+    current = changes[spec.version.to_s]
+    if !current && spec.version.to_s =~ /\.0$/
+      current = changes[spec.version.to_s.split(".")[0..-2].join(".")] 
+    end
+    fail "No changeset found for version #{spec.version}" unless current
+
+    puts "Uploading #{spec.name} #{spec.version}"
+    files = Dir.glob('pkg/*.{gem,tgz,zip}')
+    rubyforge = RubyForge.new
+    rubyforge.login    
+    File.open(".changes", 'w'){|f| f.write(current)}
+    rubyforge.userconfig.merge!("release_changes" => ".changes",  
"preformatted" => true)
+    rubyforge.add_release spec.rubyforge_project.downcase, spec.name.downcase, 
spec.version, *files
+    rm ".changes"
+    puts "Release #{spec.version} uploaded"
+  end
+end
+
+namespace :release do
+  task :ready? do
+    require 'highline'
+    require 'highline/import'
+
+    puts "This version: #{spec.version}"
+    puts
+    puts "Top 4 lines form CHANGELOG:"
+    puts File.readlines("CHANGELOG")[0..3].map { |l| "  #{l}" }
+    puts
+    ask("Top-entry in CHANGELOG file includes today's date?") =~ /yes/i or
+      fail "Please update CHANGELOG to include the right date"
+  end
+
+  task :post do
+    # Practical example of functional read but not comprehend code:
+    next_version = spec.version.to_ints.zip([0, 0, 1]).map { |a| a.inject(0) { 
|t,i| t + i } }.join(".")
+    puts "Updating lib/buildr.rb to next version number: #{next_version}"
+    buildr_rb = File.read(__FILE__.pathmap("%d/lib/buildr.rb")).
+      sub(/(VERSION\s*=\s*)(['"])(.*)\2/) { |line| 
"#{$1}#{$2}#{next_version}#{$2}" } 
+    File.open(__FILE__.pathmap("%d/lib/buildr.rb"), "w") { |file| file.write 
buildr_rb }
+    puts "Adding entry to CHANGELOG"
+    changelog = File.read(__FILE__.pathmap("%d/CHANGELOG"))
+    File.open(__FILE__.pathmap("%d/CHANGELOG"), "w") { |file| file.write 
"#{next_version} (Pending)\n\n#{changelog}" }
+  end
+
+  task :meat=>["clobber", "svn:clean?", "test", "upload:packages", 
"upload:docs", "svn:tag"]
+end
+
+desc "Upload release to RubyForge including docs, tag SVN"
+task :release=>[ "release:ready?", "release:meat", "release:post" ]
+
+
+# Misc, may not survive so don't rely on these.
+task :report do |task|
+  puts "#{spec.name} #{spec.version}"
+  puts spec.summary
+  sources = (spec.files + FileList["test/**/*.rb"]).reject { |f| 
File.directory?(f) }
+  sources.inject({}) do |lists, file|
+    File.readlines(file).each_with_index do |line, i|
+      if line =~ /(TODO|FIXME|NOTE):\s*(.*)/
+        list = lists[$1] ||= []
+        list << sprintf("%s (%d): %s", file, i, $2)
+      end
+    end
+    lists
+  end.each_pair do |type, list|
+    unless list.empty?
+      puts
+      puts "#{type}:"
+      list.each { |line| puts line }
+    end
+  end
+end
+
+namespace :setup do
+  task :jetty do
+    cp = ["jetty-6.1.1.jar", "jetty-util-6.1.1.jar", "servlet-api-2.5-6.1.1"].
+      map { |jar| `locate #{jar}`.split.first }.join(File::PATH_SEPARATOR)
+    Dir.chdir "lib/buildr/jetty" do
+      `javac -cp #{cp} JettyWrapper.java`
+    end
+  end
+end


Reply via email to