namespace :fiesta do

desc "Generate a fiesta report and announce it"
task :run do
  if master_branch?
    invoke "fiesta:generate"
    invoke "fiesta:announce"
  end
end

desc "Generate a fiesta report"
task :generate do
  run_locally do
    set :fiesta_report, build_report
  end
end

desc "Announce a fiesta report"
task :announce do
  run_locally do
    report.announce(slack_params)
    Fiesta::Logger.logs.each { |log| warn log }
  end
end

def build_report
  Fiesta::Report.new(repo, report_options)
end

def repo
  Fiesta::RepoUrlParser.new(repo_url).repo
end

def report
  fetch(:fiesta_report)
end

def report_options
  {
    last_released_at: last_release,
    comment: fetch(:fiesta_comment),
    auto_compose: fetch(:fiesta_auto_compose)
  }
end

def last_release
  last_release = nil
  on roles(:web).first do
    last_release_path = capture("readlink #{current_path}")
    last_release = last_release_path.split("/").last
  end
  last_release
end

def master_branch?
  fetch(:branch) == "master"
end

def timestamp
  fetch(:release_timestamp)
end

def slack_params
  {
    webhook: fetch(:slack_webhook),
    payload: {
      channel: fetch(:fiesta_slack_channel) || "releases",
      username: fetch(:fiesta_slack_username) || "New Releases",
      icon_emoji: ":tada:"
    }
  }
end

end

before “deploy:starting”, “fiesta:generate” after “deploy:finished”, “fiesta:announce”