tasks/github-gem.rake in wvanbergen-scoped_search-1.0.0 vs tasks/github-gem.rake in wvanbergen-scoped_search-1.0.1

- old
+ new

@@ -24,21 +24,92 @@ def register_all_tasks! namespace(:gem) do desc "Updates the file lists for this gem" task(:manifest) { manifest_task } - desc "Builds a .gem package for #{@name}" - task(:build) { build_task } + desc "Releases a new version of #{@name}" + task(:build => [:manifest]) { build_task } + + release_dependencies = [:check_clean_master_branch, :version, :build, :create_tag] + release_dependencies.push 'doc:publish' if has_rdoc? + release_dependencies.unshift 'test' if has_tests? + release_dependencies.unshift 'spec' if has_specs? + desc "Releases a new version of #{@name}" - task(:release) { release_task } + task(:release => release_dependencies) { release_task } - end + # helper task for releasing + task(:check_clean_master_branch) { verify_clean_status('master') } + task(:check_version) { verify_version(ENV['VERSION'] || @specification.version) } + task(:version => [:check_version]) { set_gem_version! } + task(:create_tag) { create_version_tag! } + end + + # Register RDoc tasks + if has_rdoc? + require 'rake/rdoctask' + + namespace(:doc) do + desc 'Generate documentation for request-log-analyzer' + Rake::RDocTask.new(:compile) do |rdoc| + rdoc.rdoc_dir = 'doc' + rdoc.title = @name + rdoc.options += @specification.rdoc_options + rdoc.rdoc_files.include(@specification.extra_rdoc_files) + rdoc.rdoc_files.include('lib/**/*.rb') + end + + desc "Publish RDoc files for #{@name} to Github" + task(:publish => :compile) do + sh 'git checkout gh-pages' + sh 'git pull origin gh-pages' + sh 'cp -rf doc/* .' + sh "git commit -am \"Publishing newest RDoc documentation for #{@name}\"" + sh "git push origin gh-pages" + sh "git checkout master" + end + end + end + + # Setup :spec task if RSpec files exist + if has_specs? + require 'spec/rake/spectask' + + desc "Run all specs for #{@name}" + Spec::Rake::SpecTask.new(:spec) do |t| + t.spec_files = FileList['spec/**/*_spec.rb'] + end + end + + # Setup :test task if unit test files exist + if has_tests? + require 'rake/testtask' + + desc "Run all unit tests for #{@name}" + Rake::TestTask.new(:test) do |t| + t.pattern = 'test/**/*_test.rb' + t.verbose = true + t.libs << 'test' + end + end end protected + def has_rdoc? + @specification.has_rdoc + end + + def has_specs? + Dir['spec/**/*_spec.rb'].any? + end + + def has_tests? + Dir['test/**/*_test.rb'].any? + end + def reload_gemspec! raise "No gemspec file found!" if gemspec_file.nil? spec = File.read(gemspec_file) @specification = eval(spec) @name = specification.name @@ -108,10 +179,16 @@ def verify_version(new_version) newest_version = run_command('git tag').map { |tag| tag.split(name + '-').last }.compact.map { |v| Gem::Version.new(v) }.max raise "This version number (#{new_version}) is not higher than the highest tagged version (#{newest_version})" if !newest_version.nil? && newest_version >= Gem::Version.new(new_version.to_s) end + + def set_gem_version! + # update gemspec file + self.gemspec_version = ENV['VERSION'] if Gem::Version.correct?(ENV['VERSION']) + self.gemspec_date = Date.today + end def manifest_task verify_current_branch('master') list = Dir['**/*'].sort @@ -151,22 +228,22 @@ def uninstall_task raise "#{name} .gem file not found" unless File.exist?("pkg/#{name}-#{specification.version}.gem") sh "gem uninstall #{name}" end - def release_task - verify_clean_status('master') - verify_version(ENV['VERSION'] || @specification.version) - - # update gemspec file - self.gemspec_version = ENV['VERSION'] if Gem::Version.correct?(ENV['VERSION']) - self.gemspec_date = Date.today - manifest_task + def create_version_tag! + # commit the gemspec file git_commit_file(gemspec_file, "Updated #{gemspec_file} for release of version #{@specification.version}") if git_modified?(gemspec_file) # create tag and push changes git_create_tag("#{@name}-#{@specification.version}", "Tagged version #{@specification.version}") - git_push('origin', 'master', [:tags]) + git_push('origin', 'master', [:tags]) + end + + def release_task + puts + puts '------------------------------------------------------------' + puts "Released #{@name} - version #{@specification.version}" end end end Rake::GithubGem.define_tasks! \ No newline at end of file