82 lines
2.2 KiB
Ruby
82 lines
2.2 KiB
Ruby
namespace :git do
|
|
|
|
def strategy
|
|
@strategy ||= Capistrano::Git.new(self, fetch(:git_strategy, Capistrano::Git::DefaultStrategy))
|
|
end
|
|
|
|
set :git_environmental_variables, ->() {
|
|
{
|
|
:git_askpass => "/bin/echo",
|
|
:git_ssh => "#{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh"
|
|
}
|
|
}
|
|
|
|
desc "Upload the git wrapper script, this script guarantees that we can script git without getting an interactive prompt"
|
|
task :wrapper do
|
|
on release_roles :all do
|
|
execute :mkdir, "-p", "#{fetch(:tmp_dir)}/#{fetch(:application)}/"
|
|
upload! StringIO.new("#!/bin/sh -e\nexec /usr/bin/ssh -o PasswordAuthentication=no -o StrictHostKeyChecking=no \"$@\"\n"), "#{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh"
|
|
execute :chmod, "+rx", "#{fetch(:tmp_dir)}/#{fetch(:application)}/git-ssh.sh"
|
|
end
|
|
end
|
|
|
|
desc "Check that the repository is reachable"
|
|
task :check => :'git:wrapper' do
|
|
fetch(:branch)
|
|
on release_roles :all do
|
|
with fetch(:git_environmental_variables) do
|
|
strategy.check
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "Clone the repo to the cache"
|
|
task :clone => :'git:wrapper' do
|
|
on release_roles :all do
|
|
if strategy.test
|
|
info t(:mirror_exists, :at => repo_path)
|
|
else
|
|
within deploy_path do
|
|
with fetch(:git_environmental_variables) do
|
|
strategy.clone
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "Update the repo mirror to reflect the origin state"
|
|
task :update => :'git:clone' do
|
|
on release_roles :all do
|
|
within repo_path do
|
|
with fetch(:git_environmental_variables) do
|
|
strategy.update
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "Copy repo to releases"
|
|
task :create_release => :'git:update' do
|
|
on release_roles :all do
|
|
with fetch(:git_environmental_variables) do
|
|
within repo_path do
|
|
execute :mkdir, "-p", release_path
|
|
strategy.release
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
desc "Determine the revision that will be deployed"
|
|
task :set_current_revision do
|
|
on release_roles :all do
|
|
within repo_path do
|
|
with fetch(:git_environmental_variables) do
|
|
set :current_revision, strategy.fetch_revision
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|