196 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # Add your own tasks in files placed in lib/tasks ending in .rake,
 | |
| # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
 | |
| require 'rubygems'
 | |
| require 'cucumber'
 | |
| require 'cucumber/rake/task'
 | |
| 
 | |
| require File.expand_path('../config/application', __FILE__)
 | |
| 
 | |
| BikeBike::Application.load_tasks
 | |
| 
 | |
| task regenerate_images: :environment do
 | |
|   {
 | |
|     conference: [ :cover, :poster ],
 | |
|     organization: [ :logo, :avatar, :cover ]
 | |
|   }.each do | model_class, attributes |
 | |
|     Object.const_get(model_class.to_s.titlecase).all.each do | model |
 | |
|       attributes.each do | attribute |
 | |
|         uploader = model.send(attribute)
 | |
|         if uploader.present?
 | |
|           puts "Regenerating #{model_class}.#{attribute} = #{uploader.url}"
 | |
|           uploader.recreate_versions!
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| task update_cities: :environment do
 | |
|   Location.all.each do |l|
 | |
|     s = ([l.city, l.territory, l.country] - [nil, '']).join(', ')
 | |
|     unless l.city_id.present?
 | |
|       begin
 | |
|         puts "Searching for #{s}"
 | |
|         city = City.search(s)
 | |
|         l.city_id = city.id
 | |
|         l.save!
 | |
|       rescue
 | |
|         puts "Error searching for #{s}"
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   City.all.each do |c|
 | |
|     unless c.place_id.present?
 | |
|       location = Geocoder.search(c.address, language: 'en').first
 | |
|       c.place_id = location.data['place_id']
 | |
|       c.save!
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| task update_cities_es: :environment do
 | |
|   City.all.each do |c|
 | |
|     city = c.get_translation(:es)
 | |
|     c.set_column_for_locale(:city, :es, city, 0) unless city.blank? || city == c.get_column_for_locale(:city, :es)
 | |
|     c.save!
 | |
|   end
 | |
| end
 | |
| 
 | |
| task update_cities_fr: :environment do
 | |
|   City.all.each do |c|
 | |
|     city = c.get_translation(:fr)
 | |
|     c.set_column_for_locale(:city, :fr, city, 0) unless city.blank? || city == c.get_column_for_locale(:city, :fr)
 | |
|     c.save!
 | |
|   end
 | |
| end
 | |
| 
 | |
| task :i18n do
 | |
|   LinguaFranca.test LinguaFranca::TestModes::RECORD do
 | |
|     Rake::Task['cucumber:run'].execute
 | |
|   end
 | |
| end
 | |
| 
 | |
| task :css do
 | |
|   ENV['CSS_TEST'] = '1'
 | |
|   Rake::Task['cucumber:run'].execute
 | |
|   ENV['CSS_TEST'] = nil
 | |
| end
 | |
| 
 | |
| task :a11y do
 | |
|   ENV['TEST_A11Y'] = '1'
 | |
|   Rake::Task['cucumber:run'].execute
 | |
|   ENV['TEST_A11Y'] = nil
 | |
| end
 | |
| 
 | |
| task "cucumber:debug" do
 | |
|   ENV['TEST_DEBUG'] = '1'
 | |
|   Rake::Task['cucumber:run'].execute
 | |
|   ENV['TEST_DEBUG'] = nil
 | |
| end
 | |
| 
 | |
| namespace :deployment do
 | |
|   task pull: :environment do
 | |
|     branch = Rails.env.production? ? :master : :development
 | |
|     # `git reset --hard origin/#{branch}`
 | |
|     # raise "\nPull failed" if $?.exitstatus > 0
 | |
|     changed = !(`git pull` =~ /Already up to date/)
 | |
|     # raise "\nPull failed" if $?.exitstatus > 0
 | |
| 
 | |
|     `bundle install --no-deployment && bundle update bundle install --deployment`
 | |
|     # raise "\nPull failed" if $?.exitstatus > 0
 | |
|   end
 | |
| 
 | |
|   task update: :environment do
 | |
|     tasks = [
 | |
|       'lingua_franca:import',
 | |
|       'bumbleberry:update',
 | |
|       'assets:clean',
 | |
|       'assets:precompile',
 | |
|       'routes',
 | |
|       'db:migrate'
 | |
|     ]
 | |
|     cmd = tasks.map { |t| "RAILS_ENV=#{Rails.env} bundle exec #{t}"}.join(' && ')
 | |
|     `#{cmd}`
 | |
|     # raise "\nUpdate failed" if $?.exitstatus > 0
 | |
|   end
 | |
| 
 | |
|   task bounce: :environment do
 | |
|     dir = Rails.env.production? ? :rails : Rails.env
 | |
|     pid = `cat /home/unicorn/#{Rails.env}.pid`
 | |
|     sk_pid = `cat /home/unicorn/sidekiq_#{Rails.env}.pid`
 | |
|     sk_processes = Rails.env.production? ? 25 : 5
 | |
| 
 | |
|     system("kill #{pid}")
 | |
|     `bundle exec unicorn_rails -E #{Rails.env} -D -c /home/#{dir}/config/unicorn.rb`
 | |
| 
 | |
|     system("kill #{sk_pid}")
 | |
|     `bundle exec sidekiq -d -C config/sidekiq_#{Rails.env}.yml -e #{Rails.env} -c #{sk_processes}`
 | |
|   end
 | |
| 
 | |
|   # send an email to admins once deployment is complete
 | |
|   task complete: :environment do
 | |
|     if Rails.env.preview? || Rails.env.production?
 | |
|       UserMailer.delay(queue: Rails.env.to_s).server_startup(Rails.env.to_s)
 | |
|     else
 | |
|       UserMailer.server_startup(Rails.env.to_s).deliver_now
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   task start: :environment do
 | |
|     [
 | |
|       :pull,
 | |
|       :update,
 | |
|       :bounce,
 | |
|       :complete
 | |
|     ].each do |t|
 | |
|      Rake::Task["deployment:#{t}"].execute
 | |
|    end
 | |
|   end
 | |
| end
 | |
| 
 | |
| namespace :cucumber do
 | |
|  
 | |
|   FAILING_CUCUMBER_SCENARIOS_FILENAME = 'log/rerun.txt'
 | |
| 
 | |
|   Cucumber::Rake::Task.new(:start) do |task|
 | |
|     task.cucumber_opts = "features --format pretty -f rerun --out #{FAILING_CUCUMBER_SCENARIOS_FILENAME}"
 | |
|   end
 | |
| 
 | |
|   Cucumber::Rake::Task.new(:retry) do |task|
 | |
|     task.cucumber_opts = "@#{FAILING_CUCUMBER_SCENARIOS_FILENAME}" # -f rerun --out #{FAILING_CUCUMBER_SCENARIOS_FILENAME}"
 | |
|   end
 | |
| 
 | |
|   def cucumber_retry(retry_count)
 | |
|     begin
 | |
|       puts "\nRetrying failed scenarios...\n"
 | |
|       Rake::Task['cucumber:retry'].execute
 | |
|     rescue Exception => e
 | |
|       return cucumber_retry(retry_count - 1) if retry_count > 1
 | |
|       return e
 | |
|     end
 | |
|     return nil
 | |
|   end
 | |
|  
 | |
|   task :run do
 | |
|     exception = nil
 | |
|     begin
 | |
|       result = Rake::Task['cucumber:start'].execute
 | |
|     rescue Exception => e
 | |
|       exception = cucumber_retry(3)
 | |
|     end
 | |
| 
 | |
|     if File.exists?("#{FAILING_CUCUMBER_SCENARIOS_FILENAME}")
 | |
|       File.delete("#{FAILING_CUCUMBER_SCENARIOS_FILENAME}")
 | |
|     end
 | |
| 
 | |
|     raise exception unless exception.nil?
 | |
|   end
 | |
| end
 | |
| 
 | |
| namespace :clean do
 | |
|   task requests: :environment do
 | |
|     Request.delete_all(['created_at < ?', DateTime.now - 1.day])
 | |
|   end
 | |
| end
 |