Rakefile in decisiontree-0.1.0 vs Rakefile in decisiontree-0.2.0

- old
+ new

@@ -6,25 +6,48 @@ require 'rake/gempackagetask' require 'rake/rdoctask' require 'rake/contrib/rubyforgepublisher' require 'fileutils' require 'hoe' + include FileUtils require File.join(File.dirname(__FILE__), 'lib', 'decisiontree', 'version') -AUTHOR = "Ilya Grigorik" +AUTHOR = 'Ilya Grigorik' # can also be an array of Authors EMAIL = "ilya <at> fortehost.com" DESCRIPTION = "ID3-based implementation of the M.L. Decision Tree algorithm" -GEM_NAME = "decisiontree" # what ppl will type to install your gem -RUBYFORGE_PROJECT = "decisiontree" # The unix name for your project +GEM_NAME = 'decisiontree' # what ppl will type to install your gem + +@config_file = "~/.rubyforge/user-config.yml" +@config = nil +def rubyforge_username + unless @config + begin + @config = YAML.load(File.read(File.expand_path(@config_file))) + rescue + puts <<-EOS +ERROR: No rubyforge config file found: #{@config_file}" +Run 'rubyforge setup' to prepare your env for access to Rubyforge + - See http://newgem.rubyforge.org/rubyforge.html for more details + EOS + exit + end + end + @rubyforge_username ||= @config["username"] +end + +RUBYFORGE_PROJECT = 'decisiontree' # The unix name for your project HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org" +DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}" NAME = "decisiontree" -REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil -VERS = ENV['VERSION'] || (DecisionTree::VERSION::STRING + (REV ? ".#{REV}" : "")) - CLEAN.include ['**/.*.sw?', '*.gem', '.config'] -RDOC_OPTS = ['--quiet', '--title', "decisiontree documentation", +REV = nil +# UNCOMMENT IF REQUIRED: +# REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil +VERS = DecisionTree::VERSION::STRING + (REV ? ".#{REV}" : "") +CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] +RDOC_OPTS = ['--quiet', '--title', 'decisiontree documentation', "--opname", "index.html", "--line-numbers", "--main", "README", "--inline-source"] @@ -41,13 +64,60 @@ p.description = DESCRIPTION p.email = EMAIL p.summary = DESCRIPTION p.url = HOMEPATH p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT - p.test_globs = ["test/**/*_test.rb"] - p.clean_globs = CLEAN #An array of file patterns to delete on clean. + p.test_globs = ["test/**/test_*.rb"] + p.clean_globs |= CLEAN #An array of file patterns to delete on clean. # == Optional - #p.changes - A description of the release's latest changes. - #p.extra_deps - An array of rubygem dependencies. - #p.spec_extras - A hash of extra values to set in the gemspec. + p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n") + #p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ] + #p.spec_extras = {} # A hash of extra values to set in the gemspec. end + +CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\n\n") +PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}" +hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc') + +desc 'Generate website files' +task :website_generate do + Dir['website/**/*.txt'].each do |txt| + sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} } + end +end + +desc 'Upload website files to rubyforge' +task :website_upload do + host = "#{rubyforge_username}@rubyforge.org" + remote_dir = "/var/www/gforge-projects/#{PATH}/" + local_dir = 'website' + sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}} +end + +desc 'Generate and upload website files' +task :website => [:website_generate, :website_upload, :publish_docs] + +desc 'Release the website and new gem version' +task :deploy => [:check_version, :website, :release] do + puts "Remember to create SVN tag:" + puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " + + "svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} " + puts "Suggested comment:" + puts "Tagging release #{CHANGES}" +end + +desc 'Runs tasks website_generate and install_gem as a local deployment of the gem' +task :local_deploy => [:website_generate, :install_gem] + +task :check_version do + unless ENV['VERSION'] + puts 'Must pass a VERSION=x.y.z release version' + exit + end + unless ENV['VERSION'] == VERS + puts "Please update your version.rb to match the release version, currently #{VERS}" + exit + end +end + +