require 'newrelic_rpm' require 'new_relic/cli/command'

namespace :newrelic do

desc "Record a deployment in New Relic (newrelic.com)"
task :notice_deployment do
  set :newrelic_appname, fetch(:application)
  changelog = fetch :newrelic_changelog
  if changelog.nil? && fetch(:scm) == :git && !fetch(:previous_revision).nil?
    on primary(:app) do
      within repo_path do
        changelog = capture(:git, "--no-pager log --no-color --pretty=format:'* %an: %s' --abbrev-commit --no-merges #{fetch(:previous_revision)[/^.*$/]}..#{fetch(:current_revision)}")
      end
    end
  end

  run_locally do
    deploy_options = {
        :environment => fetch(:newrelic_env, fetch(:stage, fetch(:rack_env, fetch(:rails_env, fetch(:stage))))),
        :revision => ENV['NEWRELIC_REVISION'] || fetch(:newrelic_revision, fetch(:current_revision, release_timestamp.strip)),
        :description => fetch(:newrelic_desc),
        :user => fetch(:newrelic_deploy_user)
    }

    deploy_options[:changelog] = changelog unless changelog.nil?

    if deploy_options[:user].nil?
      case fetch(:scm)
        when :git
          git_user = capture('git config user.name', raise_on_non_zero_exit: false).strip
          deploy_options[:user] = git_user unless git_user.empty?
        else
          deploy_options[:user] = ENV['USER']
      end
    end

    debug "Uploading deployment to New Relic"
    begin
      deployment = NewRelic::Cli::Deployments.new deploy_options
      deployment.run
      info "Uploaded deployment information to New Relic"
    rescue => e
      error e
    end

  end
end

end