fastlane-plugin-bugsnag 2.0.0 → 2.1.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
  SHA256:
3
- metadata.gz: 0f2f91641496dae26549b47215b4cf137e6c03d7307f38b491903a8505cb26c1
4
- data.tar.gz: eca880b9cd9aa3afaca45892e01ba63130fb29d069a40eb2f2a8fef98c5dee51
3
+ metadata.gz: cb02bbcd07f8414b53af7ca55a5f34f5ac8179277956fcb3844a51df3c0e876d
4
+ data.tar.gz: 730aba51c05865a47636d8238771dbbe877b06d31ea47b7027ef0b790857edfc
5
5
  SHA512:
6
- metadata.gz: 56875d0eb5b5d644030466ab85c80817524d953c3286593fdbc7c2d9db4e81d919f90d6875a40d6d4adce8d81846db0b85069fbf07cc470d927bc6530f4b2836
7
- data.tar.gz: 456b9b1d0ece3dcedd9302654ac25be698b075a44bb108c6c11257f6b8c4d23ebd4e6c641bccf41d40aaabf2d83c074a13d92ceca9647dfffbfb0e7c488f496b
6
+ metadata.gz: 78559861f0166bbd2289efb4680737fcc7f72a40c7f0453ddeea8579caa30f599733f21d3d69dd51029b8ffe876d52a12119ab6e67969d54b7fd42f296976323
7
+ data.tar.gz: 9b98fddce9e3f8cc31ca6d5ac077f29f8e5d464a1026ce67dca80bc70024efb06b9e3e90d3e2242e002721e4b47184c6983086d9c692ac490012b70cb2007d79
data/bugsnag-dsym-upload CHANGED
@@ -13,18 +13,22 @@
13
13
  function print_usage() {
14
14
  echo "Usage: $0 [--symbol-maps DIR] dSYMS_PATH"
15
15
  echo
16
- echo "-h, --help Displays this message"
17
- echo "-v, --verbose Print verbose logging output during execution"
18
- echo "--api-key API_KEY The API key of the project the dSYM should be applied to"
19
- echo "--symbol-maps DIR Path to a directory of bitcode symbol maps. The"
20
- echo " dSYM files will be restored with symbols prior to"
21
- echo " upload. Requires dsymutil."
22
- echo "--upload-server URL The server receiving dSYM files. Set this value if"
23
- echo " using an on-premise Bugsnag installation"
24
- echo "--project-root DIR The root directory of the project. This will help to"
25
- echo " group error reports by project"
26
- echo "dSYMS_PATH A directory or .zip file containing *.dSYM bundles to"
27
- echo " upload"
16
+ echo "-h, --help Displays this message"
17
+ echo "-v, --verbose Print verbose logging output during execution"
18
+ echo "--api-key API_KEY The API key of the project the dSYM should be applied to"
19
+ echo "--symbol-maps DIR Path to a directory of bitcode symbol maps. The"
20
+ echo " dSYM files will be restored with symbols prior to"
21
+ echo " upload. Requires dsymutil."
22
+ echo "--upload-server URL The server receiving dSYM files. Set this value if"
23
+ echo " using an on-premise Bugsnag installation"
24
+ echo "--project-root DIR The root directory of the project. This will help to"
25
+ echo " group error reports by project"
26
+ echo "--ignore-missing-dwarf Throw warnings instead of errors when a dSYM with missing"
27
+ echo " DWARF data is found"
28
+ echo "--ignore-empty-dsym Throw warnings instead of errors when a *.dSYM file is found"
29
+ echo " rather than the expected *.dSYM directory"
30
+ echo "dSYMS_PATH A directory or .zip file containing *.dSYM bundles to"
31
+ echo " upload"
28
32
  }
29
33
 
30
34
  function exit_with_usage() {
@@ -50,6 +54,8 @@ upload_server=https://upload.bugsnag.com
50
54
  unset symbol_maps
51
55
  unset dsym_dir
52
56
  unset verbose
57
+ unset ignore_empty_dsym
58
+ unset ignore_missing_dwarf
53
59
  unset silent
54
60
  unset project_root
55
61
  unset api_key
@@ -65,6 +71,12 @@ while [[ $# -gt 0 ]]; do
65
71
  -v|--verbose)
66
72
  verbose=1
67
73
  shift;;
74
+ --ignore-missing-dwarf)
75
+ ignore_missing_dwarf=1
76
+ shift;;
77
+ --ignore-empty-dsym)
78
+ ignore_empty_dsym=1
79
+ shift;;
68
80
  --symbol-maps)
69
81
  symbol_maps=$2
70
82
  shift
@@ -117,11 +129,27 @@ fi
117
129
 
118
130
  log_verbose "Uploading files to $upload_server"
119
131
  success_count=0
132
+ warning_count=0
120
133
  fail_count=0
121
134
 
122
- for dsym in $dsym_dir/*.dSYM; do
135
+ # Find all files and directories matching *.dSYM, except those in dir __MAXCOSX generated when using macOS Archive Utility
136
+ for dsym in $(find $dsym_dir -name "*.dSYM" ! -path "*/__MACOSX/*"); do
123
137
  log_verbose "Preparing to upload $dsym"
124
138
 
139
+ # check if the .dSYM is a file. Throw an error (warning if --ignore-empty-dsym set) if detected as such;
140
+ # it should be a directory. This can happen due to a bug in Xcode: https://developer.apple.com/forums/thread/659187
141
+ if [ -f $dsym ]; then
142
+ dsym_size=$(wc -c < "$dsym" | xargs)
143
+ if [[ $ignore_empty_dsym == 1 ]]; then
144
+ log "[WARNING] Skipping $dsym as it is a file ($dsym_size bytes), not a directory with DWARF data";
145
+ warning_count=$((warning_count+1))
146
+ else
147
+ log "[ERROR] Skipping $dsym as it is a file ($dsym_size bytes), not a directory with DWARF data";
148
+ fail_count=$((fail_count+1))
149
+ fi
150
+ continue
151
+ fi
152
+
125
153
  if [[ -d $symbol_maps ]]; then
126
154
  log_verbose "Updating file with bitcode symbol maps in $symbol_maps"
127
155
  dsymutil "$dsym" --symbol-map "$symbol_maps"
@@ -129,8 +157,13 @@ for dsym in $dsym_dir/*.dSYM; do
129
157
 
130
158
  dwarf_data=$dsym/Contents/Resources/DWARF
131
159
  if [[ ! -d $dwarf_data ]]; then
132
- log_verbose "Skipping file missing DWARF data: $dsym"
133
- fail_count=$((fail_count+1))
160
+ if [[ $ignore_missing_dwarf == 1 ]]; then
161
+ log "[WARNING] Skipping file missing DWARF data: $dsym"
162
+ warning_count=$((warning_count+1))
163
+ else
164
+ log "[ERROR] Skipping file missing DWARF data: $dsym"
165
+ fail_count=$((fail_count+1))
166
+ fi
134
167
  continue
135
168
  fi
136
169
  for file in $dwarf_data/*; do
@@ -150,29 +183,40 @@ for dsym in $dsym_dir/*.dSYM; do
150
183
 
151
184
  # We need to shell out to perform the curl as there seems to be some indirect
152
185
  # wrapping of this script which causes the command to fail if called directly.
153
- curl_cmd="curl --fail --silent --show-error --http1.1 $upload_server -F dsym=@\"$file\" $args"
186
+ curl_cmd="curl --fail --silent --show-error --http1.1 $upload_server -F 'dsym=@\"$file\"' $args"
154
187
  output=$(sh -c "$curl_cmd")
155
188
 
156
189
  if [ $? -eq 0 ] && [ "$output" != "invalid apiKey" ]; then
157
190
  success_count=$((success_count+1))
158
191
  else
159
192
  fail_count=$((fail_count+1))
160
- log_verbose "Failed to upload file: $file"
193
+ log "[ERROR] Failed to upload file: $file"
161
194
  fi
162
195
  echo $output | grep -v '^OK$'
163
196
  log
164
197
  else
165
- log_verbose "Skipping file without UUID: $file"
198
+ log "[ERROR] Skipping file without UUID: $file"
166
199
  fail_count=$((fail_count+1))
167
200
  fi
168
201
  done
169
202
  done
170
203
 
204
+ exit_code=0
171
205
  if [ $success_count -gt 0 ]; then
172
- log "$success_count files uploaded successfully"
206
+ log "$success_count file(s) uploaded successfully"
207
+ fi
208
+
209
+ if [ $warning_count -gt 0 ]; then
210
+ log "$warning_count file(s) failed to upload with warnings"
173
211
  fi
174
212
 
175
213
  if [ $fail_count -gt 0 ]; then
176
- log "$fail_count files failed to upload"
177
- exit 1
214
+ exit_code=1
215
+ log "$fail_count file(s) failed to upload with errors"
216
+ fi
217
+
218
+ if [[ $fail_count -gt 0 || $warning_count -gt 0 ]] && [[ $verbose != 1 ]]; then
219
+ log "Re-run the bugsnag-dsym-upload tool with the --verbose option for more information"
178
220
  fi
221
+
222
+ exit $exit_code
@@ -225,7 +225,7 @@ module Fastlane
225
225
  end
226
226
 
227
227
  def self.default_info_plist_path
228
- Dir.glob("./{ios/,}*/Info.plist").reject {|path| path =~ /build|test/i }.first
228
+ Dir.glob("./{ios/,}*/Info.plist").reject {|path| path =~ /build|test/i }.sort.first
229
229
  end
230
230
 
231
231
  def self.load_options_from_plist file_path
@@ -245,12 +245,12 @@ module Fastlane
245
245
  end
246
246
 
247
247
  def self.default_android_manifest_path
248
- Dir.glob("./{android/,}{app,}/src/main/AndroidManifest.xml").first
248
+ Dir.glob("./{android/,}{app,}/src/main/AndroidManifest.xml").sort.first
249
249
  end
250
250
 
251
251
  def self.load_options_from_xml file_path
252
252
  options = options_from_android_manifest(file_path)
253
- build_gradle_path = Dir.glob("{android/,}app/build.gradle").first || Dir.glob("build.gradle").first
253
+ build_gradle_path = Dir.glob("{android/,}app/build.gradle").sort.first || Dir.glob("build.gradle").sort.first
254
254
  options.merge!(options_from_build_gradle(build_gradle_path)) if build_gradle_path
255
255
  return options
256
256
  end
@@ -23,7 +23,7 @@ module Fastlane
23
23
 
24
24
  parse_dsym_paths(params[:dsym_path]).each do |dsym_path|
25
25
  if dsym_path.end_with?(".zip") or File.directory?(dsym_path)
26
- args = upload_args(dsym_path, params[:symbol_maps_path], params[:upload_url], params[:project_root], api_key, verbose)
26
+ args = upload_args(dsym_path, params[:symbol_maps_path], params[:upload_url], params[:project_root], api_key, verbose, params[:ignore_missing_dwarf], params[:ignore_empty_dsym])
27
27
  success = Kernel.system(UPLOAD_SCRIPT_PATH, *args)
28
28
  if success
29
29
  UI.success("Uploaded dSYMs in #{dsym_path}")
@@ -112,6 +112,18 @@ module Fastlane
112
112
  description: "Root path of the project",
113
113
  default_value: Dir::pwd,
114
114
  optional: true),
115
+ FastlaneCore::ConfigItem.new(key: :ignore_missing_dwarf,
116
+ env_name: "BUGSNAG_IGNORE_MISSING_DWARF",
117
+ description: "Throw warnings instead of errors when a dSYM with missing DWARF data is found",
118
+ optional: true,
119
+ default_value: false,
120
+ is_string: false),
121
+ FastlaneCore::ConfigItem.new(key: :ignore_empty_dsym,
122
+ env_name: "BUGSNAG_IGNORE_EMPTY_DSYM",
123
+ description: "Throw warnings instead of errors when a *.dSYM file is found rather than the expected *.dSYM directory",
124
+ optional: true,
125
+ default_value: false,
126
+ is_string: false),
115
127
  FastlaneCore::ConfigItem.new(key: :config_file,
116
128
  env_name: "BUGSNAG_CONFIG_FILE",
117
129
  description: "Info.plist location",
@@ -125,7 +137,7 @@ module Fastlane
125
137
  def self.default_info_plist_path
126
138
  # Find first 'Info.plist' in the current working directory
127
139
  # ignoring any in 'build', or 'test' folders
128
- return Dir.glob("./{ios/,}*/Info.plist").reject{|path| path =~ /build|test/i }.first
140
+ return Dir.glob("./{ios/,}*/Info.plist").reject{|path| path =~ /build|test/i }.sort.first
129
141
  end
130
142
 
131
143
  def self.options_from_info_plist file_path
@@ -143,8 +155,10 @@ module Fastlane
143
155
  }
144
156
  end
145
157
 
146
- def self.upload_args dir, symbol_maps_dir, upload_url, project_root, api_key, verbose
158
+ def self.upload_args dir, symbol_maps_dir, upload_url, project_root, api_key, verbose, ignore_missing_dwarf, ignore_empty_dsym
147
159
  args = [verbose ? "--verbose" : "--silent"]
160
+ args += ["--ignore-missing-dwarf"] if ignore_missing_dwarf
161
+ args += ["--ignore-empty-dsym"] if ignore_empty_dsym
148
162
  args += ["--api-key", api_key] unless api_key.nil?
149
163
  args += ["--upload-server", upload_url] unless upload_url.nil?
150
164
  args += ["--symbol-maps", symbol_maps_dir] unless symbol_maps_dir.nil?
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Bugsnag
3
- VERSION = "2.0.0"
3
+ VERSION = "2.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-bugsnag
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delisa Mason
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-13 00:00:00.000000000 Z
11
+ date: 2021-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xml-simple
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: parallel
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "<"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.20.0
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "<"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.20.0
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: fastlane
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +136,7 @@ dependencies:
122
136
  - - ">="
123
137
  - !ruby/object:Gem::Version
124
138
  version: 2.28.5
125
- description:
139
+ description:
126
140
  email: iskanamagus@gmail.com
127
141
  executables: []
128
142
  extensions: []
@@ -153,7 +167,7 @@ homepage: https://github.com/bugsnag/bugsnag-dsym-upload
153
167
  licenses:
154
168
  - MIT
155
169
  metadata: {}
156
- post_install_message:
170
+ post_install_message:
157
171
  rdoc_options: []
158
172
  require_paths:
159
173
  - lib
@@ -169,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
183
  version: '0'
170
184
  requirements: []
171
185
  rubygems_version: 3.0.3
172
- signing_key:
186
+ signing_key:
173
187
  specification_version: 4
174
188
  summary: Uploads dSYM files to Bugsnag
175
189
  test_files: