mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
d8b9b695bb
This change allows both the `deploy_config_path` and `stage_config_path` to be moved from the default locations of `config/deploy.rb` and `config/deploy` respectively. These values __must__ be set in the `Capfile` prior to `capistrano/setup` being called, for example: set :deploy_config_path, 'app/config/deploy.rb' set :stage_config_path, 'app/config/deploy' # Load DSL and Setup Up Stages require 'capistrano/setup' Fixes #610
169 lines
3.1 KiB
Ruby
169 lines
3.1 KiB
Ruby
require 'fileutils'
|
|
module TestApp
|
|
extend self
|
|
|
|
def install
|
|
install_test_app_with(default_config)
|
|
end
|
|
|
|
def default_config
|
|
%{
|
|
set :stage, :#{stage}
|
|
set :deploy_to, '#{deploy_to}'
|
|
set :repo_url, 'git://github.com/capistrano/capistrano.git'
|
|
set :branch, 'v3'
|
|
set :ssh_options, { keys: "\#{ENV['HOME']}/.vagrant.d/insecure_private_key" }
|
|
server 'vagrant@localhost:2220', roles: %w{web app}
|
|
set :linked_files, #{linked_files}
|
|
set :linked_dirs, #{linked_dirs}
|
|
}
|
|
end
|
|
|
|
def linked_files
|
|
%w{config/database.yml}
|
|
end
|
|
|
|
def linked_file
|
|
shared_path.join(linked_files.first)
|
|
end
|
|
|
|
def linked_dirs
|
|
%w{bin log public/system vendor/bundle}
|
|
end
|
|
|
|
def create_test_app
|
|
FileUtils.rm_rf(test_app_path)
|
|
FileUtils.mkdir(test_app_path)
|
|
|
|
File.open(gemfile, 'w+') do |file|
|
|
file.write "gem 'capistrano', path: '#{path_to_cap}'"
|
|
end
|
|
|
|
Dir.chdir(test_app_path) do
|
|
%x[bundle]
|
|
end
|
|
end
|
|
|
|
def install_test_app_with(config)
|
|
create_test_app
|
|
Dir.chdir(test_app_path) do
|
|
%x[bundle exec cap install STAGES=#{stage}]
|
|
end
|
|
write_local_deploy_file(config)
|
|
end
|
|
|
|
def write_local_deploy_file(config)
|
|
File.open(test_stage_path, 'w') do |file|
|
|
file.write config
|
|
end
|
|
end
|
|
|
|
def prepend_to_capfile(config)
|
|
current_capfile = File.read(capfile)
|
|
File.open(capfile, 'w') do |file|
|
|
file.write config
|
|
file.write current_capfile
|
|
end
|
|
end
|
|
|
|
def create_shared_directory(path)
|
|
FileUtils.mkdir_p(shared_path.join(path))
|
|
end
|
|
|
|
def create_shared_file(path)
|
|
File.open(shared_path.join(path), 'w')
|
|
end
|
|
|
|
def cap(task)
|
|
run "bundle exec cap #{stage} #{task}"
|
|
end
|
|
|
|
def run(command)
|
|
Dir.chdir(test_app_path) do
|
|
%x[#{command}]
|
|
end
|
|
$?.success?
|
|
end
|
|
|
|
def stage
|
|
'test'
|
|
end
|
|
|
|
def test_stage_path
|
|
test_app_path.join('config/deploy/test.rb')
|
|
end
|
|
|
|
def test_app_path
|
|
Pathname.new('/tmp/test_app')
|
|
end
|
|
|
|
def deploy_to
|
|
Pathname.new('/home/vagrant/var/www/deploy')
|
|
end
|
|
|
|
def shared_path
|
|
deploy_to.join('shared')
|
|
end
|
|
|
|
def current_path
|
|
deploy_to.join('current')
|
|
end
|
|
|
|
def releases_path
|
|
deploy_to.join('releases')
|
|
end
|
|
|
|
def release_path
|
|
releases_path.join(timestamp)
|
|
end
|
|
|
|
def timestamp
|
|
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
|
end
|
|
|
|
def repo_path
|
|
deploy_to.join('repo')
|
|
end
|
|
|
|
def path_to_cap
|
|
File.expand_path('.')
|
|
end
|
|
|
|
def gemfile
|
|
test_app_path.join('Gemfile')
|
|
end
|
|
|
|
def capfile
|
|
test_app_path.join('Capfile')
|
|
end
|
|
|
|
def current_user
|
|
`whoami`.chomp
|
|
end
|
|
|
|
def task_dir
|
|
test_app_path.join('lib/capistrano/tasks')
|
|
end
|
|
|
|
def copy_task_to_test_app(source)
|
|
FileUtils.cp(source, task_dir)
|
|
end
|
|
|
|
def config_path
|
|
test_app_path.join('config')
|
|
end
|
|
|
|
def move_configuration_to_custom_location(location)
|
|
prepend_to_capfile(
|
|
%{
|
|
set :stage_config_path, "app/config/deploy"
|
|
set :deploy_config_path, "app/config/deploy.rb"
|
|
}
|
|
)
|
|
|
|
location = test_app_path.join(location)
|
|
FileUtils.mkdir_p(location)
|
|
FileUtils.mv(config_path, location)
|
|
end
|
|
|
|
end
|