require 'telegram/bot'
namespace :telegram do
set :telegram_bot_key, nil set :telegram_chat_id, nil set :telegram_deployer, -> { username = `git config --get user.name`.strip username = `whoami`.strip unless username username } set :telegram_stage, -> { stage = fetch(:stage) stage.to_s == 'production' ? ":warning: #{stage}" : stage } def send_to_telegram(message) puts "sending message" Telegram::Bot::Client.run(fetch(:telegram_bot_key)) do |bot| bot.api.send_message(chat_id: fetch(:telegram_chat_id), text: message) end end def telegram_start text = "Started deploying to #{fetch(:telegram_stage)} by #{fetch(:telegram_deployer)}" + " (branch #{fetch(:branch)}) at #{Time.now}" send_to_telegram(text) end def telegram_failure time = elapsed_time() text = "Failed deploying to #{fetch(:telegram_stage)} by #{fetch(:telegram_deployer)}" + " (branch #{fetch(:branch)} at #{fetch(:current_revision)} / #{Time.now} )" send_to_telegram(text) end def telegram_success task = fetch(:deploying) ? 'deployment' : '*rollback*' text = "Successful #{task} to #{fetch(:telegram_stage)} by #{fetch(:telegram_deployer)}" + " (branch #{fetch(:branch)} at #{fetch(:current_revision)} / #{Time.now} )" send_to_telegram(text) end namespace :deploy do desc 'Notify a deploy starting to Telegram' task :start do telegram_start end desc 'Notify a deploy finish to Telegram' task :finish do telegram_success end desc 'Notify a deploy rollback to Telegram' task :rollback do if (fetch(:deploying)) telegram_success else telegram_failure end end end
end