# 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