# Deploy Config
# =============
#
# Copy this file to config/deploy.rb and customize it as needed.
# Then run `cap errbit:setup` to set up your server and finally
# `cap deploy` whenever you would like to deploy Errbit. Refer
# to ./docs/deployment/capistrano.md for more info

# config valid only for current version of Capistrano
lock '3.4.0'

set :application, 'errbit'
set :repo_url, 'https://github.com/errbit/errbit.git'
set :branch, ENV['branch'] || 'master'
set :deploy_to, '/var/www/apps/errbit'
set :keep_releases, 5

set :pty, true
set :ssh_options, forward_agent: true

set :linked_files, fetch(:linked_files, []) + %w(
  .env
  config/newrelic.yml
  config/unicorn.rb
)

set :linked_dirs, fetch(:linked_dirs, []) + %w(
  log
  tmp/cache tmp/pids tmp/sockets
  vendor/bundle
)

# check out capistrano-rbenv documentation
# set :rbenv_type, :system
# set :rbenv_path, '/usr/local/rbenv'
# set :rbenv_ruby, File.read(File.expand_path('../../.ruby-version', __FILE__)).strip
# set :rbenv_roles, :all

namespace :errbit do
  desc "Setup config files (first time setup)"
  task :setup do
    on roles(:app) do
      execute "mkdir -p #{shared_path}/config"
      execute "mkdir -p #{shared_path}/tmp/pids"
      execute "touch #{shared_path}/.env"

      {
        'config/newrelic.example.yml' => 'config/newrelic.yml',
        'config/unicorn.default.rb'   => 'config/unicorn.rb'
      }.each do |src, target|
        unless test("[ -f #{shared_path}/#{target} ]")
          upload! src, "#{shared_path}/#{target}"
        end
      end
    end
  end
end

namespace :db do
  desc "Create and setup the mongo db"
  task :setup do
    on roles(:db) do
      within current_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, 'errbit:bootstrap'
        end
      end
    end
  end
end

set :unicorn_pidfile, "#{fetch(:deploy_to)}/shared/tmp/pids/unicorn.pid"
set :unicorn_pid, "`cat #{fetch(:unicorn_pidfile)}`"

namespace :unicorn do
  desc 'Start unicorn'
  task :start do
    on roles(:app) do
      within current_path do
        if test " [ -s #{fetch(:unicorn_pidfile)} ] "
          warn "Unicorn is already running."
        else
          with "UNICORN_PID" => fetch(:unicorn_pidfile) do
            execute :bundle, :exec, :unicorn, "-D -c ./config/unicorn.rb"
          end
        end
      end
    end
  end

  desc 'Reload unicorn'
  task :reload do
    on roles(:app) do
      execute :kill, "-HUP", fetch(:unicorn_pid)
    end
  end

  desc 'Stop unicorn'
  task :stop do
    on roles(:app) do
      if test " [ -s #{fetch(:unicorn_pidfile)} ] "
        execute :kill, "-QUIT", fetch(:unicorn_pid)
      else
        warn "Unicorn is not running."
      end
    end
  end

  desc 'Reexecute unicorn'
  task :reexec do
    on roles(:app) do
      execute :kill, "-USR2", fetch(:unicorn_pid)
    end
  end
end
