# config valid only for Capistrano 3.1
lock '3.2.0'

set :application, 'core-api'
set :repo_url, 'git@github.my-private-enterprise-domain.com:core-api.git'

# Default value for :scm is :git
set :scm, :git

# Default value for :pty is false
set :pty, true

# Default value for :linked_files is []
set :linked_files, %w{config/mongoid.yml}

# Default value for linked_dirs is []
# set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets vendor/bundle public/system}
set :linked_dirs, %w{log}

# Default value for default_env is {}
set :default_env, { path: "/home/deploy/.rbenv/shims:/home/deploy/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:$PATH" }

# Default value for keep_releases is 5

namespace :check do

  desc "Check that we can access everything"
  task :write_permissions do
    on roles(:all) do |host|
      if test("[ -w #{fetch(:deploy_to)} ]")
        info "#{fetch(:deploy_to)} is writable on #{host}"
      else
        error "#{fetch(:deploy_to)} is not writable on #{host}"
      end
    end
  end

  desc "Check if agent forwarding is working"
  task :forwarding do
    on roles(:all) do |h|
      if test("env | grep SSH_AUTH_SOCK")
        info "Agent forwarding is up to #{h}"
      else
        error "Agent forwarding is NOT up to #{h}"
      end
    end
  end
end

namespace :deploy do

  # Needed for passenger
  %w[ start stop ].each { |t| desc nil; task t do ; end }

  desc 'set group writable permissions'
  task :group_writable_permissions do
    on roles(:web), in: :sequence, wait: 5 do #on_error: :continue
      execute "chmod -fR g+w #{fetch(:deploy_to)}"
    end
  end

  desc 'create tmp directory'
  task :create_app_tmp_dir do
    on roles(:web), in: :sequence, wait: 5 do
      tmp_dir = fetch(:release_path).join('tmp')
      if test("[ -d #{tmp_dir} ]")
        info "#{tmp_dir} folder exists already."
      else
        execute "mkdir -p #{tmp_dir}"
        info "created #{tmp_dir} folder."
      end
    end
  end

  desc 'create tmp/restart.txt file'
  task :create_tmp_restart_file do
    on roles(:web), in: :sequence, wait: 5 do
      restart_file = fetch(:release_path).join('tmp/restart.txt')
      if test("[ -f #{restart_file} ]")
        info "#{restart_file} file exists already."
      else
        execute :touch, restart_file
        info "created #{restart_file} file."
      end
    end
  end

  desc 'create mongoid indexes with remote rake task'
  task :create_mongoid_indexes do
    on roles(:web), in: :sequence, wait: 5 do
      execute :rake, "db:mongoid:create_indexes"
    end
  end

  desc 'Restart application'
  task :restart do
    on roles(:web), in: :sequence, wait: 5 do
      execute :touch, fetch(:release_path).join('tmp/restart.txt')
    end
  end
end

# Hook into capistrano flow
after  'deploy', 'deploy:group_writable_permissions'
after  'deploy', 'deploy:create_app_tmp_dir'
after  'deploy', 'deploy:create_tmp_restart_file'
#after  'deploy', 'deploy:create_mongoid_indexes'
after  'deploy', 'deploy:restart'
