require 'rake/clean' require 'rake/packagetask' namespace :test do begin require 'rspec/core/rake_task' RSpec::Core::RakeTask.new(:p4_web_api) do |t| t.pattern = 'p4_web_api/clients/ruby/p4_web_api_client/spec/*.rb' end RSpec::Core::RakeTask.new(:p4_project_services) do |t| t.pattern = 'p4_project_services/clients/ruby/p4_project_services_client/spec/*.rb' end rescue Exception => e puts "Problems setting up :test tasks, ingoring #{e.message}" end end desc 'Rebuild native tools in qt/work directory (please set CMAKE_PREFIX_PATH in environment)' task :qt_build do FileUtils.rmtree('qt/work') if Dir.exist?('qt/work') FileUtils.mkdir('qt/work') system('cd qt/work && cmake .. && make') or fail('qt build failed') end CLEAN.include('qt/work') desc 'Run all qt tests' task :qt_test do system('cd qt/work/p4_phoenix_services_client && ./PhoenixIntegrationTests') or fail('PhoenixIntegrationTests failed') end desc 'Create doc directory from docbook files (requires ant)' directory 'build/doc' => 'docbook' do FileUtils.rmtree('build/doc') if Dir.exist?('build/doc') sh 'cd docbook && ant publicsite -Ddoc.build.path=../tools/p4-doc/manuals/_build && cd ..' end desc 'Archive Qt package in build/ directory' task :publish do if Dir.exist?('build') `chmod -R +w build` end Dir.mkdir('build') unless Dir.exist?('build') ['qt/p4_project_services_client', 'qt/p4_phoenix_services_client'].each do |project| project_name = File.basename(project) puts "Preparing project #{project_name} from #{project}" Dir.glob("#{project}/**/*").each do |file| relative_path = file[(project.length+1)..-1] if File.file?(file) FileUtils.mkdir_p("build/#{project_name}/#{File.dirname(relative_path)}") changelist=`p4 changes -m1 '//web-services/p4ws-main/...#have' | awk '{print $2}'`.strip contents = nil File.open(file, 'rb') do |f| contents = f.read.gsub('DEV', changelist) end File.open("build/#{project_name}/#{relative_path}", 'wb') do |f| f.write(contents) end end end end Dir.glob('') end desc 'create perforce.rb containing our current source changelist info' task 'perforce.rb' do unless File.exists?('perforce.rb') changelist = ENV.key?('PATCHLEVEL') ? ENV['PATCHLEVEL'] : `p4 changes -m1 '//web-services/p4ws-main/...#have' | awk '{print $2}'`.strip File.open('perforce.rb', 'wb') do |f| f.write <<-END.gsub(/^[ ]{6}/, '') module Perforce CHANGELIST=#{changelist} end END end end end CLEAN.include('perforce.rb') Rake::PackageTask.new('p4ws', :noversion) do |p| p.need_tar = true #p.need_zip = true p.package_files.include('config/**') p.package_files.include('doc/**') p.package_files.include('docbook/**/*') p.package_files.include('notification_services/**/*') p.package_files.include('p4_phoenix_services/**/*') p.package_files.include('p4_project_services/**/*') p.package_files.include('p4_web_api/**/*') p.package_files.include('p4_web_services_auth/**/*') p.package_files.include('p4init/**/*') p.package_files.include('p4ruby/**/*') p.package_files.include('qt/**/*') p.package_files.include('salt/**/*') p.package_files.include('ui/**/*') p.package_files.include('perforce.rb') p.package_files.include('Gemfile') p.package_files.include('Rakefile') p.package_files.include('README.md') p.package_files.include('Vagrantfile') p.package_files.include('.p4ignore') end CLEAN.include('pkg') task 'p4ws' => 'perforce.rb' desc 'Create the package manifest for debian installers' task 'p4ws.deb.manifest' => ['perforce.rb'] do begin require_relative 'perforce' require_relative 'p4_web_api/p4_web_api/lib/p4_web_api/version' require_relative 'p4_project_services/p4_project_services/lib/p4_project_services/version' require_relative 'p4_phoenix_services/p4_phoenix_services/lib/p4_phoenix_services/version' require_relative 'notification_services/notification_services/lib/notification_services/version' File.open('p4ws.deb.manifest', 'wb') do |f| f.write <<-END.gsub(/^[ ]{8}/,'') --- distro: precise product-files: - apt/ubuntu/incoming/p4-web-api_#{P4WebAPI::VERSION}-#{Perforce::CHANGELIST}_amd64.deb - apt/ubuntu/incoming/p4-project-services_#{P4ProjectServices::VERSION}-#{Perforce::CHANGELIST}_amd64.deb - apt/ubuntu/incoming/p4-phoenix-services_#{P4PhoenixServices::VERSION}-#{Perforce::CHANGELIST}_amd64.deb - apt/ubuntu/incoming/notification-services_#{NotificationServices::VERSION}-#{Perforce::CHANGELIST}_amd64.deb - apt/ubuntu/incoming/perforce-helix-web-services-project-management-ui_1.0.0-#{Perforce::CHANGELIST}_amd64.deb END end rescue Exception => e puts "Ignoring failure #{e}" end end CLEAN.include('p4ws.deb.manifest') desc 'Create bash script that indicates versions of the different libraries' task 'p4ws-versions.sh' => ['perforce.rb'] do begin require_relative 'perforce' require_relative 'p4_web_api/p4_web_api/lib/p4_web_api/version' require_relative 'p4_project_services/p4_project_services/lib/p4_project_services/version' require_relative 'p4_phoenix_services/p4_phoenix_services/lib/p4_phoenix_services/version' require_relative 'notification_services/notification_services/lib/notification_services/version' File.open('p4ws-versions.sh', 'wb') do |f| f.write <<-END.gsub(/^[ ]{8}/, '') export CHANGELIST=#{Perforce::CHANGELIST} export P4_WEB_API=#{P4WebAPI::VERSION} export P4_PROJECT_SERVICES=#{P4ProjectServices::VERSION} export P4_PHOENIX_SERVICES=#{P4PhoenixServices::VERSION} export NOTIFICATION_SERVICES=#{NotificationServices::VERSION} END end rescue Exception => e puts "Ignoring failure #{e}" end end CLEAN.include('p4ws-versions.sh')