require 'net/http' require 'yaml' require 'json'
namespace :deploy do
desc 'Registers a deployment with Raygun' task :raygun_register_deployment do required_options = [:raygun_api_key, :raygun_auth_token] required_options.each do |opt| if fetch(opt).nil? ask(opt, 'Required') end end run_locally do yaml = YAML::load_file(fetch(:raygun_release_path, 'RELEASE')) use_git = fetch(:scm) == :git && fetch(:use_git, true) git_hash = if use_git && system('git rev-parse --verify HEAD') `git rev-parse --verify HEAD` else "" end deployment = { 'apiKey' => fetch(:raygun_api_key), 'version' => yaml['version'], 'ownerName' => yaml['ownerName'], 'emailAddress' => yaml['emailAddress'], 'comment' => yaml['notes'], 'scmIdentifier' => git_hash, 'scmType' => fetch(:raygun_scm_type) || 'Github', 'createdAt' => yaml['createdAt'] } uri = URI.parse(fetch(:raygun_api_uri, "https://app.raygun.io")) deploymentEndpoint = "/deployments?authToken=#{fetch(:raygun_auth_token)}" http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = fetch(:raygun_use_ssl, true) http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Post.new(deploymentEndpoint) request.add_field('Content-Type', 'application/json') request.body = deployment.to_json res = http.request(request) case res when Net::HTTPSuccess # OK info "Sent deployment to Raygun" else raise "Error sending deployment to Raygun: " + res.value end end end after 'deploy:finished', :raygun_register_deployment
end