Rakefile in fog-arubacloud-0.0.3 vs Rakefile in fog-arubacloud-0.0.5

- old
+ new

@@ -5,20 +5,114 @@ require 'rake/testtask' require File.dirname(__FILE__) + '/lib/fog/arubacloud' task :default => :test -mock = ENV['FOG_MOCK'] || 'true' +def name + @name ||= Dir['*.gemspec'].first.split('.').first +end + +GEM_NAME = "#{name}" + +def version + Fog::ArubaCloud::VERSION +end + +def gem_file + "#{name}-#{version}.gem" +end + +def gemspec_file + "#{name}.gemspec" +end + +def replace_header(head, header_name) + head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"} +end + Rake::TestTask.new do |t| t.pattern = File.join('spec', '**', '*_spec.rb') t.libs << 'spec' + t.verbose = true end namespace :test do - task :arubacloud_specs do - sh('export FOG_MOCK=false && bundle exec rspec spec/fog/arubacloud/*_spec.rb') + mock = 'true' || ENV['FOG_MOCK'] + task :travis do + ENV['COVERAGE'] = 'false' if RUBY_PLATFORM == 'java' + sh("export FOG_MOCK=#{mock} && bundle exec rake") end - task :travis => [:arubacloud_specs] do - sh("export FOG_MOCK=#{mock} && bundle exec shindont") +end + +task :release => %w(release:prepare release:publish) + +namespace :release do + task :preflight do + unless `git branch` =~ /^\* master$/ + puts 'You must be on the master branch to release!' + exit! + end + if `git tag` =~ /^\* v#{version}$/ + puts "Tag v#{version} already exists!" + exit! + end + end + + task :prepare => :preflight do + Rake::Task[:build].invoke + sh "gem install pkg/#{name}-#{version}.gem" + Rake::Task[:git_mark_release].invoke + end + + task :publish do + Rake::Task[:git_push_release].invoke + Rake::Task[:gem_push].invoke + end +end + +task :git_mark_release do + sh "git commit --allow-empty -a -m 'Release #{version}'" + sh "git tag v#{version}" +end + +task :git_push_release do + sh 'git push origin master' + sh "git push origin v#{version}" +end + +task :gem_push do + sh "gem push pkg/#{name}-#{version}.gem" +end + +desc "Build fog-#{version}.gem" +task :build => :gemspec do + sh 'mkdir -p pkg' + sh "gem build #{gemspec_file}" + sh "mv #{gem_file} gemfiles" +end +task :gem => :build + +desc "Updates the gemspec and runs 'validate'" +task :gemspec => :validate do + spec = File.read(gemspec_file) + + replace_header(spec, :name) + replace_header(spec, :version) + replace_header(spec, :date) + + File.open(gemspec_file, 'w') { |io| io.write(spec) } + puts "Updated #{gemspec_file}" +end + +desc 'Run before pushing out the code' +task :validate do + libfiles = Dir['lib/*'] - %W(lib/#{name}.rb lib/#{name} lib/tasks) + 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 \ No newline at end of file