class Bugsnag::Capistrano::Release

Constants

DEFAULT_BUILD_ENDPOINT
DEFAULT_BUILD_TOOL_NAME
HEADERS

Public Class Methods

deliver(url, body) click to toggle source
# File lib/bugsnag-capistrano/release.rb, line 53
def self.deliver(url, body)
  begin
    request(url, body)
  rescue StandardError => e
    logger.warn("Notification to #{url} failed, #{e.inspect}")
    logger.warn(e.backtrace)
  end
end
logger() click to toggle source
# File lib/bugsnag-capistrano/release.rb, line 76
def self.logger
  if @logger.nil?
    @logger = Logger.new(STDOUT)
    @logger.level = Logger::INFO
  end
  @logger
end
notify(opts = {}) click to toggle source
# File lib/bugsnag-capistrano/release.rb, line 13
def self.notify(opts = {})
  # Try and get some config from Bugsnag
  begin
    require 'bugsnag'

    opts[:api_key] ||= Bugsnag.configuration.api_key
    opts[:app_version] ||= Bugsnag.configuration.app_version
    opts[:release_stage] ||= Bugsnag.configuration.release_stage
  rescue LoadError
  end

  opts[:endpoint] ||= DEFAULT_BUILD_ENDPOINT
  opts[:builder_name] ||= `whoami`
  opts[:build_tool] ||= DEFAULT_BUILD_TOOL_NAME

  parameters = {
    "apiKey" => opts[:api_key],
    "appVersion" => opts[:app_version],
    "autoAssignRelease" => opts[:auto_assign_release],
    "builderName" => opts[:builder_name],
    "buildTool" => opts[:build_tool],
    "metadata" => opts[:metadata],
    "releaseStage" => opts[:release_stage],
    "sourceControl" => {
      "provider" => opts[:source_control_provider],
      "revision" => opts[:revision],
      "repository" => opts[:repository]
    }
  }

  if parameters["apiKey"].nil?
    logger.warn("Cannot deliver notification. Missing required apiKey")
  elsif parameters["appVersion"].nil?
    logger.warn("Cannot deliver notification. Missing required appVersion")
  else
    payload_string = ::JSON.dump(parameters)
    self.deliver(opts[:endpoint], payload_string)
  end
end
request(url, body) click to toggle source
# File lib/bugsnag-capistrano/release.rb, line 62
def self.request(url, body)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.read_timeout = 15
  http.open_timeout = 15

  http.use_ssl = uri.scheme == "https"

  uri.path == "" ? "/" : uri.path
  request = Net::HTTP::Post.new(uri, HEADERS)
  request.body = body
  http.request(request)
end