Rakefile in god-0.11.0 vs Rakefile in god-0.12.0

- old
+ new

@@ -1,36 +1,45 @@ require 'rubygems' require 'rake' +require 'rdoc/task' require 'date' ############################################################################# # -# The name of the package -# -############################################################################# - -NAME = 'god' - -############################################################################# -# # Helper functions # ############################################################################# -def source_version - line = File.read("lib/#{NAME}.rb")[/^\s*VERSION\s*=\s*.*/] +def name + @name ||= Dir['*.gemspec'].first.split('.').first +end + +def version + line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/] line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1] end +def date + Date.today.to_s +end + +def rubyforge_project + name +end + def gemspec_file - "#{NAME}.gemspec" + "#{name}.gemspec" end def gem_file - "#{NAME}-#{source_version}.gem" + "#{name}-#{version}.gem" end +def replace_header(head, header_name) + head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"} +end + ############################################################################# # # Standard tasks # ############################################################################# @@ -42,101 +51,134 @@ test.libs << 'lib' << 'test' test.pattern = 'test/**/test_*.rb' test.verbose = true end -desc "Generate and open coverage stats via rcov" +desc "Generate RCov test coverage and open in your browser" task :coverage do require 'rcov' sh "rm -fr coverage" sh "rcov test/test_*.rb" sh "open coverage/index.html" end -require 'rake/rdoctask' +require 'rdoc/task' Rake::RDocTask.new do |rdoc| rdoc.rdoc_dir = 'rdoc' - rdoc.title = "#{NAME} #{source_version}" + rdoc.title = "#{name} #{version}" rdoc.rdoc_files.include('README*') rdoc.rdoc_files.include('lib/**/*.rb') end desc "Open an irb session preloaded with this library" task :console do - sh "irb -rubygems -r ./lib/#{NAME}.rb" + sh "irb -rubygems -r ./lib/#{name}.rb" end ############################################################################# # # Custom tasks (add your own tasks here) # ############################################################################# desc "Upload site to Rubyforge" -task :site do +task :site_old do sh "scp -r site/* mojombo@god.rubyforge.org:/var/www/gforge-projects/god" end desc "Upload site to Rubyforge" task :site_edge do sh "scp -r site/* mojombo@god.rubyforge.org:/var/www/gforge-projects/god/edge" end +desc "Generate the new-style site" +task :site do + # Generate the dynamic parts of the site. + puts "Generating dynamic..." + require 'gollum' + wiki = Gollum::Wiki.new('.', :base_path => '/doc') + html = wiki.page('god', 'HEAD').formatted_data.gsub("\342\200\231", "'") + template = File.read('./site/index.template.html') + index = template.sub("{{ content }}", html) + File.open('./site/index.html', 'w') do |f| + f.write(index) + end + + puts "Done. Opening in browser..." + sh "open site/index.html" +end + +desc "Generate the new-style site" +task :site_release do + # Ensure the gh-pages dir exists so we can generate into it. + puts "Checking for gh-pages dir..." + unless File.exist?("./gh-pages") + puts "No gh-pages directory found. Run the following commands first:" + puts " `git clone git@github.com:mojombo/god gh-pages" + puts " `cd gh-pages" + puts " `git checkout gh-pages`" + exit(1) + end + + # Copy the rest of the site over. + puts "Copying static..." + sh "cp -R site/* gh-pages/" + + # Commit the changes + sha = `git log`.match(/[a-z0-9]{40}/)[0] + sh "cd gh-pages && git add . && git commit -m 'Updating to #{sha}.' && git push" + puts 'Done.' +end ############################################################################# # # Packaging tasks # ############################################################################# +desc "Create tag v#{version} and build and push #{gem_file} to Rubygems" task :release => :build do unless `git branch` =~ /^\* master$/ puts "You must be on the master branch to release!" exit! end - sh "git commit --allow-empty -a -m 'up to #{source_version}'" - sh "git tag v#{source_version}" - sh "git push origin master --tags" - sh "gem push pkg/#{NAME}-#{source_version}.gem" + sh "git commit --allow-empty -a -m 'Release #{version}'" + sh "git tag v#{version}" + sh "git push origin master" + sh "git push origin v#{version}" + sh "gem push pkg/#{name}-#{version}.gem" end +desc "Build #{gem_file} into the pkg directory" task :build => :gemspec do sh "mkdir -p pkg" sh "gem build #{gemspec_file}" sh "mv #{gem_file} pkg" end -task :gemspec => :validate do +desc "Generate #{gemspec_file}" +task :gemspec do # read spec file and split out manifest section spec = File.read(gemspec_file) head, manifest, tail = spec.split(" # = MANIFEST =\n") - # replace version and date - head.sub!(/\.version = '.*'/, ".version = '#{source_version}'") - head.sub!(/\.date = '.*'/, ".date = '#{Date.today.to_s}'") + # replace name version and date + replace_header(head, :name) + replace_header(head, :version) + replace_header(head, :date) + #comment this out if your rubyforge_project has a different name + replace_header(head, :rubyforge_project) # determine file list from git ls-files files = `git ls-files`. split("\n"). sort. reject { |file| file =~ /^\./ }. - reject { |file| file =~ /^(examples|ideas|init|site)/ }. + reject { |file| file =~ /^(rdoc|pkg|examples|ideas|init|site)/ }. map { |file| " #{file}" }. join("\n") # piece file back together and write manifest = " s.files = %w[\n#{files}\n ]\n" spec = [head, manifest, tail].join(" # = MANIFEST =\n") File.open(gemspec_file, 'w') { |io| io.write(spec) } puts "Updated #{gemspec_file}" -end - -task :validate do - libfiles = Dir['lib/*'] - ["lib/#{NAME}.rb", "lib/#{NAME}"] - unless libfiles.empty? - puts "Directory `lib` should only contain a `#{NAME}.rb` file and `#{NAME}` dir." - exit! - end - unless Dir['VERSION*'].empty? - puts "A `VERSION` file at root level violates Gem best practices." - exit! - end end