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