fastlane-plugin-sentry 1.36.0 → 2.0.0.pre.rc.2
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 +4 -4
- data/README.md +105 -55
- data/bin/sentry-cli-Darwin-universal +0 -0
- data/bin/sentry-cli-Linux-i686 +0 -0
- data/bin/sentry-cli-Linux-x86_64 +0 -0
- data/bin/sentry-cli-Windows-i686.exe +0 -0
- data/bin/sentry-cli-Windows-x86_64.exe +0 -0
- data/lib/fastlane/plugin/sentry/actions/sentry_create_release.rb +4 -0
- data/lib/fastlane/plugin/sentry/actions/sentry_debug_files_upload.rb +30 -34
- data/lib/fastlane/plugin/sentry/actions/sentry_finalize_release.rb +8 -0
- data/lib/fastlane/plugin/sentry/actions/sentry_set_commits.rb +13 -1
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_build.rb +18 -1
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_proguard.rb +28 -13
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_sourcemap.rb +86 -9
- data/lib/fastlane/plugin/sentry/helper/sentry_config.rb +4 -15
- data/lib/fastlane/plugin/sentry/helper/sentry_helper.rb +2 -1
- data/lib/fastlane/plugin/sentry/version.rb +1 -1
- metadata +4 -7
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_dif.rb +0 -167
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_dsym.rb +0 -93
- data/lib/fastlane/plugin/sentry/actions/sentry_upload_file.rb +0 -84
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9f919f1108badfed572f27376653c95d03a7762c8b71f08a66f7af7c2ef61879
|
|
4
|
+
data.tar.gz: 61a2a871df259b2272d284852fd5a9d8b1fd8e1e8ea5e98c6016c383f3873981
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ff423c97bf0994307249576df7c7376abac551fa24d778dfd5fba56bc0de9aa5541f046136dfa470dce7f95d69ec94b094998aa7f52c4fe347c2b1795d719ae0
|
|
7
|
+
data.tar.gz: 0e76c6b8f118e0e1d1acced3f8f35e182a076b1f09f38b4c4a3762c32f356c14ce769a780c13a46becfb83373f6494696c7c7b1d0092e1e0275252db8ae344ae
|
data/README.md
CHANGED
|
@@ -50,21 +50,19 @@ A subset of actions provided by the CLI: https://docs.sentry.io/learn/cli/
|
|
|
50
50
|
|
|
51
51
|
### Authentication & Configuration
|
|
52
52
|
|
|
53
|
-
`auth_token` is the
|
|
54
|
-
`api_key` still works but will eventually become deprecated. This can be obtained through the settings of your project.
|
|
53
|
+
`auth_token` is the authentication method with Sentry. This can be obtained on https://sentry.io/api/.
|
|
55
54
|
Also note that as of version `1.2.0` you no longer have to provide the required parameters, we will try to fallback to your `.sentryclirc` config file if possible.
|
|
56
55
|
|
|
57
|
-
The following environment variables may be used in place of parameters: `
|
|
56
|
+
The following environment variables may be used in place of parameters: `SENTRY_AUTH_TOKEN`, `SENTRY_ORG_SLUG`, and `SENTRY_PROJECT_SLUG`.
|
|
58
57
|
|
|
59
58
|
### Uploading Debug Information Files
|
|
60
59
|
|
|
61
60
|
```ruby
|
|
62
61
|
sentry_debug_files_upload(
|
|
63
|
-
|
|
64
|
-
auth_token: '...', # Do not use if using api_key
|
|
62
|
+
auth_token: '...',
|
|
65
63
|
org_slug: '...',
|
|
66
64
|
project_slug: '...',
|
|
67
|
-
path: '/path/to/files', # Optional. Defaults to
|
|
65
|
+
path: '/path/to/files', # Optional. Defaults to DSYM_OUTPUT_PATH from fastlane context if available, otherwise '.' (current directory). Path(s) can be a string, a comma-separated string, or an array of strings.
|
|
68
66
|
)
|
|
69
67
|
```
|
|
70
68
|
|
|
@@ -72,45 +70,20 @@ The `SENTRY_DSYM_PATH` environment variable may be used in place of the `dsym_pa
|
|
|
72
70
|
|
|
73
71
|
Further options:
|
|
74
72
|
|
|
75
|
-
- __type__: Optional. Only consider debug information files of the given type. By default, all types are considered. Valid options: 'dsym', 'elf', '
|
|
76
|
-
- __no_unwind__: Optional. Do not scan for stack unwinding information. Specify this flag for builds with disabled FPO, or when stackwalking occurs on the device. This usually excludes executables and dynamic libraries. They might still be uploaded, if they contain additional processable information (see other flags)
|
|
77
|
-
- __no_debug__: Optional. Do not scan for debugging information. This will usually exclude debug companion files. They might still be uploaded, if they contain additional processable information (see other flags)
|
|
78
|
-
- __no_sources__: Optional.
|
|
79
|
-
-
|
|
73
|
+
- __type__: Optional. Only consider debug information files of the given type. By default, all types are considered. Valid options: 'bcsymbolmap', 'breakpad', 'dsym', 'elf', 'jvm', 'pdb', 'pe', 'portablepdb', 'sourcebundle', 'wasm'.
|
|
74
|
+
- __no_unwind__: Optional. Do not scan for stack unwinding information. Specify this flag for builds with disabled FPO, or when stackwalking occurs on the device. This usually excludes executables and dynamic libraries. They might still be uploaded, if they contain additional processable information (see other flags).
|
|
75
|
+
- __no_debug__: Optional. Do not scan for debugging information. This will usually exclude debug companion files. They might still be uploaded, if they contain additional processable information (see other flags).
|
|
76
|
+
- __no_sources__: Optional. Do not scan for source information. This will usually exclude source bundle files. They might still be uploaded, if they contain additional processable information (see other flags).
|
|
77
|
+
- __id__: Optional. Search for specific debug identifiers.
|
|
80
78
|
- __require_all__: Optional. Errors if not all identifiers specified with --id could be found.
|
|
81
|
-
- __symbol_maps__: Optional.
|
|
79
|
+
- __symbol_maps__: Optional. Path to BCSymbolMap files which are used to resolve hidden symbols in dSYM files downloaded from iTunes Connect. This requires the dsymutil tool to be available.
|
|
82
80
|
- __derived_data__: Optional. Search for debug symbols in Xcode's derived data.
|
|
83
|
-
- __no_zips__: Do not search in ZIP files.
|
|
84
|
-
-
|
|
85
|
-
- __no_reprocessing__: Optional. Do not trigger reprocessing after uploading.
|
|
86
|
-
- __force_foreground__: Optional. __Deprecated NoOp since 1.26.0. Before v 1.26.0__: Wait for the process to finish. By default, the upload process will detach and continue in the background when triggered from Xcode. When an error happens, a dialog is shown. If this parameter is passed Xcode will wait for the process to finish before the build finishes and output will be shown in the Xcode build output.
|
|
81
|
+
- __no_zips__: Optional. Do not search in ZIP files.
|
|
82
|
+
- __no_upload__: Optional. Disable the actual upload. This runs all steps for the processing but does not trigger the upload. This is useful if you just want to verify the setup or skip the upload in tests.
|
|
87
83
|
- __include_sources__: Optional. Include sources from the local file system and upload them as source bundles.
|
|
88
|
-
- __wait__: Wait for the server to fully process uploaded files. Errors can only be displayed if --wait is specified, but this will significantly slow down the upload process.
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
Or the deprecated ways, which will be removed in the next major update:
|
|
92
|
-
|
|
93
|
-
```ruby
|
|
94
|
-
sentry_upload_dif(
|
|
95
|
-
api_key: '...', # Do not use if using auth_token
|
|
96
|
-
auth_token: '...', # Do not use if using api_key
|
|
97
|
-
org_slug: '...',
|
|
98
|
-
project_slug: '...',
|
|
99
|
-
path: '/path/to/files', # Optional. Defaults to '.' when no value is provided. Path(s) can be a string, a comma-separated string, or an array of strings.
|
|
100
|
-
)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
```ruby
|
|
104
|
-
sentry_upload_dsym(
|
|
105
|
-
api_key: '...', # Do not use if using auth_token
|
|
106
|
-
auth_token: '...', # Do not use if using api_key
|
|
107
|
-
org_slug: '...',
|
|
108
|
-
project_slug: '...',
|
|
109
|
-
symbol_maps: 'path to bcsymbols folder', # use this if you have a bcsymbols folder
|
|
110
|
-
dsym_path: './App.dSYM.zip',
|
|
111
|
-
info_plist: '...' # optional, sentry-cli tries to find the correct plist by itself
|
|
112
|
-
)
|
|
113
|
-
```
|
|
84
|
+
- __wait__: Optional. Wait for the server to fully process uploaded files. Errors can only be displayed if --wait or --wait-for is specified, but this will significantly slow down the upload process.
|
|
85
|
+
- __wait_for__: Optional. Wait for the server to fully process uploaded files, but at most for the given number of seconds. Errors can only be displayed if --wait or --wait-for is specified, but this will significantly slow down the upload process.
|
|
86
|
+
- __il2cpp_mapping__: Optional. Compute il2cpp line mappings and upload them along with sources.
|
|
114
87
|
|
|
115
88
|
### Uploading iOS Build Archives
|
|
116
89
|
|
|
@@ -118,8 +91,7 @@ Upload iOS build archives (.xcarchive) to Sentry for improved symbolication and
|
|
|
118
91
|
|
|
119
92
|
```ruby
|
|
120
93
|
sentry_upload_build(
|
|
121
|
-
|
|
122
|
-
auth_token: '...', # Do not use if using api_key
|
|
94
|
+
auth_token: '...',
|
|
123
95
|
org_slug: '...',
|
|
124
96
|
project_slug: '...',
|
|
125
97
|
xcarchive_path: './build/MyApp.xcarchive', # Path to your .xcarchive file
|
|
@@ -132,7 +104,10 @@ sentry_upload_build(
|
|
|
132
104
|
head_ref: 'feature-branch', # Name of the head branch (or SENTRY_HEAD_REF)
|
|
133
105
|
base_ref: 'main', # Name of the base branch (or SENTRY_BASE_REF)
|
|
134
106
|
pr_number: '123', # Pull request number (or SENTRY_PR_NUMBER)
|
|
135
|
-
build_configuration: 'Release' # Build configuration (e.g., 'Release', 'Debug') (or SENTRY_BUILD_CONFIGURATION)
|
|
107
|
+
build_configuration: 'Release', # Build configuration (e.g., 'Release', 'Debug') (or SENTRY_BUILD_CONFIGURATION)
|
|
108
|
+
release_notes: 'Fixed critical bugs', # Optional. Release notes to use for the upload
|
|
109
|
+
force_git_metadata: false, # Optional. Force collection and sending of git metadata
|
|
110
|
+
no_git_metadata: false # Optional. Disable collection and sending of git metadata
|
|
136
111
|
)
|
|
137
112
|
```
|
|
138
113
|
|
|
@@ -144,13 +119,13 @@ This action is only supported on iOS platform.
|
|
|
144
119
|
|
|
145
120
|
```ruby
|
|
146
121
|
sentry_create_release(
|
|
147
|
-
api_key: '...',
|
|
148
122
|
auth_token: '...',
|
|
149
123
|
org_slug: '...',
|
|
150
124
|
project_slug: '...',
|
|
151
125
|
version: '...', # release version to create
|
|
152
126
|
app_identifier: '...', # pass in the bundle_identifer of your app
|
|
153
|
-
finalize: true # Whether to finalize the release. If not provided or false, the release can be finalized using the sentry_finalize_release action
|
|
127
|
+
finalize: true, # Whether to finalize the release. If not provided or false, the release can be finalized using the sentry_finalize_release action
|
|
128
|
+
release_url: 'https://github.com/owner/repo/releases/tag/v1.0.0' # Optional. URL to the release for information purposes
|
|
154
129
|
)
|
|
155
130
|
```
|
|
156
131
|
|
|
@@ -160,7 +135,6 @@ Useful for uploading build artifacts and JS sourcemaps for react-native apps bui
|
|
|
160
135
|
|
|
161
136
|
```ruby
|
|
162
137
|
sentry_upload_sourcemap(
|
|
163
|
-
api_key: '...',
|
|
164
138
|
auth_token: '...',
|
|
165
139
|
org_slug: '...',
|
|
166
140
|
project_slug: '...',
|
|
@@ -169,7 +143,15 @@ sentry_upload_sourcemap(
|
|
|
169
143
|
build: '...', # Optionally pass in the build number of your app
|
|
170
144
|
dist: '...', # optional distribution of the release usually the buildnumber
|
|
171
145
|
sourcemap: ['main.jsbundle', 'main.jsbundle.map'], # Sourcemap(s) to upload. Path(s) can be a comma-separated string or an array of strings.
|
|
172
|
-
rewrite: true
|
|
146
|
+
rewrite: true, # Rewrite the sourcemaps before upload (default: false)
|
|
147
|
+
url_prefix: '~/', # Optional. Sets a URL prefix in front of all files
|
|
148
|
+
url_suffix: '.map', # Optional. Sets a URL suffix to append to all filenames
|
|
149
|
+
note: 'Build from CI', # Optional. Adds a note to the uploaded artifact bundle
|
|
150
|
+
validate: true, # Optional. Enable basic sourcemap validation
|
|
151
|
+
decompress: true, # Optional. Enable files gzip decompression prior to upload
|
|
152
|
+
wait: true, # Optional. Wait for the server to fully process uploaded files
|
|
153
|
+
wait_for: 60, # Optional. Wait for the server to fully process uploaded files, but at most for the given number of seconds
|
|
154
|
+
strict: true # Optional. Fail with a non-zero exit code if the specified source map file cannot be uploaded
|
|
173
155
|
)
|
|
174
156
|
```
|
|
175
157
|
|
|
@@ -177,12 +159,14 @@ sentry_upload_sourcemap(
|
|
|
177
159
|
|
|
178
160
|
```ruby
|
|
179
161
|
sentry_upload_proguard(
|
|
180
|
-
|
|
181
|
-
auth_token: '...', # Do not use if using api_key
|
|
162
|
+
auth_token: '...',
|
|
182
163
|
org_slug: '...',
|
|
183
164
|
project_slug: '...',
|
|
184
|
-
android_manifest_path: 'path to merged AndroidManifest file', # found in `app/build/intermediates/manifests/full`
|
|
185
165
|
mapping_path: 'path to mapping.txt to upload',
|
|
166
|
+
no_upload: false, # Optional. Disable the actual upload (useful for verification)
|
|
167
|
+
write_properties: 'path/to/properties/file', # Optional. Write UUIDs for processed mapping files into properties file
|
|
168
|
+
require_one: true, # Optional. Require at least one file to upload or the command will error
|
|
169
|
+
uuid: 'custom-uuid' # Optional. Explicitly override the UUID of the mapping file
|
|
186
170
|
)
|
|
187
171
|
```
|
|
188
172
|
|
|
@@ -198,7 +182,9 @@ sentry_set_commits(
|
|
|
198
182
|
auto: false, # enable completely automated commit management
|
|
199
183
|
clear: false, # clear all current commits from the release
|
|
200
184
|
commit: '...', # commit spec, see `sentry-cli releases help set-commits` for more information
|
|
201
|
-
ignore_missing: false # Optional boolean value: When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count (or the one specified with `--initial-depth`) instead of failing the command.
|
|
185
|
+
ignore_missing: false, # Optional boolean value: When the flag is set and the previous release commit was not found in the repository, will create a release with the default commits count (or the one specified with `--initial-depth`) instead of failing the command.
|
|
186
|
+
local: false, # Optional. Set commits of a release from local git
|
|
187
|
+
initial_depth: 20 # Optional. Set the number of commits of the initial release (default: 20)
|
|
202
188
|
)
|
|
203
189
|
```
|
|
204
190
|
|
|
@@ -208,8 +194,7 @@ Creates a new release deployment for a project on Sentry.
|
|
|
208
194
|
|
|
209
195
|
```ruby
|
|
210
196
|
sentry_create_deploy(
|
|
211
|
-
|
|
212
|
-
auth_token: '...', # Do not use if using api_key
|
|
197
|
+
auth_token: '...',
|
|
213
198
|
org_slug: '...',
|
|
214
199
|
project_slug: '...',
|
|
215
200
|
version: '...',
|
|
@@ -244,6 +229,71 @@ You can set the `sentry-cli` [configuration value](https://docs.sentry.io/produc
|
|
|
244
229
|
|
|
245
230
|
For any other issues and feedback about this plugin, please submit it to this repository.
|
|
246
231
|
|
|
232
|
+
## Migration Guide
|
|
233
|
+
|
|
234
|
+
### Migrating from sentry-fastlane-plugin v1 to v2
|
|
235
|
+
|
|
236
|
+
When upgrading to the latest version of this plugin (which uses sentry-cli v3), you may need to update your Fastfiles. Here are the key changes:
|
|
237
|
+
|
|
238
|
+
#### Parameter Name Changes
|
|
239
|
+
|
|
240
|
+
- **`sentry_debug_files_upload`**: The `ids` parameter has been renamed to `id` (singular). Update your Fastfiles:
|
|
241
|
+
```ruby
|
|
242
|
+
# Before
|
|
243
|
+
sentry_debug_files_upload(ids: 'abc123')
|
|
244
|
+
|
|
245
|
+
# After
|
|
246
|
+
sentry_debug_files_upload(id: 'abc123')
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
#### Authentication Changes
|
|
250
|
+
|
|
251
|
+
- **All actions**: The `api_key` parameter has been removed in favor of `auth_token` with the release of [v2.0.0](https://github.com/getsentry/sentry-fastlane-plugin/releases/2.0.0-rc.1). All actions now require `auth_token` for authentication. Update your Fastfiles:
|
|
252
|
+
```ruby
|
|
253
|
+
# Before v2.0.0-rc.1
|
|
254
|
+
sentry_debug_files_upload(api_key: '...')
|
|
255
|
+
|
|
256
|
+
# After v2.0.0-rc.1
|
|
257
|
+
sentry_debug_files_upload(auth_token: '...')
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
#### Parameter Behavior Changes
|
|
261
|
+
|
|
262
|
+
- **`sentry_debug_files_upload`**: The `path` parameter default behavior has changed. Starting with [v2.0.0-rc.1](https://github.com/getsentry/sentry-fastlane-plugin/releases/v2.0.0-rc.1) it defaults to `DSYM_OUTPUT_PATH` from fastlane's lane context if available (set by actions like `build_app` or `ipa`), otherwise falls back to `'.'` (current directory). This changes the default behavior when `DSYM_OUTPUT_PATH` is set. If you were relying on the previous behavior of always searching from the current directory, explicitly specify `path: '.'`:
|
|
263
|
+
```ruby
|
|
264
|
+
# To maintain previous behavior (always search from current directory)
|
|
265
|
+
sentry_debug_files_upload(path: '.')
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
#### Removed Parameters
|
|
269
|
+
|
|
270
|
+
The following parameters have been removed as they are no longer supported in sentry-cli v3:
|
|
271
|
+
|
|
272
|
+
- **`sentry_debug_files_upload`**: Remove `info_plist`, `no_reprocessing`, `upload_symbol_maps`, and `force_foreground` parameters if you're using them. The `force_foreground` parameter was deprecated as a no-op since v1.26.0 and has now been removed.
|
|
273
|
+
- **`sentry_upload_proguard`**: Remove `android_manifest_path` parameter if you're using it (no longer needed).
|
|
274
|
+
|
|
275
|
+
#### New Available Options
|
|
276
|
+
|
|
277
|
+
Many new options have been added to match sentry-cli v3 capabilities. See the action documentation above for all available options. Some notable additions:
|
|
278
|
+
|
|
279
|
+
- **`sentry_debug_files_upload`**: Added `wait_for`, `no_upload`, `il2cpp_mapping` options. Type validation now includes `jvm`, `portablepdb`, and `wasm`.
|
|
280
|
+
- **`sentry_upload_sourcemap`**: Added `url_suffix`, `note`, `validate`, `decompress`, `wait`, `wait_for`, `no_sourcemap_reference`, `debug_id_reference`, `bundle`, `bundle_sourcemap`, `ext`, and `strict` options.
|
|
281
|
+
- **`sentry_upload_proguard`**: Added `no_upload`, `write_properties`, `require_one`, and `uuid` options.
|
|
282
|
+
- **`sentry_upload_build`**: Added `release_notes`, `force_git_metadata`, and `no_git_metadata` options.
|
|
283
|
+
- **`sentry_create_release`**: Added `release_url` option.
|
|
284
|
+
- **`sentry_finalize_release`**: Added `release_url` and `released` options.
|
|
285
|
+
- **`sentry_set_commits`**: Added `local` and `initial_depth` options.
|
|
286
|
+
|
|
287
|
+
#### Removed Actions
|
|
288
|
+
|
|
289
|
+
The following actions have been removed and replaced:
|
|
290
|
+
|
|
291
|
+
- **`sentry_upload_file`**: Use `sentry_upload_sourcemap` for source maps or other specialized upload actions.
|
|
292
|
+
- **`sentry_upload_dsym`**: Use `sentry_debug_files_upload` with appropriate `path` parameter.
|
|
293
|
+
- **`sentry_upload_dif`**: Use `sentry_debug_files_upload` with appropriate `path` parameter.
|
|
294
|
+
|
|
295
|
+
For more details on sentry-cli v3 changes, see the [sentry-cli 3.0.0 release notes](https://github.com/getsentry/sentry-cli/releases/tag/3.0.0).
|
|
296
|
+
|
|
247
297
|
## Troubleshooting
|
|
248
298
|
|
|
249
299
|
For some more detailed help with plugins problems, check out the [Plugins Troubleshooting](https://github.com/fastlane/fastlane/blob/master/fastlane/docs/PluginsTroubleshooting.md) doc in the main `fastlane` repo.
|
|
Binary file
|
data/bin/sentry-cli-Linux-i686
CHANGED
|
Binary file
|
data/bin/sentry-cli-Linux-x86_64
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -16,6 +16,7 @@ module Fastlane
|
|
|
16
16
|
version
|
|
17
17
|
]
|
|
18
18
|
command.push("--finalize") if params[:finalize] == true
|
|
19
|
+
command.push("--url").push(params[:release_url]) unless params[:release_url].nil?
|
|
19
20
|
|
|
20
21
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
21
22
|
UI.success("Successfully created release: #{version}")
|
|
@@ -53,6 +54,9 @@ module Fastlane
|
|
|
53
54
|
description: "Whether to finalize the release. If not provided or false, the release can be finalized using the finalize_release action",
|
|
54
55
|
default_value: false,
|
|
55
56
|
is_string: false,
|
|
57
|
+
optional: true),
|
|
58
|
+
FastlaneCore::ConfigItem.new(key: :release_url,
|
|
59
|
+
description: "Optional URL to the release for information purposes",
|
|
56
60
|
optional: true)
|
|
57
61
|
]
|
|
58
62
|
end
|
|
@@ -7,7 +7,15 @@ module Fastlane
|
|
|
7
7
|
Helper::SentryConfig.parse_api_params(params)
|
|
8
8
|
|
|
9
9
|
paths = params[:path]
|
|
10
|
-
|
|
10
|
+
# Use DSYM_OUTPUT_PATH from fastlane context if available, otherwise default to current directory
|
|
11
|
+
if paths.nil?
|
|
12
|
+
dsym_path = Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]
|
|
13
|
+
if dsym_path && !dsym_path.to_s.empty?
|
|
14
|
+
paths = [dsym_path]
|
|
15
|
+
else
|
|
16
|
+
paths = ['.']
|
|
17
|
+
end
|
|
18
|
+
end
|
|
11
19
|
|
|
12
20
|
command = [
|
|
13
21
|
"debug-files",
|
|
@@ -19,17 +27,16 @@ module Fastlane
|
|
|
19
27
|
command.push('--no-unwind') unless params[:no_unwind].nil?
|
|
20
28
|
command.push('--no-debug') unless params[:no_debug].nil?
|
|
21
29
|
command.push('--no-sources') unless params[:no_sources].nil?
|
|
22
|
-
command.push('--
|
|
30
|
+
command.push('--id').push(params[:id]) unless params[:id].nil?
|
|
23
31
|
command.push('--require-all') unless params[:require_all].nil?
|
|
24
32
|
command.push('--symbol-maps').push(params[:symbol_maps]) unless params[:symbol_maps].nil?
|
|
25
33
|
command.push('--derived-data') unless params[:derived_data].nil?
|
|
26
34
|
command.push('--no-zips') unless params[:no_zips].nil?
|
|
27
|
-
command.push('--
|
|
28
|
-
command.push('--
|
|
29
|
-
command.push('--force-foreground') unless params[:force_foreground].nil?
|
|
30
|
-
command.push('--include-sources') unless params[:include_sources] != true
|
|
35
|
+
command.push('--no-upload') unless params[:no_upload].nil?
|
|
36
|
+
command.push('--include-sources') if params[:include_sources] == true
|
|
31
37
|
command.push('--wait') unless params[:wait].nil?
|
|
32
|
-
command.push('--
|
|
38
|
+
command.push('--wait-for').push(params[:wait_for]) unless params[:wait_for].nil?
|
|
39
|
+
command.push('--il2cpp-mapping') unless params[:il2cpp_mapping].nil?
|
|
33
40
|
|
|
34
41
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
35
42
|
UI.success("Successfully ran debug-files upload")
|
|
@@ -53,7 +60,7 @@ module Fastlane
|
|
|
53
60
|
def self.available_options
|
|
54
61
|
Helper::SentryConfig.common_api_config_items + [
|
|
55
62
|
FastlaneCore::ConfigItem.new(key: :path,
|
|
56
|
-
description: "Path or an array of paths to search recursively for symbol files",
|
|
63
|
+
description: "Path or an array of paths to search recursively for symbol files. Defaults to DSYM_OUTPUT_PATH from fastlane context if available, otherwise '.' (current directory)",
|
|
57
64
|
type: Array,
|
|
58
65
|
optional: true),
|
|
59
66
|
FastlaneCore::ConfigItem.new(key: :type,
|
|
@@ -62,7 +69,7 @@ module Fastlane
|
|
|
62
69
|
type. By default, all types are considered",
|
|
63
70
|
optional: true,
|
|
64
71
|
verify_block: proc do |value|
|
|
65
|
-
UI.user_error! "Invalid value '#{value}'" unless ['dsym', 'elf', '
|
|
72
|
+
UI.user_error! "Invalid value '#{value}'" unless ['bcsymbolmap', 'breakpad', 'dsym', 'elf', 'jvm', 'pdb', 'pe', 'portablepdb', 'sourcebundle', 'wasm'].include? value
|
|
66
73
|
end),
|
|
67
74
|
FastlaneCore::ConfigItem.new(key: :no_unwind,
|
|
68
75
|
description: "Do not scan for stack unwinding information. Specify \
|
|
@@ -88,7 +95,7 @@ module Fastlane
|
|
|
88
95
|
processable information (see other flags)",
|
|
89
96
|
is_string: false,
|
|
90
97
|
optional: true),
|
|
91
|
-
FastlaneCore::ConfigItem.new(key: :
|
|
98
|
+
FastlaneCore::ConfigItem.new(key: :id,
|
|
92
99
|
description: "Search for specific debug identifiers",
|
|
93
100
|
optional: true),
|
|
94
101
|
FastlaneCore::ConfigItem.new(key: :require_all,
|
|
@@ -109,24 +116,10 @@ module Fastlane
|
|
|
109
116
|
description: "Do not search in ZIP files",
|
|
110
117
|
is_string: false,
|
|
111
118
|
optional: true),
|
|
112
|
-
FastlaneCore::ConfigItem.new(key: :
|
|
113
|
-
description: "
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
and build in Sentry. Note that if you provide the plist \
|
|
117
|
-
explicitly it must already be processed",
|
|
118
|
-
optional: true),
|
|
119
|
-
FastlaneCore::ConfigItem.new(key: :no_reprocessing,
|
|
120
|
-
description: "Do not trigger reprocessing after uploading",
|
|
121
|
-
is_string: false,
|
|
122
|
-
optional: true),
|
|
123
|
-
FastlaneCore::ConfigItem.new(key: :force_foreground,
|
|
124
|
-
description: "Wait for the process to finish.{n}\
|
|
125
|
-
By default, the upload process will detach and continue in the \
|
|
126
|
-
background when triggered from Xcode. When an error happens, \
|
|
127
|
-
a dialog is shown. If this parameter is passed Xcode will wait \
|
|
128
|
-
for the process to finish before the build finishes and output \
|
|
129
|
-
will be shown in the Xcode build output",
|
|
119
|
+
FastlaneCore::ConfigItem.new(key: :no_upload,
|
|
120
|
+
description: "Disable the actual upload. This runs all steps for the \
|
|
121
|
+
processing but does not trigger the upload. This is useful if \
|
|
122
|
+
you just want to verify the setup or skip the upload in tests",
|
|
130
123
|
is_string: false,
|
|
131
124
|
optional: true),
|
|
132
125
|
FastlaneCore::ConfigItem.new(key: :include_sources,
|
|
@@ -136,15 +129,18 @@ module Fastlane
|
|
|
136
129
|
optional: true),
|
|
137
130
|
FastlaneCore::ConfigItem.new(key: :wait,
|
|
138
131
|
description: "Wait for the server to fully process uploaded files. Errors \
|
|
139
|
-
can only be displayed if --wait is specified, but this will \
|
|
132
|
+
can only be displayed if --wait or --wait-for is specified, but this will \
|
|
140
133
|
significantly slow down the upload process",
|
|
141
134
|
is_string: false,
|
|
142
135
|
optional: true),
|
|
143
|
-
FastlaneCore::ConfigItem.new(key: :
|
|
144
|
-
description: "
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
136
|
+
FastlaneCore::ConfigItem.new(key: :wait_for,
|
|
137
|
+
description: "Wait for the server to fully process uploaded files, but at most \
|
|
138
|
+
for the given number of seconds. Errors can only be displayed if --wait or \
|
|
139
|
+
--wait-for is specified, but this will significantly slow down the upload process",
|
|
140
|
+
type: Integer,
|
|
141
|
+
optional: true),
|
|
142
|
+
FastlaneCore::ConfigItem.new(key: :il2cpp_mapping,
|
|
143
|
+
description: "Compute il2cpp line mappings and upload them along with sources",
|
|
148
144
|
is_string: false,
|
|
149
145
|
optional: true)
|
|
150
146
|
]
|
|
@@ -15,6 +15,8 @@ module Fastlane
|
|
|
15
15
|
"finalize",
|
|
16
16
|
version
|
|
17
17
|
]
|
|
18
|
+
command.push("--url").push(params[:release_url]) unless params[:release_url].nil?
|
|
19
|
+
command.push("--released").push(params[:released]) unless params[:released].nil?
|
|
18
20
|
|
|
19
21
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
20
22
|
UI.success("Successfully finalized release: #{version}")
|
|
@@ -47,6 +49,12 @@ module Fastlane
|
|
|
47
49
|
FastlaneCore::ConfigItem.new(key: :build,
|
|
48
50
|
short_option: "-b",
|
|
49
51
|
description: "Release build to finalize on Sentry",
|
|
52
|
+
optional: true),
|
|
53
|
+
FastlaneCore::ConfigItem.new(key: :release_url,
|
|
54
|
+
description: "Optional URL to the release for information purposes",
|
|
55
|
+
optional: true),
|
|
56
|
+
FastlaneCore::ConfigItem.new(key: :released,
|
|
57
|
+
description: "Set the release time. Defaults to the current time if not provided",
|
|
50
58
|
optional: true)
|
|
51
59
|
]
|
|
52
60
|
end
|
|
@@ -19,6 +19,8 @@ module Fastlane
|
|
|
19
19
|
command.push('--auto') if params[:auto]
|
|
20
20
|
command.push('--clear') if params[:clear]
|
|
21
21
|
command.push('--ignore-missing') if params[:ignore_missing]
|
|
22
|
+
command.push('--local') if params[:local]
|
|
23
|
+
command.push('--initial-depth').push(params[:initial_depth]) unless params[:initial_depth].nil?
|
|
22
24
|
command.push('--commit').push(params[:commit]) unless params[:commit].nil?
|
|
23
25
|
|
|
24
26
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
@@ -67,7 +69,17 @@ module Fastlane
|
|
|
67
69
|
FastlaneCore::ConfigItem.new(key: :ignore_missing,
|
|
68
70
|
description: "When enabled, if the previous release commit was not found in the repository, will create a release with the default commits count (or the one specified with `--initial-depth`) instead of failing the command",
|
|
69
71
|
is_string: false,
|
|
70
|
-
default_value: false)
|
|
72
|
+
default_value: false),
|
|
73
|
+
FastlaneCore::ConfigItem.new(key: :local,
|
|
74
|
+
description: "Set commits of a release from local git. This requires that the command \
|
|
75
|
+
is run from within a git repository. sentry-cli will then automatically find \
|
|
76
|
+
remotely configured repositories and discover commits",
|
|
77
|
+
is_string: false,
|
|
78
|
+
optional: true),
|
|
79
|
+
FastlaneCore::ConfigItem.new(key: :initial_depth,
|
|
80
|
+
description: "Set the number of commits of the initial release. The default is 20",
|
|
81
|
+
type: Integer,
|
|
82
|
+
optional: true)
|
|
71
83
|
]
|
|
72
84
|
end
|
|
73
85
|
|
|
@@ -25,6 +25,9 @@ module Fastlane
|
|
|
25
25
|
command << "--base-ref" << params[:base_ref] if params[:base_ref]
|
|
26
26
|
command << "--pr-number" << params[:pr_number] if params[:pr_number]
|
|
27
27
|
command << "--build-configuration" << params[:build_configuration] if params[:build_configuration]
|
|
28
|
+
command << "--release-notes" << params[:release_notes] if params[:release_notes]
|
|
29
|
+
command << "--force-git-metadata" if params[:force_git_metadata]
|
|
30
|
+
command << "--no-git-metadata" if params[:no_git_metadata]
|
|
28
31
|
|
|
29
32
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
30
33
|
UI.success("Successfully uploaded build archive: #{xcarchive_path}")
|
|
@@ -95,7 +98,21 @@ module Fastlane
|
|
|
95
98
|
env_name: "SENTRY_BUILD_CONFIGURATION",
|
|
96
99
|
description: "The build configuration (e.g., 'Release', 'Debug')",
|
|
97
100
|
optional: true,
|
|
98
|
-
is_string: true)
|
|
101
|
+
is_string: true),
|
|
102
|
+
FastlaneCore::ConfigItem.new(key: :release_notes,
|
|
103
|
+
description: "The release notes to use for the upload",
|
|
104
|
+
optional: true,
|
|
105
|
+
is_string: true),
|
|
106
|
+
FastlaneCore::ConfigItem.new(key: :force_git_metadata,
|
|
107
|
+
description: "Force collection and sending of git metadata (branch, commit, etc.). \
|
|
108
|
+
If neither this nor --no-git-metadata is specified, git metadata is automatically \
|
|
109
|
+
collected when running in most CI environments",
|
|
110
|
+
is_string: false,
|
|
111
|
+
optional: true),
|
|
112
|
+
FastlaneCore::ConfigItem.new(key: :no_git_metadata,
|
|
113
|
+
description: "Disable collection and sending of git metadata",
|
|
114
|
+
is_string: false,
|
|
115
|
+
optional: true)
|
|
99
116
|
]
|
|
100
117
|
end
|
|
101
118
|
|
|
@@ -4,21 +4,21 @@ module Fastlane
|
|
|
4
4
|
def self.run(params)
|
|
5
5
|
Helper::SentryConfig.parse_api_params(params)
|
|
6
6
|
|
|
7
|
-
# Params - mapping & manifest
|
|
8
7
|
mapping_path = params[:mapping_path]
|
|
9
|
-
android_manifest_path = params[:android_manifest_path]
|
|
10
8
|
|
|
11
|
-
# Verify
|
|
9
|
+
# Verify file exists
|
|
12
10
|
UI.user_error!("Mapping file does not exist at path: #{mapping_path}") unless File.exist? mapping_path
|
|
13
|
-
UI.user_error!("AndroidManifest.xml file does not exist at path: #{android_manifest_path}") unless File.exist? android_manifest_path
|
|
14
11
|
|
|
15
12
|
command = [
|
|
16
13
|
"upload-proguard",
|
|
17
|
-
"--android-manifest",
|
|
18
|
-
android_manifest_path,
|
|
19
14
|
mapping_path
|
|
20
15
|
]
|
|
21
16
|
|
|
17
|
+
command.push('--no-upload') if params[:no_upload]
|
|
18
|
+
command.push('--write-properties').push(params[:write_properties]) unless params[:write_properties].nil?
|
|
19
|
+
command.push('--require-one') if params[:require_one]
|
|
20
|
+
command.push('--uuid').push(params[:uuid]) unless params[:uuid].nil?
|
|
21
|
+
|
|
22
22
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
23
23
|
UI.success("Successfully uploaded mapping file!")
|
|
24
24
|
end
|
|
@@ -47,13 +47,28 @@ module Fastlane
|
|
|
47
47
|
verify_block: proc do |value|
|
|
48
48
|
UI.user_error! "Could not find your mapping file at path '#{value}'" unless File.exist?(value)
|
|
49
49
|
end),
|
|
50
|
-
FastlaneCore::ConfigItem.new(key: :
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
FastlaneCore::ConfigItem.new(key: :no_upload,
|
|
51
|
+
description: "Disable the actual upload. This runs all steps for the processing \
|
|
52
|
+
but does not trigger the upload. This is useful if you just want to verify the \
|
|
53
|
+
mapping files and write the proguard UUIDs into a properties file",
|
|
54
|
+
is_string: false,
|
|
55
|
+
optional: true),
|
|
56
|
+
FastlaneCore::ConfigItem.new(key: :write_properties,
|
|
57
|
+
description: "Write the UUIDs for the processed mapping files into the given \
|
|
58
|
+
properties file",
|
|
59
|
+
optional: true),
|
|
60
|
+
FastlaneCore::ConfigItem.new(key: :require_one,
|
|
61
|
+
description: "Requires at least one file to upload or the command will error",
|
|
62
|
+
is_string: false,
|
|
63
|
+
optional: true),
|
|
64
|
+
FastlaneCore::ConfigItem.new(key: :uuid,
|
|
65
|
+
description: "Explicitly override the UUID of the mapping file with another one. \
|
|
66
|
+
This should be used with caution as it means that you can upload multiple mapping \
|
|
67
|
+
files if you don't take care. This however can be useful if you have a build \
|
|
68
|
+
process in which you need to know the UUID of the proguard file before it was \
|
|
69
|
+
created. If you upload a file with a forced UUID you can only upload a single \
|
|
70
|
+
proguard file",
|
|
71
|
+
optional: true)
|
|
57
72
|
]
|
|
58
73
|
end
|
|
59
74
|
|
|
@@ -13,19 +13,29 @@ module Fastlane
|
|
|
13
13
|
sourcemaps = params[:sourcemap]
|
|
14
14
|
|
|
15
15
|
command = [
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
"sourcemaps",
|
|
17
|
+
"upload",
|
|
18
|
+
"--release",
|
|
19
|
+
version
|
|
20
20
|
]
|
|
21
21
|
command += sourcemaps
|
|
22
22
|
|
|
23
|
-
command.push('--rewrite') if params[:rewrite]
|
|
24
23
|
command.push('--no-rewrite') unless params[:rewrite]
|
|
25
24
|
command.push('--strip-prefix').push(params[:strip_prefix]) if params[:strip_prefix]
|
|
26
25
|
command.push('--strip-common-prefix') if params[:strip_common_prefix]
|
|
27
26
|
command.push('--url-prefix').push(params[:url_prefix]) unless params[:url_prefix].nil?
|
|
27
|
+
command.push('--url-suffix').push(params[:url_suffix]) unless params[:url_suffix].nil?
|
|
28
28
|
command.push('--dist').push(params[:dist]) unless params[:dist].nil?
|
|
29
|
+
command.push('--note').push(params[:note]) unless params[:note].nil?
|
|
30
|
+
command.push('--validate') if params[:validate]
|
|
31
|
+
command.push('--decompress') if params[:decompress]
|
|
32
|
+
command.push('--wait') if params[:wait]
|
|
33
|
+
command.push('--wait-for').push(params[:wait_for]) unless params[:wait_for].nil?
|
|
34
|
+
command.push('--no-sourcemap-reference') if params[:no_sourcemap_reference]
|
|
35
|
+
command.push('--debug-id-reference') if params[:debug_id_reference]
|
|
36
|
+
command.push('--bundle').push(params[:bundle]) unless params[:bundle].nil?
|
|
37
|
+
command.push('--bundle-sourcemap').push(params[:bundle_sourcemap]) unless params[:bundle_sourcemap].nil?
|
|
38
|
+
command.push('--strict') if params[:strict]
|
|
29
39
|
|
|
30
40
|
unless params[:ignore].nil?
|
|
31
41
|
# normalize to array
|
|
@@ -38,11 +48,23 @@ module Fastlane
|
|
|
38
48
|
rescue StandardError
|
|
39
49
|
true
|
|
40
50
|
end
|
|
41
|
-
|
|
51
|
+
params[:ignore].each do |pattern|
|
|
52
|
+
command.push('--ignore').push(pattern)
|
|
53
|
+
end
|
|
42
54
|
end
|
|
43
55
|
|
|
44
56
|
command.push('--ignore-file').push(params[:ignore_file]) unless params[:ignore_file].nil?
|
|
45
57
|
|
|
58
|
+
unless params[:ext].nil?
|
|
59
|
+
# normalize to array
|
|
60
|
+
unless params[:ext].kind_of?(Enumerable)
|
|
61
|
+
params[:ext] = [params[:ext]]
|
|
62
|
+
end
|
|
63
|
+
params[:ext].each do |extension|
|
|
64
|
+
command.push('--ext').push(extension)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
46
68
|
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
47
69
|
UI.success("Successfully uploaded files to release: #{version}")
|
|
48
70
|
end
|
|
@@ -93,9 +115,11 @@ module Fastlane
|
|
|
93
115
|
optional: true),
|
|
94
116
|
FastlaneCore::ConfigItem.new(key: :strip_prefix,
|
|
95
117
|
conflicting_options: [:strip_common_prefix],
|
|
96
|
-
description: "Chop-off a prefix from uploaded files
|
|
97
|
-
|
|
98
|
-
|
|
118
|
+
description: "Chop-off a prefix from uploaded files. Strips the given prefix from all \
|
|
119
|
+
sources references inside the upload sourcemaps (paths used within the sourcemap \
|
|
120
|
+
content, to map minified code to it's original source). Only sources that start \
|
|
121
|
+
with the given prefix will be stripped. This will not modify the uploaded sources \
|
|
122
|
+
paths",
|
|
99
123
|
optional: true),
|
|
100
124
|
FastlaneCore::ConfigItem.new(key: :strip_common_prefix,
|
|
101
125
|
conflicting_options: [:strip_prefix],
|
|
@@ -106,6 +130,59 @@ module Fastlane
|
|
|
106
130
|
FastlaneCore::ConfigItem.new(key: :url_prefix,
|
|
107
131
|
description: "Sets a URL prefix in front of all files",
|
|
108
132
|
optional: true),
|
|
133
|
+
FastlaneCore::ConfigItem.new(key: :url_suffix,
|
|
134
|
+
description: "Sets a URL suffix to append to all filenames",
|
|
135
|
+
optional: true),
|
|
136
|
+
FastlaneCore::ConfigItem.new(key: :note,
|
|
137
|
+
description: "Adds an optional note to the uploaded artifact bundle",
|
|
138
|
+
optional: true),
|
|
139
|
+
FastlaneCore::ConfigItem.new(key: :validate,
|
|
140
|
+
description: "Enable basic sourcemap validation",
|
|
141
|
+
is_string: false,
|
|
142
|
+
optional: true),
|
|
143
|
+
FastlaneCore::ConfigItem.new(key: :decompress,
|
|
144
|
+
description: "Enable files gzip decompression prior to upload",
|
|
145
|
+
is_string: false,
|
|
146
|
+
optional: true),
|
|
147
|
+
FastlaneCore::ConfigItem.new(key: :wait,
|
|
148
|
+
description: "Wait for the server to fully process uploaded files",
|
|
149
|
+
is_string: false,
|
|
150
|
+
optional: true),
|
|
151
|
+
FastlaneCore::ConfigItem.new(key: :wait_for,
|
|
152
|
+
description: "Wait for the server to fully process uploaded files, but at most \
|
|
153
|
+
for the given number of seconds",
|
|
154
|
+
type: Integer,
|
|
155
|
+
optional: true),
|
|
156
|
+
FastlaneCore::ConfigItem.new(key: :no_sourcemap_reference,
|
|
157
|
+
description: "Disable emitting of automatic sourcemap references. By default the \
|
|
158
|
+
tool will store a 'Sourcemap' header with minified files so that sourcemaps \
|
|
159
|
+
are located automatically if the tool can detect a link. If this causes issues \
|
|
160
|
+
it can be disabled",
|
|
161
|
+
is_string: false,
|
|
162
|
+
optional: true),
|
|
163
|
+
FastlaneCore::ConfigItem.new(key: :debug_id_reference,
|
|
164
|
+
description: "Enable emitting of automatic debug id references. By default Debug ID \
|
|
165
|
+
reference has to be present both in the source and the related sourcemap. But in \
|
|
166
|
+
cases of binary bundles, the tool can't verify presence of the Debug ID. This flag \
|
|
167
|
+
allows use of Debug ID from the linked sourcemap",
|
|
168
|
+
is_string: false,
|
|
169
|
+
optional: true),
|
|
170
|
+
FastlaneCore::ConfigItem.new(key: :bundle,
|
|
171
|
+
description: "Path to the application bundle (indexed, file, or regular)",
|
|
172
|
+
optional: true),
|
|
173
|
+
FastlaneCore::ConfigItem.new(key: :bundle_sourcemap,
|
|
174
|
+
description: "Path to the bundle sourcemap",
|
|
175
|
+
optional: true),
|
|
176
|
+
FastlaneCore::ConfigItem.new(key: :ext,
|
|
177
|
+
description: "Set the file extensions that are considered for upload. This overrides \
|
|
178
|
+
the default extensions. To add an extension, all default extensions must be repeated. \
|
|
179
|
+
Specify once per extension. Defaults to: js, cjs, mjs, map, jsbundle, bundle",
|
|
180
|
+
type: Array,
|
|
181
|
+
optional: true),
|
|
182
|
+
FastlaneCore::ConfigItem.new(key: :strict,
|
|
183
|
+
description: "Fail with a non-zero exit code if the specified source map file cannot be uploaded",
|
|
184
|
+
is_string: false,
|
|
185
|
+
optional: true),
|
|
109
186
|
FastlaneCore::ConfigItem.new(key: :ignore,
|
|
110
187
|
description: "Ignores all files and folders matching the given glob or array of globs",
|
|
111
188
|
is_string: false,
|
|
@@ -24,10 +24,6 @@ module Fastlane
|
|
|
24
24
|
env_name: "SENTRY_AUTH_TOKEN",
|
|
25
25
|
description: "Authentication token for Sentry",
|
|
26
26
|
optional: true),
|
|
27
|
-
FastlaneCore::ConfigItem.new(key: :api_key,
|
|
28
|
-
env_name: "SENTRY_API_KEY",
|
|
29
|
-
description: "API key for Sentry",
|
|
30
|
-
optional: true),
|
|
31
27
|
FastlaneCore::ConfigItem.new(key: :org_slug,
|
|
32
28
|
env_name: "SENTRY_ORG_SLUG",
|
|
33
29
|
description: "Organization slug for Sentry project",
|
|
@@ -51,14 +47,12 @@ module Fastlane
|
|
|
51
47
|
|
|
52
48
|
url = params[:url]
|
|
53
49
|
auth_token = params[:auth_token]
|
|
54
|
-
api_key = params[:api_key]
|
|
55
50
|
org = params[:org_slug]
|
|
56
51
|
project = params[:project_slug]
|
|
57
52
|
log_level = params[:log_level]
|
|
58
53
|
|
|
59
54
|
has_org = !org.to_s.empty?
|
|
60
55
|
has_project = !project.to_s.empty?
|
|
61
|
-
has_api_key = !api_key.to_s.empty?
|
|
62
56
|
has_auth_token = !auth_token.to_s.empty?
|
|
63
57
|
|
|
64
58
|
ENV['SENTRY_URL'] = url unless url.to_s.empty?
|
|
@@ -70,18 +64,13 @@ module Fastlane
|
|
|
70
64
|
end
|
|
71
65
|
|
|
72
66
|
# Fallback to .sentryclirc if possible when no auth token is provided
|
|
73
|
-
if !
|
|
67
|
+
if !has_auth_token && fallback_sentry_cli_auth(params)
|
|
74
68
|
UI.important("No auth config provided, will fallback to .sentryclirc")
|
|
75
69
|
else
|
|
76
|
-
# Will fail if
|
|
77
|
-
|
|
78
|
-
UI.user_error!("No
|
|
79
|
-
elsif has_api_key && has_auth_token
|
|
80
|
-
UI.user_error!("Both API key and authentication token found for SentryAction given, please only give one")
|
|
81
|
-
elsif has_api_key && !has_auth_token
|
|
82
|
-
UI.deprecated("Please consider switching to auth_token ... api_key will be removed in the future")
|
|
70
|
+
# Will fail if no authentication token is provided
|
|
71
|
+
unless has_auth_token
|
|
72
|
+
UI.user_error!("No authentication token found for SentryAction given, pass using `auth_token: 'token'`")
|
|
83
73
|
end
|
|
84
|
-
ENV['SENTRY_API_KEY'] = api_key unless api_key.to_s.empty?
|
|
85
74
|
ENV['SENTRY_AUTH_TOKEN'] = auth_token unless auth_token.to_s.empty?
|
|
86
75
|
end
|
|
87
76
|
|
|
@@ -31,7 +31,8 @@ module Fastlane
|
|
|
31
31
|
UI.command(final_command)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
env = { 'SENTRY_PIPELINE' => "sentry-fastlane-plugin/#{Fastlane::Sentry::VERSION}" }
|
|
35
|
+
Open3.popen3(env, final_command) do |stdin, stdout, stderr, status_thread|
|
|
35
36
|
out_reader = Thread.new do
|
|
36
37
|
output = []
|
|
37
38
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane-plugin-sentry
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0.pre.rc.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sentry
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-19 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: os
|
|
@@ -121,9 +121,6 @@ files:
|
|
|
121
121
|
- lib/fastlane/plugin/sentry/actions/sentry_finalize_release.rb
|
|
122
122
|
- lib/fastlane/plugin/sentry/actions/sentry_set_commits.rb
|
|
123
123
|
- lib/fastlane/plugin/sentry/actions/sentry_upload_build.rb
|
|
124
|
-
- lib/fastlane/plugin/sentry/actions/sentry_upload_dif.rb
|
|
125
|
-
- lib/fastlane/plugin/sentry/actions/sentry_upload_dsym.rb
|
|
126
|
-
- lib/fastlane/plugin/sentry/actions/sentry_upload_file.rb
|
|
127
124
|
- lib/fastlane/plugin/sentry/actions/sentry_upload_proguard.rb
|
|
128
125
|
- lib/fastlane/plugin/sentry/actions/sentry_upload_sourcemap.rb
|
|
129
126
|
- lib/fastlane/plugin/sentry/helper/sentry_config.rb
|
|
@@ -144,9 +141,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
144
141
|
version: 2.6.0
|
|
145
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
143
|
requirements:
|
|
147
|
-
- - "
|
|
144
|
+
- - ">"
|
|
148
145
|
- !ruby/object:Gem::Version
|
|
149
|
-
version:
|
|
146
|
+
version: 1.3.1
|
|
150
147
|
requirements: []
|
|
151
148
|
rubygems_version: 3.1.6
|
|
152
149
|
signing_key:
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
module Fastlane
|
|
2
|
-
module Actions
|
|
3
|
-
class SentryUploadDifAction < Action
|
|
4
|
-
def self.run(params)
|
|
5
|
-
require 'shellwords'
|
|
6
|
-
|
|
7
|
-
UI.deprecated("This action is deprecated. Please use the `sentry_debug_files_upload` action.")
|
|
8
|
-
|
|
9
|
-
Helper::SentryConfig.parse_api_params(params)
|
|
10
|
-
|
|
11
|
-
paths = params[:path]
|
|
12
|
-
paths = ['.'] if paths.nil?
|
|
13
|
-
|
|
14
|
-
command = [
|
|
15
|
-
"upload-dif"
|
|
16
|
-
]
|
|
17
|
-
command += paths
|
|
18
|
-
|
|
19
|
-
command.push('--type').push(params[:type]) unless params[:type].nil?
|
|
20
|
-
command.push('--no-unwind') unless params[:no_unwind].nil?
|
|
21
|
-
command.push('--no-debug') unless params[:no_debug].nil?
|
|
22
|
-
command.push('--no-sources') unless params[:no_sources].nil?
|
|
23
|
-
command.push('--ids').push(params[:ids]) unless params[:ids].nil?
|
|
24
|
-
command.push('--require-all') unless params[:require_all].nil?
|
|
25
|
-
command.push('--symbol-maps').push(params[:symbol_maps]) unless params[:symbol_maps].nil?
|
|
26
|
-
command.push('--derived-data') unless params[:derived_data].nil?
|
|
27
|
-
command.push('--no-zips') unless params[:no_zips].nil?
|
|
28
|
-
command.push('--info-plist').push(params[:info_plist]) unless params[:info_plist].nil?
|
|
29
|
-
command.push('--no-reprocessing') unless params[:no_reprocessing].nil?
|
|
30
|
-
command.push('--force-foreground') unless params[:force_foreground].nil?
|
|
31
|
-
command.push('--include-sources') unless params[:include_sources] != true
|
|
32
|
-
command.push('--wait') unless params[:wait].nil?
|
|
33
|
-
command.push('--upload-symbol-maps') unless params[:upload_symbol_maps].nil?
|
|
34
|
-
|
|
35
|
-
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
36
|
-
UI.success("Successfully ran upload-dif")
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
#####################################################
|
|
40
|
-
# @!group Documentation
|
|
41
|
-
#####################################################
|
|
42
|
-
|
|
43
|
-
def self.description
|
|
44
|
-
"Upload debugging information files."
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.details
|
|
48
|
-
[
|
|
49
|
-
"Files can be uploaded using the `upload-dif` command. This command will scan a given folder recursively for files and upload them to Sentry.",
|
|
50
|
-
"See https://docs.sentry.io/product/cli/dif/#uploading-files for more information."
|
|
51
|
-
].join(" ")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def self.available_options
|
|
55
|
-
Helper::SentryConfig.common_api_config_items + [
|
|
56
|
-
FastlaneCore::ConfigItem.new(key: :path,
|
|
57
|
-
description: "Path or an array of paths to search recursively for symbol files",
|
|
58
|
-
type: Array,
|
|
59
|
-
optional: true),
|
|
60
|
-
FastlaneCore::ConfigItem.new(key: :type,
|
|
61
|
-
short_option: "-t",
|
|
62
|
-
description: "Only consider debug information files of the given \
|
|
63
|
-
type. By default, all types are considered",
|
|
64
|
-
optional: true,
|
|
65
|
-
verify_block: proc do |value|
|
|
66
|
-
UI.user_error! "Invalid value '#{value}'" unless ['dsym', 'elf', 'breakpad', 'pdb', 'pe', 'sourcebundle', 'bcsymbolmap'].include? value
|
|
67
|
-
end),
|
|
68
|
-
FastlaneCore::ConfigItem.new(key: :no_unwind,
|
|
69
|
-
description: "Do not scan for stack unwinding information. Specify \
|
|
70
|
-
this flag for builds with disabled FPO, or when \
|
|
71
|
-
stackwalking occurs on the device. This usually \
|
|
72
|
-
excludes executables and dynamic libraries. They might \
|
|
73
|
-
still be uploaded, if they contain additional \
|
|
74
|
-
processable information (see other flags)",
|
|
75
|
-
is_string: false,
|
|
76
|
-
optional: true),
|
|
77
|
-
FastlaneCore::ConfigItem.new(key: :no_debug,
|
|
78
|
-
description: "Do not scan for debugging information. This will \
|
|
79
|
-
usually exclude debug companion files. They might \
|
|
80
|
-
still be uploaded, if they contain additional \
|
|
81
|
-
processable information (see other flags)",
|
|
82
|
-
conflicting_options: [:no_unwind],
|
|
83
|
-
is_string: false,
|
|
84
|
-
optional: true),
|
|
85
|
-
FastlaneCore::ConfigItem.new(key: :no_sources,
|
|
86
|
-
description: "Do not scan for source information. This will \
|
|
87
|
-
usually exclude source bundle files. They might \
|
|
88
|
-
still be uploaded, if they contain additional \
|
|
89
|
-
processable information (see other flags)",
|
|
90
|
-
is_string: false,
|
|
91
|
-
optional: true),
|
|
92
|
-
FastlaneCore::ConfigItem.new(key: :ids,
|
|
93
|
-
description: "Search for specific debug identifiers",
|
|
94
|
-
optional: true),
|
|
95
|
-
FastlaneCore::ConfigItem.new(key: :require_all,
|
|
96
|
-
description: "Errors if not all identifiers specified with --id could be found",
|
|
97
|
-
is_string: false,
|
|
98
|
-
optional: true),
|
|
99
|
-
FastlaneCore::ConfigItem.new(key: :symbol_maps,
|
|
100
|
-
description: "Optional path to BCSymbolMap files which are used to \
|
|
101
|
-
resolve hidden symbols in dSYM files downloaded from \
|
|
102
|
-
iTunes Connect. This requires the dsymutil tool to be \
|
|
103
|
-
available",
|
|
104
|
-
optional: true),
|
|
105
|
-
FastlaneCore::ConfigItem.new(key: :derived_data,
|
|
106
|
-
description: "Search for debug symbols in Xcode's derived data",
|
|
107
|
-
is_string: false,
|
|
108
|
-
optional: true),
|
|
109
|
-
FastlaneCore::ConfigItem.new(key: :no_zips,
|
|
110
|
-
description: "Do not search in ZIP files",
|
|
111
|
-
is_string: false,
|
|
112
|
-
optional: true),
|
|
113
|
-
FastlaneCore::ConfigItem.new(key: :info_plist,
|
|
114
|
-
description: "Optional path to the Info.plist.{n}We will try to find this \
|
|
115
|
-
automatically if run from Xcode. Providing this information \
|
|
116
|
-
will associate the debug symbols with a specific ITC application \
|
|
117
|
-
and build in Sentry. Note that if you provide the plist \
|
|
118
|
-
explicitly it must already be processed",
|
|
119
|
-
optional: true),
|
|
120
|
-
FastlaneCore::ConfigItem.new(key: :no_reprocessing,
|
|
121
|
-
description: "Do not trigger reprocessing after uploading",
|
|
122
|
-
is_string: false,
|
|
123
|
-
optional: true),
|
|
124
|
-
FastlaneCore::ConfigItem.new(key: :force_foreground,
|
|
125
|
-
description: "Wait for the process to finish.{n}\
|
|
126
|
-
By default, the upload process will detach and continue in the \
|
|
127
|
-
background when triggered from Xcode. When an error happens, \
|
|
128
|
-
a dialog is shown. If this parameter is passed Xcode will wait \
|
|
129
|
-
for the process to finish before the build finishes and output \
|
|
130
|
-
will be shown in the Xcode build output",
|
|
131
|
-
is_string: false,
|
|
132
|
-
optional: true),
|
|
133
|
-
FastlaneCore::ConfigItem.new(key: :include_sources,
|
|
134
|
-
description: "Include sources from the local file system and upload \
|
|
135
|
-
them as source bundles",
|
|
136
|
-
is_string: false,
|
|
137
|
-
optional: true),
|
|
138
|
-
FastlaneCore::ConfigItem.new(key: :wait,
|
|
139
|
-
description: "Wait for the server to fully process uploaded files. Errors \
|
|
140
|
-
can only be displayed if --wait is specified, but this will \
|
|
141
|
-
significantly slow down the upload process",
|
|
142
|
-
is_string: false,
|
|
143
|
-
optional: true),
|
|
144
|
-
FastlaneCore::ConfigItem.new(key: :upload_symbol_maps,
|
|
145
|
-
description: "Upload any BCSymbolMap files found to allow Sentry to resolve \
|
|
146
|
-
hidden symbols, e.g. when it downloads dSYMs directly from App \
|
|
147
|
-
Store Connect or when you upload dSYMs without first resolving \
|
|
148
|
-
the hidden symbols using --symbol-maps",
|
|
149
|
-
is_string: false,
|
|
150
|
-
optional: true)
|
|
151
|
-
]
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
def self.return_value
|
|
155
|
-
nil
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
def self.authors
|
|
159
|
-
["denrase"]
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
def self.is_supported?(platform)
|
|
163
|
-
true
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
module Fastlane
|
|
2
|
-
module Actions
|
|
3
|
-
class SentryUploadDsymAction < Action
|
|
4
|
-
def self.run(params)
|
|
5
|
-
UI.deprecated("This action is deprecated. Please use the `sentry_debug_files_upload` action.")
|
|
6
|
-
|
|
7
|
-
Helper::SentryConfig.parse_api_params(params)
|
|
8
|
-
|
|
9
|
-
# Params - dSYM
|
|
10
|
-
dsym_path = params[:dsym_path]
|
|
11
|
-
dsym_paths = params[:dsym_paths] || []
|
|
12
|
-
|
|
13
|
-
# Verify dsym(s)
|
|
14
|
-
dsym_paths += [dsym_path] unless dsym_path.nil?
|
|
15
|
-
dsym_paths = dsym_paths.map { |path| File.absolute_path(path) }
|
|
16
|
-
dsym_paths.each do |path|
|
|
17
|
-
UI.user_error!("dSYM does not exist at path: #{path}") unless File.exist? path
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
command = ["upload-dsym"]
|
|
21
|
-
command.push("--symbol-maps") unless params[:symbol_maps].nil?
|
|
22
|
-
command.push(params[:symbol_maps]) unless params[:symbol_maps].nil?
|
|
23
|
-
command.push("--info-plist") unless params[:info_plist].nil?
|
|
24
|
-
command.push(params[:info_plist]) unless params[:info_plist].nil?
|
|
25
|
-
command += dsym_paths
|
|
26
|
-
|
|
27
|
-
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
28
|
-
UI.success("Successfully uploaded dSYMs!")
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
#####################################################
|
|
32
|
-
# @!group Documentation
|
|
33
|
-
#####################################################
|
|
34
|
-
|
|
35
|
-
def self.description
|
|
36
|
-
"Upload dSYM symbolication files to Sentry"
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def self.details
|
|
40
|
-
[
|
|
41
|
-
"This action allows you to upload symbolication files to Sentry.",
|
|
42
|
-
"It's extra useful if you use it to download the latest dSYM files from Apple when you",
|
|
43
|
-
"use Bitcode"
|
|
44
|
-
].join(" ")
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.available_options
|
|
48
|
-
Helper::SentryConfig.common_api_config_items + [
|
|
49
|
-
FastlaneCore::ConfigItem.new(key: :dsym_path,
|
|
50
|
-
env_name: "SENTRY_DSYM_PATH",
|
|
51
|
-
description: "Path to your symbols file. For iOS and Mac provide path to app.dSYM.zip",
|
|
52
|
-
default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH],
|
|
53
|
-
optional: true,
|
|
54
|
-
verify_block: proc do |value|
|
|
55
|
-
UI.user_error! "Could not find Path to your symbols file at path '#{value}'" unless File.exist?(value)
|
|
56
|
-
end),
|
|
57
|
-
FastlaneCore::ConfigItem.new(key: :dsym_paths,
|
|
58
|
-
env_name: "SENTRY_DSYM_PATHS",
|
|
59
|
-
description: "Path to an array of your symbols file. For iOS and Mac provide path to app.dSYM.zip",
|
|
60
|
-
default_value: Actions.lane_context[SharedValues::DSYM_PATHS],
|
|
61
|
-
is_string: false,
|
|
62
|
-
optional: true),
|
|
63
|
-
FastlaneCore::ConfigItem.new(key: :symbol_maps,
|
|
64
|
-
env_name: "SENTRY_SYMBOL_MAPS",
|
|
65
|
-
description: "Optional path to bcsymbolmap files which are used to resolve hidden symbols in the actual dsym files. This requires the dsymutil tool to be available",
|
|
66
|
-
optional: true,
|
|
67
|
-
verify_block: proc do |value|
|
|
68
|
-
UI.user_error! "Could not find bcsymbolmap at path '#{value}'" unless File.exist?(value)
|
|
69
|
-
end),
|
|
70
|
-
FastlaneCore::ConfigItem.new(key: :info_plist,
|
|
71
|
-
env_name: "SENTRY_INFO_PLIST",
|
|
72
|
-
description: "Optional path to Info.plist to add version information when uploading debug symbols",
|
|
73
|
-
optional: true,
|
|
74
|
-
verify_block: proc do |value|
|
|
75
|
-
UI.user_error! "Could not find Info.plist at path '#{value}'" unless File.exist?(value)
|
|
76
|
-
end)
|
|
77
|
-
]
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
def self.return_value
|
|
81
|
-
nil
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def self.authors
|
|
85
|
-
["joshdholtz", "HazAT"]
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def self.is_supported?(platform)
|
|
89
|
-
[:ios, :mac].include?(platform)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
module Fastlane
|
|
2
|
-
module Actions
|
|
3
|
-
class SentryUploadFileAction < Action
|
|
4
|
-
def self.run(params)
|
|
5
|
-
require 'shellwords'
|
|
6
|
-
|
|
7
|
-
Helper::SentryConfig.parse_api_params(params)
|
|
8
|
-
|
|
9
|
-
version = params[:version]
|
|
10
|
-
version = "#{params[:app_identifier]}@#{params[:version]}" if params[:app_identifier]
|
|
11
|
-
version = "#{version}+#{params[:build]}" if params[:build]
|
|
12
|
-
|
|
13
|
-
file = params[:file]
|
|
14
|
-
|
|
15
|
-
command = [
|
|
16
|
-
"releases",
|
|
17
|
-
"files",
|
|
18
|
-
version,
|
|
19
|
-
"upload",
|
|
20
|
-
file
|
|
21
|
-
]
|
|
22
|
-
command.push(params[:file_url]) unless params[:file_url].nil?
|
|
23
|
-
command.push("--dist").push(params[:dist]) unless params[:dist].nil?
|
|
24
|
-
|
|
25
|
-
Helper::SentryHelper.call_sentry_cli(params, command)
|
|
26
|
-
UI.success("Successfully uploaded files to release: #{version}")
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
#####################################################
|
|
30
|
-
# @!group Documentation
|
|
31
|
-
#####################################################
|
|
32
|
-
|
|
33
|
-
def self.description
|
|
34
|
-
"Upload files to a release of a project on Sentry"
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def self.details
|
|
38
|
-
[
|
|
39
|
-
"This action allows you to upload files to a release of a project on Sentry.",
|
|
40
|
-
"See https://docs.sentry.io/learn/cli/releases/#upload-files for more information."
|
|
41
|
-
].join(" ")
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def self.available_options
|
|
45
|
-
Helper::SentryConfig.common_api_config_items + [
|
|
46
|
-
FastlaneCore::ConfigItem.new(key: :version,
|
|
47
|
-
description: "Release version on Sentry"),
|
|
48
|
-
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
|
49
|
-
short_option: "-a",
|
|
50
|
-
env_name: "SENTRY_APP_IDENTIFIER",
|
|
51
|
-
description: "App Bundle Identifier, prepended to version",
|
|
52
|
-
optional: true),
|
|
53
|
-
FastlaneCore::ConfigItem.new(key: :build,
|
|
54
|
-
short_option: "-b",
|
|
55
|
-
description: "Release build on Sentry",
|
|
56
|
-
optional: true),
|
|
57
|
-
FastlaneCore::ConfigItem.new(key: :dist,
|
|
58
|
-
description: "Distribution in release",
|
|
59
|
-
optional: true),
|
|
60
|
-
FastlaneCore::ConfigItem.new(key: :file,
|
|
61
|
-
description: "Path to the file to upload",
|
|
62
|
-
verify_block: proc do |value|
|
|
63
|
-
UI.user_error! "Could not find file at path '#{value}'" unless File.exist?(value)
|
|
64
|
-
end),
|
|
65
|
-
FastlaneCore::ConfigItem.new(key: :file_url,
|
|
66
|
-
description: "Optional URL we should associate with the file",
|
|
67
|
-
optional: true)
|
|
68
|
-
]
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def self.return_value
|
|
72
|
-
nil
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def self.authors
|
|
76
|
-
["wschurman"]
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
def self.is_supported?(platform)
|
|
80
|
-
true
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|