fastlane-plugin-sentry 0.1.2 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4e69a9ca0ab83f1dfb1a3945941d1cbdffe7fa3f
|
4
|
+
data.tar.gz: 788f571d8827f744c043d9a825ef967389fb5e9b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ddc48fe46dca0b22e1028037ca06a4933427341d8c9294be7e9f970dcad5ea5c0deb24289d12b72d7c874561bde820d6b680fbbcb9f3545890fe0db7f1dd6a51
|
7
|
+
data.tar.gz: e69f9e50393323765acb76d2cbaa50e88f4b24f43775a3da24303c1ec43e45fffd24e5a6fa5dac91f11e26da429558b68898550462b15479aab59c8ab162c80e
|
@@ -2,17 +2,14 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class SentryUploadDsymAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
|
6
|
-
require 'rest-client'
|
5
|
+
check_sentry_cli!
|
7
6
|
|
8
7
|
# Params - API
|
9
|
-
|
10
|
-
api_key = params[:api_key]
|
8
|
+
url = params[:url]
|
11
9
|
auth_token = params[:auth_token]
|
10
|
+
api_key = params[:api_key]
|
12
11
|
org = params[:org_slug]
|
13
12
|
project = params[:project_slug]
|
14
|
-
timeout = params[:timeout]
|
15
|
-
use_curl = params[:use_curl]
|
16
13
|
|
17
14
|
# Params - dSYM
|
18
15
|
dsym_path = params[:dsym_path]
|
@@ -26,82 +23,80 @@ module Fastlane
|
|
26
23
|
UI.user_error!("No API key or authentication token found for SentryAction given, pass using `api_key: 'key'` or `auth_token: 'token'`")
|
27
24
|
elsif has_api_key && has_auth_token
|
28
25
|
UI.user_error!("Both API key and authentication token found for SentryAction given, please only give one")
|
26
|
+
elsif has_api_key && !has_auth_token
|
27
|
+
UI.deprecated("Please consider switching to auth_token ... api_key will be removed in the future")
|
29
28
|
end
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
ENV['SENTRY_API_KEY'] = api_key unless api_key.to_s.empty?
|
31
|
+
ENV['SENTRY_AUTH_TOKEN'] = auth_token unless auth_token.to_s.empty?
|
32
|
+
ENV['SENTRY_URL'] = url unless url.to_s.empty?
|
33
|
+
ENV['SENTRY_LOG_LEVEL'] = 'info' if $verbose
|
35
34
|
|
36
35
|
# Verify dsym(s)
|
37
|
-
dsym_paths += [dsym_path]
|
36
|
+
dsym_paths += [dsym_path] unless dsym_path.nil?
|
38
37
|
dsym_paths = dsym_paths.map { |path| File.absolute_path(path) }
|
39
38
|
dsym_paths.each do |path|
|
40
39
|
UI.user_error!("dSYM does not exist at path: #{path}") unless File.exists? path
|
41
40
|
end
|
42
41
|
|
43
|
-
#
|
44
|
-
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
# Return uplaoded dSYM paths
|
49
|
-
uploaded_paths
|
42
|
+
UI.success("sentry-cli #{Fastlane::Sentry::CLI_VERSION} installed!")
|
43
|
+
call_sentry_cli(dsym_paths, org, project)
|
44
|
+
UI.success("Successfully uploaded dSYMs!")
|
50
45
|
end
|
51
46
|
|
52
|
-
def self.
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
has_api_key = !api_key.to_s.empty?
|
63
|
-
|
64
|
-
status = 0
|
65
|
-
if has_api_key
|
66
|
-
status = sh "curl -s -o /dev/null -w '%{response_code}' --max-time #{timeout} --user #{api_key}: -F file=@#{dsym} #{url} | grep -o '[1-4][0-9][0-9]' "
|
67
|
-
else
|
68
|
-
status = sh "curl -s -o /dev/null -w '%{response_code}' --max-time #{timeout} -H 'Authorization: Bearer #{auth_token}' -F file=@#{dsym} #{url} | grep -o '[1-4][0-9][0-9]' "
|
47
|
+
def self.check_sentry_cli!
|
48
|
+
if !`which sentry-cli`.include?('sentry-cli')
|
49
|
+
UI.error("You have to install sentry-cli version #{Fastlane::Sentry::CLI_VERSION} to use this plugin")
|
50
|
+
UI.error("")
|
51
|
+
UI.error("Install it using:")
|
52
|
+
UI.command("brew install getsentry/tools/sentry-cli")
|
53
|
+
UI.error("OR")
|
54
|
+
UI.command("curl -sL https://sentry.io/get-cli/ | bash")
|
55
|
+
UI.error("If you don't have homebrew, visit http://brew.sh")
|
56
|
+
UI.user_error!("Install sentry-cli and start your lane again!")
|
69
57
|
end
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
self.handle_error(nil, status)
|
58
|
+
|
59
|
+
sentry_cli_version = `sentry-cli --version`.gsub(/[^\d]/, '').to_i
|
60
|
+
required_version = Fastlane::Sentry::CLI_VERSION.gsub(/[^\d]/, '').to_i
|
61
|
+
if sentry_cli_version < required_version
|
62
|
+
UI.user_error!("Your sentry-cli is outdated, please upgrade to at least version #{Fastlane::Sentry::CLI_VERSION} and start your lane again!")
|
76
63
|
end
|
77
64
|
end
|
78
|
-
|
79
|
-
def self.
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
65
|
+
|
66
|
+
def self.call_sentry_cli(dsym_paths, org, project)
|
67
|
+
UI.message "Starting sentry-cli..."
|
68
|
+
require 'open3'
|
69
|
+
require 'shellwords'
|
70
|
+
org = Shellwords.escape(org)
|
71
|
+
project = Shellwords.escape(project)
|
72
|
+
error = []
|
73
|
+
Open3.popen3("sentry-cli upload-dsym '#{dsym_paths.join("','")}' --org #{org} --project #{project}") do |stdin, stdout, stderr, wait_thr|
|
74
|
+
while line = stderr.gets do
|
75
|
+
error << line.strip!
|
76
|
+
end
|
77
|
+
while line = stdout.gets do
|
78
|
+
UI.message(line.strip!)
|
79
|
+
end
|
80
|
+
exit_status = wait_thr.value
|
81
|
+
unless exit_status.success? && error.empty?
|
82
|
+
handle_error(error)
|
83
|
+
end
|
96
84
|
end
|
97
85
|
end
|
98
86
|
|
99
|
-
def self.handle_error(
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
87
|
+
def self.handle_error(errors)
|
88
|
+
fatal = false
|
89
|
+
for error in errors do
|
90
|
+
if error
|
91
|
+
if error.include?('[INFO]')
|
92
|
+
UI.verbose("#{error}")
|
93
|
+
else
|
94
|
+
UI.error("#{error}")
|
95
|
+
fatal = true
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
UI.user_error!('Error while trying to upload dSYM to Sentry') unless !fatal
|
105
100
|
end
|
106
101
|
|
107
102
|
#####################################################
|
@@ -122,21 +117,21 @@ module Fastlane
|
|
122
117
|
|
123
118
|
def self.available_options
|
124
119
|
[
|
125
|
-
FastlaneCore::ConfigItem.new(key: :
|
126
|
-
env_name: "
|
127
|
-
description: "
|
120
|
+
FastlaneCore::ConfigItem.new(key: :url,
|
121
|
+
env_name: "SENTRY_URL",
|
122
|
+
description: "Url for Sentry",
|
128
123
|
is_string: true,
|
129
124
|
default_value: "https://app.getsentry.com/api/0",
|
130
125
|
optional: true
|
131
126
|
),
|
132
|
-
FastlaneCore::ConfigItem.new(key: :api_key,
|
133
|
-
env_name: "SENTRY_API_KEY",
|
134
|
-
description: "API key for Sentry",
|
135
|
-
optional: true),
|
136
127
|
FastlaneCore::ConfigItem.new(key: :auth_token,
|
137
128
|
env_name: "SENTRY_AUTH_TOKEN",
|
138
129
|
description: "Authentication token for Sentry",
|
139
130
|
optional: true),
|
131
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
132
|
+
env_name: "SENTRY_API_KEY",
|
133
|
+
description: "API key for Sentry",
|
134
|
+
optional: true),
|
140
135
|
FastlaneCore::ConfigItem.new(key: :org_slug,
|
141
136
|
env_name: "SENTRY_ORG_SLUG",
|
142
137
|
description: "Organization slug for Sentry project",
|
@@ -145,7 +140,7 @@ module Fastlane
|
|
145
140
|
end),
|
146
141
|
FastlaneCore::ConfigItem.new(key: :project_slug,
|
147
142
|
env_name: "SENTRY_PROJECT_SLUG",
|
148
|
-
description: "
|
143
|
+
description: "Project slug for Sentry",
|
149
144
|
verify_block: proc do |value|
|
150
145
|
UI.user_error!("No project slug for SentryAction given, pass using `project_slug: 'project'`") unless value and !value.empty?
|
151
146
|
end),
|
@@ -163,33 +158,15 @@ module Fastlane
|
|
163
158
|
default_value: Actions.lane_context[SharedValues::DSYM_PATHS],
|
164
159
|
is_string: false,
|
165
160
|
optional: true,
|
166
|
-
verify_block: proc do |value|
|
167
|
-
# validation is done in the action
|
168
|
-
end),
|
169
|
-
FastlaneCore::ConfigItem.new(key: :timeout,
|
170
|
-
env_name: "SENTRY_TIMEOUT",
|
171
|
-
description: "Sentry upload API request timeout (in seconds)",
|
172
|
-
default_value: 120,
|
173
|
-
is_string: false,
|
174
|
-
optional: true,
|
175
|
-
verify_block: proc do |value|
|
176
|
-
# validation is done in the action
|
177
|
-
end),
|
178
|
-
FastlaneCore::ConfigItem.new(key: :use_curl,
|
179
|
-
env_name: "SENTRY_USE_CURL",
|
180
|
-
description: "Shells out the upload to `curl` instead of using `rest-client`. This MAY be needed for really large dSYM file sizes. Use this if you are receving timeouts",
|
181
|
-
default_value: false,
|
182
|
-
is_string: false,
|
183
|
-
optional: true,
|
184
161
|
verify_block: proc do |value|
|
185
162
|
# validation is done in the action
|
186
163
|
end)
|
187
|
-
|
164
|
+
|
188
165
|
]
|
189
166
|
end
|
190
167
|
|
191
168
|
def self.return_value
|
192
|
-
|
169
|
+
nil
|
193
170
|
end
|
194
171
|
|
195
172
|
def self.authors
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-sentry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Holtz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rest-client
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 1.6.7
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: 1.6.7
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: pry
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,9 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
98
|
version: '0'
|
113
99
|
requirements: []
|
114
100
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.5.
|
101
|
+
rubygems_version: 2.5.2
|
116
102
|
signing_key:
|
117
103
|
specification_version: 4
|
118
104
|
summary: Upload symbols to Sentry
|
119
105
|
test_files: []
|
120
|
-
has_rdoc:
|