fastlane-plugin-waldo 2.0.1 → 3.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
  SHA256:
3
- metadata.gz: fa67171d14f9daf43bb1e2d64b6b2add082b014b3bc9063f6c6d89f94f12bce6
4
- data.tar.gz: 506bbdf57902a6bc9eb53de9ec511dc9402db1f4b186a436b3596f583506e1ff
3
+ metadata.gz: dd88e9f3a32bde7a83c70b6988a3683af7c896cc57a63f6d77942265eb7517fe
4
+ data.tar.gz: a1f9c1fda4daf3705237de99eafa7bc2de6486a939e7545234a3792ab1a89b9b
5
5
  SHA512:
6
- metadata.gz: e5b75644e5a86cb924bcc0d6c83e0421b16ac165ab8eacbbe35abc0eaef34235f590949a1466a3b0bc2e6fd96da799dcc7c08a1ba4cd51ed45051d5f0cb89817
7
- data.tar.gz: f421167cc09941741c7e7fc368b6a771839108d200184e0e41bf47be09ee44df958e6534f9595d9860204e3ddd2fa0bf9e5bfb022d7fae2415c9ed1c73dac2a9
6
+ metadata.gz: 3e0613f158f9d570bbb1a0314f5cf1c16fe5d6976ea8abd2ab3ac686249ee47a4624e6b74fcaa4bf369846fa1bf9343131c16a9916fc4f062b2d14b7a56e7907
7
+ data.tar.gz: daf65861ab2f031479f0e713f217b68686dd0133f619c1d7fb24b1dd4d9acb403da6781aa799dfbc58a5bae5432faa65e4df40e512a38aafa90639916e58afd5
data/README.md CHANGED
@@ -38,8 +38,7 @@ gym(configuration: 'Release',
38
38
  destination: 'generic/platform=iOS Simulator')
39
39
  ```
40
40
 
41
- You can then find your app (and associated symbols) relative to the derived
42
- data path:
41
+ You can then find your app relative to the derived data path:
43
42
 
44
43
  ```ruby
45
44
  app_path = File.join(derived_data_path,
@@ -54,13 +53,11 @@ upload itself is very simple:
54
53
 
55
54
  ```ruby
56
55
  waldo(upload_token: '0123456789abcdef0123456789abcdef',
57
- app_path: '/path/to/YourApp.app',
58
- include_symbols: true)
56
+ app_path: '/path/to/YourApp.app')
59
57
  ```
60
58
 
61
59
  > **Note:** You _must_ specify _both_ the Waldo upload token _and_ the path of
62
- > the `.app`. The `include_symbols` parameter is optional but we highly
63
- > recommend supplying it.
60
+ > the `.app`.
64
61
 
65
62
  ### Uploading an iOS Device Build
66
63
 
@@ -70,20 +67,17 @@ your IPA, `waldo` will automatically find and upload the generated IPA.
70
67
  ```ruby
71
68
  gym(export_method: 'ad-hoc') # or 'development'
72
69
 
73
- waldo(upload_token: '0123456789abcdef0123456789abcdef',
74
- dsym_path: lane_context[SharedValues::DSYM_OUTPUT_PATH])
70
+ waldo(upload_token: '0123456789abcdef0123456789abcdef')
75
71
  ```
76
72
 
77
- > **Note:** You _must_ specify the Waldo upload token. The `dsym_path`
78
- > parameter is optional but we highly recommend supplying it.
73
+ > **Note:** You _must_ specify the Waldo upload token.
79
74
 
80
75
  If you do _not_ use `gym` to build your IPA, you will need to explicitly
81
76
  specify the IPA path to `waldo`:
82
77
 
83
78
  ```ruby
84
79
  waldo(upload_token: '0123456789abcdef0123456789abcdef',
85
- ipa_path: '/path/to/YourApp.ipa',
86
- dsym_path: '/path/to/YourApp.app.dSYM.zip')
80
+ ipa_path: '/path/to/YourApp.ipa')
87
81
  ```
88
82
 
89
83
  ### Uploading an Android Build
@@ -7,7 +7,7 @@ module Fastlane
7
7
  FastlaneCore::PrintTable.print_values(config: mparams,
8
8
  title: "Summary for waldo #{Fastlane::Waldo::VERSION.to_s}")
9
9
 
10
- Helper::WaldoHelper.upload_build_with_symbols(mparams)
10
+ Helper::WaldoHelper.upload_build(mparams)
11
11
  end
12
12
 
13
13
  def self.authors
@@ -27,16 +27,6 @@ module Fastlane
27
27
  default_value: Actions.lane_context[Actions::SharedValues::IPA_OUTPUT_PATH],
28
28
  default_value_dynamic: true,
29
29
  optional: true),
30
- FastlaneCore::ConfigItem.new(key: :dsym_path,
31
- env_name: 'WALDO_DSYM_PATH',
32
- description: 'Path to your dSYM file(s)',
33
- optional: true),
34
- FastlaneCore::ConfigItem.new(key: :include_symbols,
35
- env_name: 'WALDO_INCLUDE_SYMBOLS',
36
- description: 'Include symbols in upload if true',
37
- optional: true,
38
- default_value: false,
39
- is_string: false),
40
30
  # Android-specific
41
31
  FastlaneCore::ConfigItem.new(key: :apk_path,
42
32
  env_name: 'WALDO_APK_PATH',
@@ -47,14 +37,21 @@ module Fastlane
47
37
  # General
48
38
  FastlaneCore::ConfigItem.new(key: :upload_token,
49
39
  env_name: 'WALDO_UPLOAD_TOKEN',
50
- description: 'Waldo upload token',
40
+ description: 'Upload token',
51
41
  optional: true,
52
42
  sensitive: true),
53
43
  FastlaneCore::ConfigItem.new(key: :variant_name,
54
44
  env_name: 'WALDO_VARIANT_NAME',
55
- description: 'Waldo variant name',
56
- optional: true,
57
- sensitive: true)
45
+ description: 'Variant name',
46
+ optional: true),
47
+ FastlaneCore::ConfigItem.new(key: :git_branch,
48
+ env_name: 'WALDO_GIT_BRANCH',
49
+ description: 'Branch name for originating git commit',
50
+ optional: true),
51
+ FastlaneCore::ConfigItem.new(key: :git_commit,
52
+ env_name: 'WALDO_GIT_COMMIT',
53
+ description: 'Hash of originating git commit',
54
+ optional: true)
58
55
  ]
59
56
  end
60
57
 
@@ -6,15 +6,14 @@ module Fastlane
6
6
 
7
7
  apk_path = in_params[:apk_path]
8
8
  app_path = in_params[:app_path]
9
- dsym_path = in_params[:dsym_path]
10
- include_symbols = in_params[:include_symbols]
9
+ git_branch = in_params[:git_branch]
10
+ git_commit = in_params[:git_commit]
11
11
  ipa_path = in_params[:ipa_path]
12
12
  upload_token = in_params[:upload_token]
13
13
  variant_name = in_params[:variant_name] || Actions.lane_context[Actions::SharedValues::GRADLE_BUILD_TYPE]
14
14
 
15
15
  apk_path.gsub!("\\ ", ' ') if apk_path
16
16
  app_path.gsub!("\\ ", ' ') if app_path
17
- dsym_path.gsub!("\\ ", ' ') if dsym_path
18
17
  ipa_path.gsub!("\\ ", ' ') if ipa_path
19
18
 
20
19
  out_params[:apk_path] = apk_path if apk_path
@@ -42,72 +41,88 @@ module Fastlane
42
41
  out_params[:ipa_path] = ipa_path if ipa_path
43
42
  end
44
43
 
45
- if app_path
46
- out_params[:dsym_path] = dsym_path if dsym_path
47
- out_params[:include_symbols] = include_symbols if include_symbols
48
- else
49
- out_params[:dsym_path] = dsym_path if dsym_path && ipa_path
50
- end
51
-
44
+ out_params[:git_branch] = git_branch if git_branch
45
+ out_params[:git_commit] = git_commit if git_commit
52
46
  out_params[:upload_token] = upload_token if upload_token
53
47
  out_params[:variant_name] = variant_name if variant_name
54
48
 
55
49
  out_params
56
50
  end
57
51
 
58
- def self.get_flavor
59
- case get_platform
60
- when :android
61
- 'Android'
62
- when :ios
63
- 'iOS'
52
+ def self.get_binary_path
53
+ platform = RUBY_PLATFORM.downcase
54
+
55
+ if platform.include?("linux")
56
+ ext = ""
57
+ os = "linux"
58
+ elsif platform.include?("darwin")
59
+ ext = ""
60
+ os = "macos"
61
+ elsif platform.include?("mswin")
62
+ ext = ".exe"
63
+ os = "windows"
64
64
  else
65
- 'unknown'
65
+ UI.error("Unsupported platform: #{platform}")
66
66
  end
67
- end
68
67
 
69
- def self.get_platform
70
- Actions.lane_context[Actions::SharedValues::PLATFORM_NAME] || :ios
71
- end
68
+ if platform.include?("arm64")
69
+ arch = "arm64"
70
+ elsif platform.include?("x86_64")
71
+ arch = "x86_64"
72
+ else
73
+ UI.error("Unsupported platform: #{platform}")
74
+ end
72
75
 
73
- def self.get_script_path
74
76
  root = Pathname.new(File.expand_path('../../..', __FILE__))
75
77
 
76
- File.join(root, 'waldo', 'assets', 'WaldoCLI.sh')
77
- end
78
-
79
- def self.get_user_agent
80
- "Waldo fastlane/#{get_flavor} v#{Fastlane::Waldo::VERSION}"
78
+ File.join(root, "waldo", "assets", "waldo-#{os}-#{arch}#{ext}")
81
79
  end
82
80
 
83
- def self.upload_build_with_symbols(params)
81
+ def self.upload_build(params)
84
82
  apk_path = params[:apk_path]
85
83
  app_path = params[:app_path]
86
84
  ipa_path = params[:ipa_path]
87
85
 
88
86
  if apk_path
89
- build_path = apk_path
87
+ build_path = apk_path
90
88
  elsif app_path
91
- build_path = app_path
89
+ build_path = app_path
92
90
  elsif ipa_path
93
- build_path = ipa_path
91
+ build_path = ipa_path
94
92
  else
95
- build_path = ""
93
+ build_path = ""
96
94
  end
97
95
 
98
96
  command = []
99
97
 
100
- command << "WALDO_UPLOAD_TOKEN='#{params[:upload_token]}'"
101
- command << "WALDO_USER_AGENT_OVERRIDE='#{get_user_agent}'"
102
- command << "WALDO_VARIANT_NAME='#{params[:variant_name]}'" if params[:variant_name]
98
+ command << "WALDO_WRAPPER_NAME_OVERRIDE='Fastlane'"
99
+ command << "WALDO_WRAPPER_VERSION_OVERRIDE='#{Fastlane::Waldo::VERSION}'"
103
100
 
104
- command << get_script_path.shellescape
101
+ command << get_binary_path.shellescape
102
+
103
+ if params[:git_branch]
104
+ command << '--git_branch'
105
+ command << params[:git_branch]
106
+ end
107
+
108
+ if params[:git_commit]
109
+ command << '--git_commit'
110
+ command << params[:git_commit]
111
+ end
112
+
113
+ if params[:upload_token]
114
+ command << '--upload_token'
115
+ command << params[:upload_token]
116
+ end
117
+
118
+ if params[:variant_name]
119
+ command << '--variant_name'
120
+ command << params[:variant_name]
121
+ end
105
122
 
106
- command << '--include_symbols' if params[:include_symbols]
107
123
  command << '--verbose' if FastlaneCore::Globals.verbose?
108
124
 
109
125
  command << build_path.shellescape
110
- command << params[:dsym_path].shellescape if params[:dsym_path]
111
126
 
112
127
  Actions.sh_control_output(command.join(' '),
113
128
  print_command: FastlaneCore::Globals.verbose?,
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module Waldo
3
- VERSION = "2.0.1"
3
+ VERSION = "3.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-waldo
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - J. G. Pusey
7
+ - John Pusey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-14 00:00:00.000000000 Z
11
+ date: 2021-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -76,7 +76,12 @@ files:
76
76
  - README.md
77
77
  - lib/fastlane/plugin/waldo.rb
78
78
  - lib/fastlane/plugin/waldo/actions/waldo_action.rb
79
- - lib/fastlane/plugin/waldo/assets/WaldoCLI.sh
79
+ - lib/fastlane/plugin/waldo/assets/waldo-linux-arm64
80
+ - lib/fastlane/plugin/waldo/assets/waldo-linux-x86_64
81
+ - lib/fastlane/plugin/waldo/assets/waldo-macos-arm64
82
+ - lib/fastlane/plugin/waldo/assets/waldo-macos-x86_64
83
+ - lib/fastlane/plugin/waldo/assets/waldo-windows-arm64.exe
84
+ - lib/fastlane/plugin/waldo/assets/waldo-windows-x86_64.exe
80
85
  - lib/fastlane/plugin/waldo/helper/waldo_helper.rb
81
86
  - lib/fastlane/plugin/waldo/version.rb
82
87
  homepage: https://github.com/waldoapp/fastlane-plugin-waldo
@@ -1,672 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- set -eu -o pipefail
4
-
5
- waldo_api_build_endpoint=${WALDO_API_BUILD_ENDPOINT:-https://api.waldo.io/versions}
6
- waldo_api_error_endpoint=${WALDO_API_ERROR_ENDPOINT:-https://api.waldo.io/uploadError}
7
- waldo_api_symbols_endpoint=${WALDO_API_SYMBOLS_ENDPOINT:-https://api.waldo.io/versions/__ID__/symbols}
8
- waldo_user_agent_override=${WALDO_USER_AGENT_OVERRIDE:-}
9
-
10
- waldo_cli_version="1.6.6"
11
-
12
- waldo_build_flavor=""
13
- waldo_build_path=""
14
- waldo_build_payload_path=""
15
- waldo_build_suffix=""
16
- waldo_build_upload_id=""
17
- waldo_extra_args="--show-error --silent"
18
- waldo_history=""
19
- waldo_history_error=""
20
- waldo_include_symbols=false
21
- waldo_platform=""
22
- waldo_symbols_path=""
23
- waldo_symbols_payload_path=""
24
- waldo_symbols_suffix=""
25
- waldo_upload_token=""
26
- waldo_variant_name=""
27
- waldo_working_path=""
28
-
29
- function abs_path() {
30
- local _rel_path=$1
31
-
32
- [[ -n $_rel_path ]] || _rel_path="."
33
-
34
- case "$_rel_path" in
35
- .) pwd ;;
36
- ..) (unset CDPATH && cd .. &>/dev/null && pwd) ;;
37
- /*) echo $_rel_path ;;
38
- *) local _dirname=$(dirname "$_rel_path")
39
-
40
- _dirname=$(unset CDPATH && cd "$_dirname" &>/dev/null && pwd)
41
-
42
- if [[ -n $_dirname ]]; then
43
- echo ${_dirname}/$(basename "$_rel_path")
44
- else
45
- echo $_rel_path
46
- fi
47
- ;;
48
- esac
49
- }
50
-
51
- function check_build_path() {
52
- [[ -n $waldo_build_path ]] || fail_usage "Missing required argument: ‘path’"
53
-
54
- waldo_build_path=$(abs_path "$waldo_build_path")
55
- waldo_build_suffix=${waldo_build_path##*.}
56
-
57
- case $waldo_build_suffix in
58
- apk) waldo_build_flavor="Android" ;;
59
- app|ipa) waldo_build_flavor="iOS" ;;
60
- *) fail "File extension of build at ‘${waldo_build_path}’ is not recognized" ;;
61
- esac
62
- }
63
-
64
- function check_build_status() {
65
- local _response=$1
66
-
67
- local _status_regex='"status":([0-9]+)'
68
-
69
- if [[ $_response =~ $_status_regex ]]; then
70
- local _status=${BASH_REMATCH[1]}
71
-
72
- if (( $_status == 401 )); then
73
- fail "Upload token is invalid or missing!"
74
- elif (( $_status < 200 || $_status > 299 )); then
75
- fail "Unable to upload build to Waldo, HTTP status: $_status"
76
- fi
77
- fi
78
-
79
- local _id_regex='"id":"(appv-[0-9a-f]+)"'
80
-
81
- if [[ $_response =~ $_id_regex ]]; then
82
- waldo_build_upload_id=${BASH_REMATCH[1]}
83
- fi
84
- }
85
-
86
- function check_history() {
87
- if [[ -z $(which base64) ]]; then
88
- waldo_history_error="noBase64CommandFound"
89
- elif [[ -z $(which git) ]]; then
90
- waldo_history_error="noGitCommandFound"
91
- elif [[ -z $(which grep) ]]; then
92
- waldo_history_error="noGrepCommandFound"
93
- elif [[ -z $(which sed) ]]; then
94
- waldo_history_error="noSedCommandFound"
95
- elif [[ -z $(which tr) ]]; then
96
- waldo_history_error="noTrCommandFound"
97
- elif ! git rev-parse >& /dev/null; then
98
- waldo_history_error="notGitRepository"
99
- else
100
- waldo_history=$(get_history)
101
- fi
102
- }
103
-
104
- function check_platform() {
105
- if [[ -z $(which curl) ]]; then
106
- fail "No ‘curl’ command found"
107
- fi
108
- }
109
-
110
- function check_symbols_path() {
111
- case $waldo_build_suffix in
112
- app)
113
- if [[ -z $waldo_symbols_path && $waldo_include_symbols == true ]]; then
114
- waldo_symbols_path=$(find_symbols_path)
115
- fi
116
- ;;
117
- ipa) ;;
118
- *) waldo_symbols_path="" ;; # not applicable
119
- esac
120
-
121
- [[ -n $waldo_symbols_path ]] || return 0
122
-
123
- waldo_symbols_path=$(abs_path "$waldo_symbols_path")
124
- waldo_symbols_suffix=${waldo_symbols_path##*.}
125
-
126
- case $waldo_symbols_suffix in
127
- dSYM|xcarchive|zip) ;; # OK
128
- *) fail "File extension of symbols at ‘${waldo_symbols_path}’ is not recognized" ;;
129
- esac
130
- }
131
-
132
- function check_symbols_status() {
133
- local _response=$1
134
-
135
- local _status_regex='"status":([0-9]+)'
136
-
137
- if [[ $_response =~ $_status_regex ]]; then
138
- local _status=${BASH_REMATCH[1]}
139
-
140
- if (( $_status == 401 )); then
141
- fail "Upload token is invalid or missing!"
142
- elif (( $_status < 200 || $_status > 299 )); then
143
- fail "Unable to upload symbols to Waldo, HTTP status: $_status"
144
- fi
145
- fi
146
- }
147
-
148
- function check_upload_token() {
149
- [[ -n $waldo_upload_token ]] || waldo_upload_token=${WALDO_UPLOAD_TOKEN:-}
150
- [[ -n $waldo_upload_token ]] || fail_usage "Missing required option: ‘--upload_token’"
151
- }
152
-
153
- function check_variant_name() {
154
- [[ -n $waldo_variant_name ]] || waldo_variant_name=${WALDO_VARIANT_NAME:-}
155
- }
156
-
157
- function convert_sha() {
158
- local _full_sha=$1
159
- local _full_name=$(git name-rev --refs='heads/*' --name-only "$_full_sha")
160
- local _abbr_sha=${_full_sha:0:7}
161
- local _abbr_name=$_full_name
162
- local _prefix="remotes/origin/"
163
-
164
- if [[ ${_full_name:0:${#_prefix}} == $_prefix ]]; then
165
- _abbr_name=${_full_name#$_prefix}
166
- else
167
- _abbr_name="local:${_full_name}"
168
- fi
169
-
170
- echo "${_abbr_sha}-${_abbr_name}"
171
- }
172
-
173
- function convert_shas() {
174
- local _list=
175
-
176
- while (( $# )); do
177
- local _item=$(convert_sha "$1")
178
-
179
- _list+=",\"${_item}\""
180
-
181
- shift
182
- done
183
-
184
- echo ${_list#?}
185
- }
186
-
187
- function create_build_payload() {
188
- local _parent_path=$(dirname "$waldo_build_path")
189
- local _build_name=$(basename "$waldo_build_path")
190
-
191
- case $waldo_build_suffix in
192
- app)
193
- ([[ -d $waldo_build_path && -r $waldo_build_path ]]) \
194
- || fail "Unable to read build at ‘${waldo_build_path}’"
195
-
196
- if [[ -z $(which zip) ]]; then
197
- fail "No ‘zip’ command found"
198
- fi
199
-
200
- waldo_build_payload_path="$waldo_working_path"/"$_build_name".zip
201
-
202
- (cd "$_parent_path" &>/dev/null && zip -qry "$waldo_build_payload_path" "$_build_name") || return
203
- ;;
204
-
205
- *)
206
- ([[ -f $waldo_build_path && -r $waldo_build_path ]]) \
207
- || fail "Unable to read build at ‘${waldo_build_path}’"
208
-
209
- waldo_build_payload_path=$waldo_build_path
210
- ;;
211
- esac
212
- }
213
-
214
- function create_symbols_payload() {
215
- [[ -n $waldo_symbols_path ]] || return 0
216
-
217
- local _parent_path=$(dirname "$waldo_symbols_path")
218
- local _symbols_name=$(basename "$waldo_symbols_path")
219
-
220
- case $waldo_symbols_suffix in
221
- dSYM)
222
- ([[ -d $waldo_symbols_path && -r $waldo_symbols_path ]]) \
223
- || fail "Unable to read symbols at ‘${waldo_symbols_path}’"
224
-
225
- if [[ -z $(which zip) ]]; then
226
- fail "No ‘zip’ command found"
227
- fi
228
-
229
- waldo_symbols_payload_path="$waldo_working_path"/"$_symbols_name".zip
230
-
231
- (cd "$_parent_path" &>/dev/null && zip -qry "$waldo_symbols_payload_path" "$_symbols_name") || return
232
- ;;
233
-
234
- xcarchive)
235
- ([[ -d $waldo_symbols_path && -r $waldo_symbols_path ]]) \
236
- || fail "Unable to read symbols at ‘${waldo_symbols_path}’"
237
-
238
- if [[ -z $(which zip) ]]; then
239
- fail "No ‘zip’ command found"
240
- fi
241
-
242
- local _tmp_symbols_path="$waldo_working_path"/"$_symbols_name"
243
-
244
- mkdir -p "$_tmp_symbols_path"
245
-
246
- cp -r "$waldo_symbols_path"/BCSymbolMaps "$_tmp_symbols_path"
247
- cp -r "$waldo_symbols_path"/dSYMs "$_tmp_symbols_path"
248
-
249
- waldo_symbols_payload_path="$_tmp_symbols_path".zip
250
-
251
- (cd "$waldo_working_path" &>/dev/null && zip -qry "$waldo_symbols_payload_path" "$_symbols_name") || return
252
- ;;
253
-
254
- *)
255
- ([[ -f $waldo_symbols_path && -r $waldo_symbols_path ]]) \
256
- || fail "Unable to read symbols at ‘${waldo_symbols_path}’"
257
-
258
- waldo_symbols_payload_path=$waldo_symbols_path
259
- ;;
260
- esac
261
- }
262
-
263
- function create_working_path() {
264
- waldo_working_path=/tmp/WaldoCLI-$$
265
-
266
- rm -rf "$waldo_working_path"
267
- mkdir -p "$waldo_working_path"
268
- }
269
-
270
- function curl_upload_build() {
271
- local _output_path="$1"
272
- local _authorization=$(get_authorization)
273
- local _content_type=$(get_build_content_type)
274
- local _user_agent=$(get_user_agent)
275
- local _url=$(make_build_url)
276
-
277
- curl $waldo_extra_args \
278
- --data-binary @"$waldo_build_payload_path" \
279
- --header "Authorization: $_authorization" \
280
- --header "Content-Type: $_content_type" \
281
- --header "User-Agent: $_user_agent" \
282
- --output "$_output_path" \
283
- "$_url"
284
-
285
- local _curl_status=$?
286
-
287
- if (( $_curl_status != 0 )); then
288
- fail "Unable to upload build to Waldo, curl error: ${_curl_status}, url: ${_url}"
289
- fi
290
- }
291
-
292
- function curl_upload_error() {
293
- local _message=$(json_escape "$1")
294
- local _ci=$(get_ci)
295
- local _authorization=$(get_authorization)
296
- local _content_type=$(get_error_content_type)
297
- local _user_agent=$(get_user_agent)
298
- local _url=$(make_error_url)
299
-
300
- curl --silent \
301
- --data "{\"message\":\"${_message}\",\"ci\":\"${_ci}\"}" \
302
- --header "Authorization: $_authorization" \
303
- --header "Content-Type: $_content_type" \
304
- --header "User-Agent: $_user_agent" \
305
- "$_url" &>/dev/null
306
- }
307
-
308
- function curl_upload_symbols() {
309
- local _output_path="$1"
310
- local _authorization=$(get_authorization)
311
- local _content_type=$(get_symbols_content_type)
312
- local _user_agent=$(get_user_agent)
313
- local _url=$(make_symbols_url)
314
-
315
- curl $waldo_extra_args \
316
- --data-binary @"$waldo_symbols_payload_path" \
317
- --header "Authorization: $_authorization" \
318
- --header "Content-Type: $_content_type" \
319
- --header "User-Agent: $_user_agent" \
320
- --output "$_output_path" \
321
- "$_url"
322
-
323
- local _curl_status=$?
324
-
325
- if (( $_curl_status != 0 )); then
326
- fail "Unable to upload symbols to Waldo, curl error: ${_curl_status}, url: ${_url}"
327
- fi
328
- }
329
-
330
- function delete_working_path() {
331
- if [[ -n $waldo_working_path ]]; then
332
- rm -rf "$waldo_working_path"
333
- fi
334
- }
335
-
336
- function display_summary() {
337
- echo ""
338
- echo "Build path: $(summarize "$waldo_build_path")"
339
- echo "Symbols path: $(summarize "$waldo_symbols_path")"
340
- echo "Variant name: $(summarize "$waldo_variant_name")"
341
- echo "Upload token: $(summarize_secure "$waldo_upload_token")"
342
- echo ""
343
-
344
- if [[ $waldo_extra_args == "--verbose" ]]; then
345
- echo "Build payload path: $(summarize "$waldo_build_payload_path")"
346
- echo "Symbols payload path: $(summarize "$waldo_symbols_payload_path")"
347
- echo ""
348
- fi
349
- }
350
-
351
- function display_usage() {
352
- cat <<EOF
353
-
354
- OVERVIEW: Upload build to Waldo
355
-
356
- USAGE: waldo [options] <build-path> [<symbols-path>]
357
-
358
- OPTIONS:
359
-
360
- --help Display available options
361
- --include_symbols Include symbols with the build upload
362
- --upload_token <value> Waldo upload token (overrides WALDO_UPLOAD_TOKEN)
363
- --variant_name <value> Waldo variant name (overrides WALDO_VARIANT_NAME)
364
- --verbose Display extra verbiage
365
- EOF
366
- }
367
-
368
- function display_version() {
369
- waldo_platform=$(get_platform)
370
-
371
- echo "Waldo CLI $waldo_cli_version ($waldo_platform)"
372
- }
373
-
374
- function fail() {
375
- local _message="waldo: $1"
376
-
377
- if [[ -n $waldo_upload_token ]]; then
378
- curl_upload_error "$1"
379
-
380
- local _curl_status=$?
381
-
382
- if (( $_curl_status == 0)); then
383
- _message+=" -- Waldo team has been informed"
384
- fi
385
- fi
386
-
387
- echo "" # flush stdout
388
- echo "$_message" 1>&2
389
- exit 1
390
- }
391
-
392
- function fail_usage() {
393
- [[ -z $waldo_upload_token ]] || curl_upload_error "$1"
394
-
395
- echo "" # flush stdout
396
- echo "waldo: $1" 1>&2
397
- display_usage
398
- exit 1
399
- }
400
-
401
- function find_symbols_path() {
402
- if [[ -e ${waldo_build_path}.dSYM.zip ]]; then
403
- echo "${waldo_build_path}.dSYM.zip"
404
- elif [[ -e ${waldo_build_path}.dSYM ]]; then
405
- echo "${waldo_build_path}.dSYM"
406
- fi
407
- }
408
-
409
- function get_authorization() {
410
- echo "Upload-Token $waldo_upload_token"
411
- }
412
-
413
- function get_build_content_type() {
414
- case $waldo_build_suffix in
415
- app) echo "application/zip" ;;
416
- *) echo "application/octet-stream" ;;
417
- esac
418
- }
419
-
420
- function get_ci() {
421
- if [[ -n ${APPCENTER_BUILD_ID:-} ]]; then
422
- echo "App Center"
423
- elif [[ ${BITRISE_IO:-false} == true ]]; then
424
- echo "Bitrise"
425
- elif [[ -n ${BUDDYBUILD_BUILD_ID:-} ]]; then
426
- echo "buddybuild"
427
- elif [[ ${CIRCLECI:-false} == true ]]; then
428
- echo "CircleCI"
429
- elif [[ ${GITHUB_ACTIONS:-false} == true ]]; then
430
- echo "GitHub Actions"
431
- elif [[ ${TRAVIS:-false} == true ]]; then
432
- echo "Travis CI"
433
- else
434
- echo "CLI"
435
- fi
436
- }
437
-
438
- function get_error_content_type() {
439
- echo "application/json"
440
- }
441
-
442
- function get_history() {
443
- local _shas=$(git log --format='%H' --skip=$(get_skip_count) -50)
444
- local _history=$(convert_shas $_shas)
445
-
446
- echo "[${_history}]" | websafe_base64_encode
447
- }
448
-
449
- function get_platform() {
450
- local _os_name=$(uname -s)
451
-
452
- case $_os_name in
453
- Darwin) echo "macOS" ;;
454
- *) echo "$_os_name" ;;
455
- esac
456
- }
457
-
458
- function get_skip_count() {
459
- if [[ ${GITHUB_ACTIONS:-false} == true && ${GITHUB_EVENT_NAME:-} == "pull_request" ]]; then
460
- echo "1"
461
- else
462
- echo "0"
463
- fi
464
- }
465
-
466
- function get_symbols_content_type() {
467
- echo "application/zip"
468
- }
469
-
470
- function get_user_agent() {
471
- if [[ -n $waldo_user_agent_override ]]; then
472
- echo "$waldo_user_agent_override"
473
- else
474
- echo "Waldo $(get_ci)/${waldo_build_flavor} v${waldo_cli_version}"
475
- fi
476
- }
477
-
478
- function json_escape() {
479
- local _result=${1//\\/\\\\} # \
480
-
481
- _result=${_result//\//\\\/} # /
482
- _result=${_result//\'/\\\'} # '
483
- _result=${_result//\"/\\\"} # "
484
-
485
- echo "$_result"
486
- }
487
-
488
- function make_build_url() {
489
- local _query=
490
-
491
- if [[ -n $waldo_history ]]; then
492
- _query+="&history=$waldo_history"
493
- fi
494
-
495
- if [[ -n $waldo_history_error ]]; then
496
- _query+="&historyError=$waldo_history_error"
497
- fi
498
-
499
- if [[ -n $waldo_variant_name ]]; then
500
- _query+="&variantName=$waldo_variant_name"
501
- fi
502
-
503
- if [[ -n $_query ]]; then
504
- echo "${waldo_api_build_endpoint}?${_query:1}"
505
- else
506
- echo "${waldo_api_build_endpoint}"
507
- fi
508
- }
509
-
510
- function make_error_url() {
511
- echo "${waldo_api_error_endpoint}"
512
- }
513
-
514
- function make_symbols_url() {
515
- echo "${waldo_api_symbols_endpoint/__ID__/$waldo_build_upload_id}"
516
- }
517
-
518
- function summarize() {
519
- local _value=$1
520
-
521
- if [[ -n $_value ]]; then
522
- echo "‘${_value}’"
523
- else
524
- echo "(none)"
525
- fi
526
- }
527
-
528
- function summarize_secure() {
529
- local _value=$1
530
-
531
- if [[ $waldo_extra_args != "--verbose" ]]; then
532
- local _prefix=${_value:0:6}
533
- local _suffix_len=$(( ${#_value} - ${#_prefix} ))
534
- local _secure='********************************'
535
-
536
- _value="${_prefix}${_secure:0:$_suffix_len}"
537
- fi
538
-
539
- summarize "$_value"
540
- }
541
-
542
- function upload_build() {
543
- local _build_name=$(basename "$waldo_build_path")
544
-
545
- local _response_path=$waldo_working_path/build_response.json
546
-
547
- echo "Uploading build to Waldo"
548
-
549
- [[ $waldo_extra_args == "--verbose" ]] && echo ""
550
-
551
- curl_upload_build "$_response_path"
552
-
553
- local _curl_status=$?
554
- local _response=$(cat "$_response_path" 2>/dev/null)
555
-
556
- if [[ $waldo_extra_args == "--verbose" ]]; then
557
- echo "$_response"
558
- echo ""
559
- fi
560
-
561
- check_build_status "$_response"
562
-
563
- if (( $_curl_status == 0 )); then
564
- echo "Build ‘${_build_name}’ successfully uploaded to Waldo!"
565
- fi
566
- }
567
-
568
- function upload_symbols() {
569
- [[ -n $waldo_symbols_path ]] || return 0
570
-
571
- local _symbols_name=$(basename "$waldo_symbols_path")
572
-
573
- local _response_path=$waldo_working_path/symbols_response.json
574
-
575
- echo "Uploading symbols to Waldo"
576
-
577
- [[ $waldo_extra_args == "--verbose" ]] && echo ""
578
-
579
- curl_upload_symbols "$_response_path"
580
-
581
- local _curl_status=$?
582
- local _response=$(cat "$_response_path" 2>/dev/null)
583
-
584
- if [[ $waldo_extra_args == "--verbose" ]]; then
585
- echo "$_response"
586
- echo ""
587
- fi
588
-
589
- check_symbols_status "$_response"
590
-
591
- if (( $_curl_status == 0 )); then
592
- echo "Symbols in ‘${_symbols_name}’ successfully uploaded to Waldo!"
593
- fi
594
- }
595
-
596
- function websafe_base64_encode() {
597
- base64 | tr -d '\n' | tr '/+' '_-' | sed 's/=/%3D/g'
598
- }
599
-
600
- display_version
601
-
602
- while (( $# )); do
603
- case $1 in
604
- --help)
605
- display_usage
606
- exit
607
- ;;
608
-
609
- --include_symbols)
610
- waldo_include_symbols=true
611
- ;;
612
-
613
- --upload_token)
614
- if (( $# < 2 )) || [[ -z $2 || ${2:0:1} == "-" ]]; then
615
- fail_usage "Missing required value for option: ‘${1}’"
616
- else
617
- waldo_upload_token=$2
618
- shift
619
- fi
620
- ;;
621
-
622
- --variant_name)
623
- if (( $# < 2 )) || [[ -z $2 || ${2:0:1} == "-" ]]; then
624
- fail_usage "Missing required value for option: ‘${1}’"
625
- else
626
- waldo_variant_name=$2
627
- shift
628
- fi
629
- ;;
630
-
631
- --verbose)
632
- waldo_extra_args="--verbose"
633
- ;;
634
-
635
- -*)
636
- fail_usage "Unknown option: ‘${1}’"
637
- ;;
638
-
639
- *)
640
- if [[ -z $waldo_build_path ]]; then
641
- waldo_build_path=$1
642
- elif [[ -z $waldo_symbols_path ]]; then
643
- waldo_symbols_path=$1
644
- else
645
- fail_usage "Unknown argument: ‘${1}’"
646
- fi
647
- ;;
648
- esac
649
-
650
- shift
651
- done
652
-
653
- check_platform || exit
654
- check_build_path || exit
655
- check_symbols_path || exit
656
- check_history || exit
657
- check_upload_token || exit
658
- check_variant_name || exit
659
-
660
- create_working_path || exit
661
-
662
- create_build_payload || exit
663
- create_symbols_payload || exit
664
-
665
- display_summary
666
-
667
- upload_build || exit
668
- upload_symbols || exit
669
-
670
- delete_working_path # failure is OK
671
-
672
- exit