require "rubygems" require "bundler" Bundler.setup require "rake" require "rspec" require "rspec/core/rake_task" $:.unshift File.expand_path("../lib", __FILE__) require "foreman" task :default => :spec task :release => :man desc "Run all specs" RSpec::Core::RakeTask.new(:spec) do |t| t.pattern = 'spec/**/*_spec.rb' end desc "Generate RCov code coverage report" task :rcov => "rcov:build" do %x{ open coverage/index.html } end RSpec::Core::RakeTask.new("rcov:build") do |t| t.pattern = 'spec/**/*_spec.rb' t.rcov = true t.rcov_opts = [ "--exclude", ".bundle", "--exclude", "spec" ] end desc 'Build the manual' task :man do ENV['RONN_MANUAL'] = "Foreman Manual" ENV['RONN_ORGANIZATION'] = "Foreman #{Foreman::VERSION}" sh "ronn -w -s toc -r5 --markdown man/*.ronn" end desc "Commit the manual to git" task "man:commit" => :man do sh "git add README.markdown" sh "git commit -m 'update readme' || echo 'nothing to commit'" end desc "Generate the Github docs" task :pages => "man:commit" do sh %{ cp man/foreman.1.html /tmp/foreman.1.html git checkout gh-pages rm ./index.html cp /tmp/foreman.1.html ./index.html git add -u index.html git commit -m "saving man page to github docs" git push origin -f gh-pages git checkout master } end ## dist require "erb" require "fileutils" require "tmpdir" def assemble(source, target, perms=0644) FileUtils.mkdir_p(File.dirname(target)) File.open(target, "w") do |f| f.puts ERB.new(File.read(source)).result(binding) end File.chmod(perms, target) end def assemble_distribution(target_dir=Dir.pwd) distribution_files.each do |source| target = source.gsub(/^#{project_root}/, target_dir) FileUtils.mkdir_p(File.dirname(target)) FileUtils.cp(source, target) end end GEM_BLACKLIST = %w( bundler foreman ) def assemble_gems(target_dir=Dir.pwd) lines = %x{ bundle show }.strip.split("\n") raise "error running bundler" unless $?.success? %x{ env BUNDLE_WITHOUT="development:test" bundle show }.split("\n").each do |line| if line =~ /^ \* (.*?) \((.*?)\)/ next if GEM_BLACKLIST.include?($1) puts "vendoring: #{$1}-#{$2}" gem_dir = %x{ bundle show #{$1} }.strip FileUtils.mkdir_p "#{target_dir}/vendor/gems" %x{ cp -R "#{gem_dir}" "#{target_dir}/vendor/gems" } end end.compact end def beta? Foreman::VERSION.to_s =~ /pre/ end def clean(file) rm file if File.exists?(file) end def distribution_files require "foreman/distribution" Foreman::Distribution.files end def mkchdir(dir) FileUtils.mkdir_p(dir) Dir.chdir(dir) do |dir| yield(File.expand_path(dir)) end end def pkg(filename) File.expand_path("../pkg/#{filename}", __FILE__) end def project_root File.dirname(__FILE__) end def resource(name) File.expand_path("../dist/resources/#{name}", __FILE__) end def s3_connect return if @s3_connected require "aws/s3" unless ENV["DAVID_RELEASE_ACCESS"] && ENV["DAVID_RELEASE_SECRET"] puts "please set DAVID_RELEASE_ACCESS and DAVID_RELEASE_SECRET in your environment" exit 1 end AWS::S3::Base.establish_connection!( :access_key_id => ENV["DAVID_RELEASE_ACCESS"], :secret_access_key => ENV["DAVID_RELEASE_SECRET"] ) @s3_connected = true end def store(package_file, filename, bucket="assets.foreman.io") s3_connect puts "storing: #{filename}" AWS::S3::S3Object.store(filename, File.open(package_file), bucket, :access => :public_read) end def tempdir Dir.mktmpdir do |dir| Dir.chdir(dir) do yield(dir) end end end def version require "foreman/version" Foreman::VERSION end Dir[File.expand_path("../dist/**/*.rake", __FILE__)].each do |rake| import rake end task :changelog do timestamp = Time.now.utc.strftime('%m/%d/%Y') sha = `git log | head -1`.split(' ').last changelog = ["#{version} #{timestamp} #{sha}"] changelog << ('=' * changelog[0].length) changelog << '' last_sha = `cat Changelog | head -1`.split(' ').last shortlog = `git log #{last_sha}..HEAD --pretty=format:'%s [%an]'` changelog << shortlog.split("\n") changelog.concat ['', '', ''] old_changelog = File.read('Changelog') File.open('Changelog', 'w') do |file| file.write(changelog.join("\n")) file.write(old_changelog) end end