namespace :rocketdeploy do
task :collect_env do @data = { #local_user: fetch(:local_user), git_user: `git config user.name`, git_email: `git config user.email`, branch: fetch(:branch), commit_hash: fetch(:current_revision, "HEAD"), stage: fetch(:stage), environment: fetch(:rails_env), repo_url: fetch(:repo_url), hosts: [], } end task :notify_deploy_started => [:collect_env] do data = @data on roles(:app) do |host| host_url = "#{host&.user}.#{host&.hostname}" data[:hosts].push(host_url) end client = fetch(:rocketdeploy_client) r = client.deploy_started(@data) if r.nil? raise "response of rocketdeploy is nil" else @deploy_id = r['id'] end end task :notify_deploy_finished do client = fetch(:rocketdeploy_client) if @deploy_id.nil? puts "RocketDeploy: no deploy_id, cant report" else client.deploy_finished(@deploy_id) end end task :notify_deploy_failed do client = fetch(:rocketdeploy_client) if @deploy_id.nil? puts "RocketDeploy: no deploy_id, cant report" else client.deploy_failed(@deploy_id) end end puts "install rocketdeploy cap tasks" #before "deploy:check:directories", "rocketdeploy:notify_deploy_started" after "git:set_current_revision", "rocketdeploy:notify_deploy_started" after "deploy:finished", "rocketdeploy:notify_deploy_finished" before "deploy:failed", "rocketdeploy:notify_deploy_failed" before "deploy:reverted", "rocketdeploy:notify_deploy_failed"
end
namespace :load do
task :defaults do set(:rocketdeploy_client, -> { base_url = fetch(:rocketdeploy_server) || "https://rocketdeploy.ru/" token = fetch(:rocketdeploy_token) Capistrano::Rocketdeploy::Client.new(base_url, token) }) end
end