class Fastlane::Actions::UploadSymbolsToSentryAction

Public Class Methods

authors() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 126
def self.authors
  ["joshdholtz"]
end
available_options() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 77
def self.available_options
  [
    FastlaneCore::ConfigItem.new(key: :api_host,
                                 env_name: "SENTRY_HOST",
                                 description: "API host url for Sentry",
                                 default_value: "https://app.getsentry.com/api/0",
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :api_key,
                                 env_name: "SENTRY_API_KEY",
                                 description: "API key for Sentry",
                                 sensitive: true,
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :auth_token,
                                 env_name: "SENTRY_AUTH_TOKEN",
                                 description: "Authentication token for Sentry",
                                 sensitive: true,
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :org_slug,
                                 env_name: "SENTRY_ORG_SLUG",
                                 description: "Organization slug for Sentry project",
                                 verify_block: proc do |value|
                                   UI.user_error!("No organization slug for SentryAction given, pass using `org_slug: 'org'`") unless value && !value.empty?
                                 end),
    FastlaneCore::ConfigItem.new(key: :project_slug,
                                 env_name: "SENTRY_PROJECT_SLUG",
                                 description: "Project slug for Sentry",
                                 verify_block: proc do |value|
                                   UI.user_error!("No project slug for SentryAction given, pass using `project_slug: 'project'`") unless value && !value.empty?
                                 end),
    FastlaneCore::ConfigItem.new(key: :dsym_path,
                                 env_name: "SENTRY_DSYM_PATH",
                                 description: "Path to your symbols file. For iOS and Mac provide path to app.dSYM.zip",
                                 default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH],
                                 default_value_dynamic: true,
                                 optional: true),
    FastlaneCore::ConfigItem.new(key: :dsym_paths,
                                 env_name: "SENTRY_DSYM_PATHS",
                                 description: "Path to an array of your symbols file. For iOS and Mac provide path to app.dSYM.zip",
                                 default_value: Actions.lane_context[SharedValues::DSYM_PATHS],
                                 default_value_dynamic: true,
                                 type: Array,
                                 optional: true)
  ]
end
category() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 145
def self.category
  :deprecated
end
deprecated_notes() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 149
def self.deprecated_notes
  [
    "Please use the `sentry` plugin instead.",
    "Install using `fastlane add_plugin sentry`.",
    "Replace `upload_symbols_to_sentry(...)` with `sentry_upload_dsym(...)`."
  ].join("\n")
end
description() click to toggle source

@!group Documentation

# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 69
def self.description
  "Upload dSYM symbolication files to Sentry"
end
details() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 73
def self.details
  "This action allows you to upload symbolication files to Sentry. It's extra useful if you use it to download the latest dSYM files from Apple when you use Bitcode."
end
example_code() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 134
def self.example_code
  [
    'upload_symbols_to_sentry(
      auth_token: "...",
      org_slug: "...",
      project_slug: "...",
      dsym_path: "./App.dSYM.zip"
    )'
  ]
end
is_supported?(platform) click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 130
def self.is_supported?(platform)
  platform == :ios
end
return_value() click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 122
def self.return_value
  "The uploaded dSYM path(s)"
end
run(params) click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 4
def self.run(params)
  # Warning about usinging new plugin
  UI.important("It's recommended to use the official Sentry Fastlane plugin")
  UI.important("GitHub: https://github.com/getsentry/fastlane-plugin-sentry")
  UI.important("Installation: fastlane add_plugin sentry")

  Actions.verify_gem!('rest-client')
  require 'rest-client'

  # Params - API
  host = params[:api_host]
  api_key = params[:api_key]
  auth_token = params[:auth_token]
  org = params[:org_slug]
  project = params[:project_slug]

  # Params - dSYM
  dsym_path = params[:dsym_path]
  dsym_paths = params[:dsym_paths] || []

  has_api_key = !api_key.to_s.empty?
  has_auth_token = !auth_token.to_s.empty?

  # Will fail if none or both authentication methods are provided
  if !has_api_key && !has_auth_token
    UI.user_error!("No API key or authentication token found for SentryAction given, pass using `api_key: 'key'` or `auth_token: 'token'`")
  elsif has_api_key && has_auth_token
    UI.user_error!("Both API key and authentication token found for SentryAction given, please only give one")
  end

  # Url to post dSYMs to
  url = "#{host}/projects/#{org}/#{project}/files/dsyms/"

  if has_api_key
    resource = RestClient::Resource.new(url, api_key, '')
  else
    resource = RestClient::Resource.new(url, headers: { Authorization: "Bearer #{auth_token}" })
  end

  UI.message("Will upload dSYM(s) to #{url}")

  # Upload dsym(s)
  dsym_paths += [dsym_path]
  uploaded_paths = dsym_paths.compact.map do |dsym|
    upload_dsym(resource, dsym)
  end

  # Return uplaoded dSYM paths
  uploaded_paths
end
upload_dsym(resource, dsym) click to toggle source
# File fastlane/lib/fastlane/actions/upload_symbols_to_sentry.rb, line 55
def self.upload_dsym(resource, dsym)
  UI.message("Uploading... #{dsym}")
  resource.post(file: File.new(dsym, 'rb')) unless Helper.test?
  UI.success('dSYM successfully uploaded to Sentry!')

  dsym
rescue
  UI.user_error!('Error while trying to upload dSYM to Sentry')
end