fastlane 2.224.0 → 2.226.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +96 -96
- data/deliver/lib/deliver/options.rb +1 -1
- data/fastlane/lib/fastlane/actions/app_store_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/import_from_git.rb +11 -4
- data/fastlane/lib/fastlane/actions/latest_testflight_build_number.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
- data/fastlane/lib/fastlane/actions/testfairy.rb +36 -2
- data/fastlane/lib/fastlane/fast_file.rb +9 -6
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +20 -4
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +1 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +1 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +1 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +15 -25
- data/precheck/lib/precheck/options.rb +1 -1
- data/produce/lib/produce/options.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +123 -22
- data/spaceship/lib/spaceship/errors.rb +15 -0
- data/supply/lib/supply/uploader.rb +8 -4
- metadata +36 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz: '
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0924a4ae4adee9710990cc67bf6bd16a817bb84d849d747f725e4dea8ad29548'
|
4
|
+
data.tar.gz: 3ae95f0859f02531ae57cd5381b6e5a295e64c899a487cbcea074ecfa196e646
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd1fc74b283c81699207cfc9261827986150a2066903ab12b762acb95e6ac00c5304da48b366e8817761fbe6377169f0742e392ac8fb355905b7fb94cd2af668
|
7
|
+
data.tar.gz: 1671c16656f5b3a71ba26432aba6c8491339c8c205fadf8cc968ddf576ea0b9c55ecb693a47e4d1663d11c456041d9d25b27b3ca63de6b6cce61a7556124ff02
|
data/README.md
CHANGED
@@ -35,49 +35,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
35
35
|
<!-- This table is regenerated and resorted on each release -->
|
36
36
|
<table id='team'>
|
37
37
|
<tr>
|
38
|
-
<td id='
|
39
|
-
<a href='https://github.com/
|
40
|
-
<img src='https://github.com/
|
41
|
-
</a>
|
42
|
-
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
43
|
-
</td>
|
44
|
-
<td id='helmut-januschka'>
|
45
|
-
<a href='https://github.com/hjanuschka'>
|
46
|
-
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
47
|
-
</a>
|
48
|
-
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
49
|
-
</td>
|
50
|
-
<td id='max-ott'>
|
51
|
-
<a href='https://github.com/max-ott'>
|
52
|
-
<img src='https://github.com/max-ott.png' width='140px;'>
|
53
|
-
</a>
|
54
|
-
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
55
|
-
</td>
|
56
|
-
<td id='olivier-halligon'>
|
57
|
-
<a href='https://github.com/AliSoftware'>
|
58
|
-
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
59
|
-
</a>
|
60
|
-
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
61
|
-
</td>
|
62
|
-
<td id='felix-krause'>
|
63
|
-
<a href='https://github.com/KrauseFx'>
|
64
|
-
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
65
|
-
</a>
|
66
|
-
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
67
|
-
</td>
|
68
|
-
</tr>
|
69
|
-
<tr>
|
70
|
-
<td id='danielle-tomlinson'>
|
71
|
-
<a href='https://github.com/endocrimes'>
|
72
|
-
<img src='https://github.com/endocrimes.png' width='140px;'>
|
38
|
+
<td id='jimmy-dee'>
|
39
|
+
<a href='https://github.com/jdee'>
|
40
|
+
<img src='https://github.com/jdee.png' width='140px;'>
|
73
41
|
</a>
|
74
|
-
<h4 align='center'
|
42
|
+
<h4 align='center'>Jimmy Dee</h4>
|
75
43
|
</td>
|
76
|
-
<td id='
|
77
|
-
<a href='https://github.com/
|
78
|
-
<img src='https://github.com/
|
44
|
+
<td id='stefan-natchev'>
|
45
|
+
<a href='https://github.com/snatchev'>
|
46
|
+
<img src='https://github.com/snatchev.png' width='140px;'>
|
79
47
|
</a>
|
80
|
-
<h4 align='center'><a href='https://twitter.com/
|
48
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
81
49
|
</td>
|
82
50
|
<td id='josh-holtz'>
|
83
51
|
<a href='https://github.com/joshdholtz'>
|
@@ -91,69 +59,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
91
59
|
</a>
|
92
60
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
93
61
|
</td>
|
94
|
-
<td id='fumiya-nakamura'>
|
95
|
-
<a href='https://github.com/nafu'>
|
96
|
-
<img src='https://github.com/nafu.png' width='140px;'>
|
97
|
-
</a>
|
98
|
-
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
99
|
-
</td>
|
100
|
-
</tr>
|
101
|
-
<tr>
|
102
|
-
<td id='jorge-revuelta-h'>
|
103
|
-
<a href='https://github.com/minuscorp'>
|
104
|
-
<img src='https://github.com/minuscorp.png' width='140px;'>
|
105
|
-
</a>
|
106
|
-
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
107
|
-
</td>
|
108
62
|
<td id='roger-oba'>
|
109
63
|
<a href='https://github.com/rogerluan'>
|
110
64
|
<img src='https://github.com/rogerluan.png' width='140px;'>
|
111
65
|
</a>
|
112
66
|
<h4 align='center'><a href='https://twitter.com/rogerluan_'>Roger Oba</a></h4>
|
113
67
|
</td>
|
68
|
+
</tr>
|
69
|
+
<tr>
|
114
70
|
<td id='satoshi-namai'>
|
115
71
|
<a href='https://github.com/ainame'>
|
116
72
|
<img src='https://github.com/ainame.png' width='140px;'>
|
117
73
|
</a>
|
118
74
|
<h4 align='center'><a href='https://twitter.com/ainame'>Satoshi Namai</a></h4>
|
119
75
|
</td>
|
120
|
-
<td id='
|
121
|
-
<a href='https://github.com/
|
122
|
-
<img src='https://github.com/
|
76
|
+
<td id='daniel-jankowski'>
|
77
|
+
<a href='https://github.com/mollyIV'>
|
78
|
+
<img src='https://github.com/mollyIV.png' width='140px;'>
|
123
79
|
</a>
|
124
|
-
<h4 align='center'><a href='https://twitter.com/
|
80
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
125
81
|
</td>
|
126
|
-
<td id='
|
127
|
-
<a href='https://github.com/
|
128
|
-
<img src='https://github.com/
|
82
|
+
<td id='aaron-brager'>
|
83
|
+
<a href='https://github.com/getaaron'>
|
84
|
+
<img src='https://github.com/getaaron.png' width='140px;'>
|
129
85
|
</a>
|
130
|
-
<h4 align='center'><a href='https://twitter.com/
|
86
|
+
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
131
87
|
</td>
|
132
|
-
|
133
|
-
<
|
134
|
-
<
|
135
|
-
<a href='https://github.com/jdee'>
|
136
|
-
<img src='https://github.com/jdee.png' width='140px;'>
|
88
|
+
<td id='olivier-halligon'>
|
89
|
+
<a href='https://github.com/AliSoftware'>
|
90
|
+
<img src='https://github.com/AliSoftware.png' width='140px;'>
|
137
91
|
</a>
|
138
|
-
<h4 align='center'>
|
92
|
+
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
139
93
|
</td>
|
140
|
-
<td id='
|
141
|
-
<a href='https://github.com/
|
142
|
-
<img src='https://github.com/
|
94
|
+
<td id='andrew-mcburney'>
|
95
|
+
<a href='https://github.com/armcburney'>
|
96
|
+
<img src='https://github.com/armcburney.png' width='140px;'>
|
143
97
|
</a>
|
144
|
-
<h4 align='center'><a href='https://twitter.com/
|
98
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
145
99
|
</td>
|
146
|
-
|
147
|
-
<
|
148
|
-
<
|
100
|
+
</tr>
|
101
|
+
<tr>
|
102
|
+
<td id='danielle-tomlinson'>
|
103
|
+
<a href='https://github.com/endocrimes'>
|
104
|
+
<img src='https://github.com/endocrimes.png' width='140px;'>
|
149
105
|
</a>
|
150
|
-
<h4 align='center'><a href='https://twitter.com/
|
106
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
151
107
|
</td>
|
152
|
-
<td id='
|
153
|
-
<a href='https://github.com/
|
154
|
-
<img src='https://github.com/
|
108
|
+
<td id='kohki-miki'>
|
109
|
+
<a href='https://github.com/giginet'>
|
110
|
+
<img src='https://github.com/giginet.png' width='140px;'>
|
155
111
|
</a>
|
156
|
-
<h4 align='center'><a href='https://twitter.com/
|
112
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
113
|
+
</td>
|
114
|
+
<td id='manu-wallner'>
|
115
|
+
<a href='https://github.com/milch'>
|
116
|
+
<img src='https://github.com/milch.png' width='140px;'>
|
117
|
+
</a>
|
118
|
+
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
157
119
|
</td>
|
158
120
|
<td id='luka-mirosevic'>
|
159
121
|
<a href='https://github.com/lmirosevic'>
|
@@ -161,25 +123,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
161
123
|
</a>
|
162
124
|
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
163
125
|
</td>
|
126
|
+
<td id='felix-krause'>
|
127
|
+
<a href='https://github.com/KrauseFx'>
|
128
|
+
<img src='https://github.com/KrauseFx.png' width='140px;'>
|
129
|
+
</a>
|
130
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
131
|
+
</td>
|
164
132
|
</tr>
|
165
133
|
<tr>
|
166
|
-
<td id='
|
167
|
-
<a href='https://github.com/
|
168
|
-
<img src='https://github.com/
|
134
|
+
<td id='helmut-januschka'>
|
135
|
+
<a href='https://github.com/hjanuschka'>
|
136
|
+
<img src='https://github.com/hjanuschka.png' width='140px;'>
|
169
137
|
</a>
|
170
|
-
<h4 align='center'><a href='https://twitter.com/
|
138
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
171
139
|
</td>
|
172
|
-
<td id='
|
173
|
-
<a href='https://github.com/
|
174
|
-
<img src='https://github.com/
|
140
|
+
<td id='max-ott'>
|
141
|
+
<a href='https://github.com/max-ott'>
|
142
|
+
<img src='https://github.com/max-ott.png' width='140px;'>
|
175
143
|
</a>
|
176
|
-
<h4 align='center'
|
144
|
+
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
177
145
|
</td>
|
178
|
-
<td id='
|
179
|
-
<a href='https://github.com/
|
180
|
-
<img src='https://github.com/
|
146
|
+
<td id='jorge-revuelta-h'>
|
147
|
+
<a href='https://github.com/minuscorp'>
|
148
|
+
<img src='https://github.com/minuscorp.png' width='140px;'>
|
181
149
|
</a>
|
182
|
-
<h4 align='center'><a href='https://twitter.com/
|
150
|
+
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
183
151
|
</td>
|
184
152
|
<td id='jan-piotrowski'>
|
185
153
|
<a href='https://github.com/janpio'>
|
@@ -187,20 +155,52 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
187
155
|
</a>
|
188
156
|
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
189
157
|
</td>
|
190
|
-
<td id='
|
191
|
-
<a href='https://github.com/
|
192
|
-
<img src='https://github.com/
|
158
|
+
<td id='manish-rathi'>
|
159
|
+
<a href='https://github.com/crazymanish'>
|
160
|
+
<img src='https://github.com/crazymanish.png' width='140px;'>
|
193
161
|
</a>
|
194
|
-
<h4 align='center'><a href='https://twitter.com/
|
162
|
+
<h4 align='center'><a href='https://twitter.com/iammanishrathi'>Manish Rathi</a></h4>
|
195
163
|
</td>
|
196
164
|
</tr>
|
197
165
|
<tr>
|
166
|
+
<td id='łukasz-grabowski'>
|
167
|
+
<a href='https://github.com/lucgrabowski'>
|
168
|
+
<img src='https://github.com/lucgrabowski.png' width='140px;'>
|
169
|
+
</a>
|
170
|
+
<h4 align='center'>Łukasz Grabowski</h4>
|
171
|
+
</td>
|
172
|
+
<td id='matthew-ellis'>
|
173
|
+
<a href='https://github.com/matthewellis'>
|
174
|
+
<img src='https://github.com/matthewellis.png' width='140px;'>
|
175
|
+
</a>
|
176
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
177
|
+
</td>
|
178
|
+
<td id='jérôme-lacoste'>
|
179
|
+
<a href='https://github.com/lacostej'>
|
180
|
+
<img src='https://github.com/lacostej.png' width='140px;'>
|
181
|
+
</a>
|
182
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
183
|
+
</td>
|
198
184
|
<td id='maksym-grebenets'>
|
199
185
|
<a href='https://github.com/mgrebenets'>
|
200
186
|
<img src='https://github.com/mgrebenets.png' width='140px;'>
|
201
187
|
</a>
|
202
188
|
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
203
189
|
</td>
|
190
|
+
<td id='iulian-onofrei'>
|
191
|
+
<a href='https://github.com/revolter'>
|
192
|
+
<img src='https://github.com/revolter.png' width='140px;'>
|
193
|
+
</a>
|
194
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
195
|
+
</td>
|
196
|
+
</tr>
|
197
|
+
<tr>
|
198
|
+
<td id='fumiya-nakamura'>
|
199
|
+
<a href='https://github.com/nafu'>
|
200
|
+
<img src='https://github.com/nafu.png' width='140px;'>
|
201
|
+
</a>
|
202
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
203
|
+
</td>
|
204
204
|
</table>
|
205
205
|
|
206
206
|
Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
|
@@ -99,7 +99,7 @@ module Deliver
|
|
99
99
|
optional: true,
|
100
100
|
default_value: "ios",
|
101
101
|
verify_block: proc do |value|
|
102
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
102
|
+
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
|
103
103
|
end),
|
104
104
|
|
105
105
|
# live version
|
@@ -186,7 +186,7 @@ module Fastlane
|
|
186
186
|
optional: true,
|
187
187
|
default_value: "ios",
|
188
188
|
verify_block: proc do |value|
|
189
|
-
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %(
|
189
|
+
UI.user_error!("The platform can only be ios, appletvos, xros or osx") unless %w(ios appletvos xros osx).include?(value)
|
190
190
|
end),
|
191
191
|
FastlaneCore::ConfigItem.new(key: :team_name,
|
192
192
|
short_option: "-e",
|
@@ -30,9 +30,10 @@ module Fastlane
|
|
30
30
|
default_value: 'HEAD',
|
31
31
|
optional: true),
|
32
32
|
FastlaneCore::ConfigItem.new(key: :dependencies,
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
description: "The array of additional Fastfiles in the repository",
|
34
|
+
default_value: [],
|
35
|
+
type: Array,
|
36
|
+
optional: true),
|
36
37
|
FastlaneCore::ConfigItem.new(key: :path,
|
37
38
|
description: "The path of the Fastfile in the repository",
|
38
39
|
default_value: 'fastlane/Fastfile',
|
@@ -43,6 +44,11 @@ module Fastlane
|
|
43
44
|
optional: true),
|
44
45
|
FastlaneCore::ConfigItem.new(key: :cache_path,
|
45
46
|
description: "The path to a directory where the repository should be cloned into. Defaults to `nil`, which causes the repository to be cloned on every call, to a temporary directory",
|
47
|
+
optional: true),
|
48
|
+
FastlaneCore::ConfigItem.new(key: :git_extra_headers,
|
49
|
+
description: "An optional list of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)",
|
50
|
+
default_value: [],
|
51
|
+
type: Array,
|
46
52
|
optional: true)
|
47
53
|
]
|
48
54
|
end
|
@@ -68,7 +74,8 @@ module Fastlane
|
|
68
74
|
branch: "HEAD", # The branch to checkout on the repository.
|
69
75
|
path: "fastlane/Fastfile", # The path of the Fastfile in the repository.
|
70
76
|
version: [">= 1.1.0", "< 2.0.0"], # The version to checkout on the repository. Multiple conditions can be used to select the latest version within constraints.
|
71
|
-
cache_path: "~/.cache/fastlane/imported" # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
77
|
+
cache_path: "~/.cache/fastlane/imported", # A directory in which the repository will be added, which means that it will not be cloned again on subsequent calls.
|
78
|
+
git_extra_headers: ["Authorization: Basic <YOUR BASE64 KEY>", "Cache-Control: no-cache"]
|
72
79
|
)'
|
73
80
|
]
|
74
81
|
end
|
@@ -83,7 +83,7 @@ module Fastlane
|
|
83
83
|
optional: true,
|
84
84
|
default_value: "ios",
|
85
85
|
verify_block: proc do |value|
|
86
|
-
UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %(
|
86
|
+
UI.user_error!("The platform can only be ios, osx, xros or appletvos") unless %w(osx ios appletvos xros).include?(value)
|
87
87
|
end),
|
88
88
|
FastlaneCore::ConfigItem.new(key: :initial_build_number,
|
89
89
|
env_name: "INITIAL_BUILD_NUMBER",
|
@@ -58,7 +58,7 @@ module Fastlane
|
|
58
58
|
optional: true,
|
59
59
|
default_value: platform.empty? ? "ios" : platform,
|
60
60
|
verify_block: proc do |value|
|
61
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
61
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
62
62
|
end),
|
63
63
|
FastlaneCore::ConfigItem.new(key: :udid,
|
64
64
|
env_name: "FL_REGISTER_DEVICE_UDID",
|
@@ -160,7 +160,7 @@ module Fastlane
|
|
160
160
|
optional: true,
|
161
161
|
default_value: platform.empty? ? "ios" : platform,
|
162
162
|
verify_block: proc do |value|
|
163
|
-
UI.user_error!("The platform can only be ios or mac") unless %(
|
163
|
+
UI.user_error!("The platform can only be ios or mac") unless %w(ios mac).include?(value)
|
164
164
|
end)
|
165
165
|
]
|
166
166
|
end
|
@@ -98,6 +98,14 @@ module Fastlane
|
|
98
98
|
[key, value]
|
99
99
|
when :tags
|
100
100
|
[key, value.join(',')]
|
101
|
+
when :folder_name
|
102
|
+
[key, value]
|
103
|
+
when :landing_page_mode
|
104
|
+
[key, value]
|
105
|
+
when :upload_to_saucelabs
|
106
|
+
[key, value]
|
107
|
+
when :platform
|
108
|
+
[key, value]
|
101
109
|
else
|
102
110
|
UI.user_error!("Unknown parameter: #{key}")
|
103
111
|
end
|
@@ -237,7 +245,7 @@ module Fastlane
|
|
237
245
|
FastlaneCore::ConfigItem.new(key: :custom,
|
238
246
|
optional: true,
|
239
247
|
env_name: "FL_TESTFAIRY_CUSTOM",
|
240
|
-
description: "Array of custom options. Contact support
|
248
|
+
description: "Array of custom options. Contact support for more information",
|
241
249
|
default_value: ''),
|
242
250
|
FastlaneCore::ConfigItem.new(key: :timeout,
|
243
251
|
env_name: "FL_TESTFAIRY_TIMEOUT",
|
@@ -249,7 +257,33 @@ module Fastlane
|
|
249
257
|
env_name: "FL_TESTFAIRY_TAGS",
|
250
258
|
description: "Custom tags that can be used to organize your builds",
|
251
259
|
type: Array,
|
252
|
-
default_value: [])
|
260
|
+
default_value: []),
|
261
|
+
FastlaneCore::ConfigItem.new(key: :folder_name,
|
262
|
+
optional: true,
|
263
|
+
env_name: "FL_TESTFAIRY_FOLDER_NAME",
|
264
|
+
description: "Name of the dashboard folder that contains this app",
|
265
|
+
default_value: ''),
|
266
|
+
FastlaneCore::ConfigItem.new(key: :landing_page_mode,
|
267
|
+
optional: true,
|
268
|
+
env_name: "FL_TESTFAIRY_LANDING_PAGE_MODE",
|
269
|
+
description: "Visibility of build landing after upload. Can be 'open' or 'closed'",
|
270
|
+
default_value: 'open',
|
271
|
+
verify_block: proc do |value|
|
272
|
+
UI.user_error!("The landing page mode can only be open or closed") unless %w(open closed).include?(value)
|
273
|
+
end),
|
274
|
+
FastlaneCore::ConfigItem.new(key: :upload_to_saucelabs,
|
275
|
+
optional: true,
|
276
|
+
env_name: "FL_TESTFAIRY_UPLOAD_TO_SAUCELABS",
|
277
|
+
description: "Upload file directly to Sauce Labs. It can be 'on' or 'off'",
|
278
|
+
default_value: 'off',
|
279
|
+
verify_block: proc do |value|
|
280
|
+
UI.user_error!("The upload to Sauce Labs can only be on or off") unless %w(on off).include?(value)
|
281
|
+
end),
|
282
|
+
FastlaneCore::ConfigItem.new(key: :platform,
|
283
|
+
optional: true,
|
284
|
+
env_name: "FL_TESTFAIRY_PLATFORM",
|
285
|
+
description: "Use if upload build is not iOS or Android. Contact support for more information",
|
286
|
+
default_value: '')
|
253
287
|
]
|
254
288
|
end
|
255
289
|
|
@@ -278,7 +278,8 @@ module Fastlane
|
|
278
278
|
# @param version [String, Array] Version requirement for repo tags
|
279
279
|
# @param dependencies [Array] An optional array of additional Fastfiles in the repository
|
280
280
|
# @param cache_path [String] An optional path to a directory where the repository should be cloned into
|
281
|
-
|
281
|
+
# @param git_extra_headers [Array] An optional array of custom HTTP headers to access the git repo (`Authorization: Basic <YOUR BASE64 KEY>`, `Cache-Control: no-cache`, etc.)
|
282
|
+
def import_from_git(url: nil, branch: 'HEAD', path: 'fastlane/Fastfile', version: nil, dependencies: [], cache_path: nil, git_extra_headers: []) # rubocop:disable Metrics/PerceivedComplexity
|
282
283
|
UI.user_error!("Please pass a path to the `import_from_git` action") if url.to_s.length == 0
|
283
284
|
|
284
285
|
Actions.execute_action('import_from_git') do
|
@@ -297,8 +298,6 @@ module Fastlane
|
|
297
298
|
import_block = proc do |target_path|
|
298
299
|
clone_folder = File.join(target_path, repo_name)
|
299
300
|
|
300
|
-
branch_option = "--branch #{branch}" if branch != 'HEAD'
|
301
|
-
|
302
301
|
checkout_dependencies = dependencies.map(&:shellescape).join(" ")
|
303
302
|
|
304
303
|
# If the current call is eligible for caching, we check out all the
|
@@ -309,12 +308,16 @@ module Fastlane
|
|
309
308
|
if Dir[clone_folder].empty?
|
310
309
|
UI.message("Cloning remote git repo...")
|
311
310
|
Helper.with_env_values('GIT_TERMINAL_PROMPT' => '0') do
|
311
|
+
command = ['git', 'clone', url, clone_folder, '--no-checkout']
|
312
312
|
# When using cached clones, we need the entire repository history
|
313
313
|
# so we can switch between tags or branches instantly, or else,
|
314
314
|
# it would defeat the caching's purpose.
|
315
|
-
|
316
|
-
|
317
|
-
|
315
|
+
command += ['--depth', '1'] unless is_eligible_for_caching
|
316
|
+
command += ['--branch', branch] unless branch == 'HEAD'
|
317
|
+
git_extra_headers.each do |header|
|
318
|
+
command += ['--config', "http.extraHeader=#{header}"]
|
319
|
+
end
|
320
|
+
Actions.sh(*command)
|
318
321
|
end
|
319
322
|
end
|
320
323
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Fastlane
|
2
|
-
VERSION = '2.
|
2
|
+
VERSION = '2.226.0'.freeze
|
3
3
|
SUMMARY = "The easiest way to build and release mobile apps.".freeze
|
4
4
|
DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
|
5
5
|
MINIMUM_XCODE_RELEASE = "7.0".freeze
|
@@ -11602,9 +11602,13 @@ public func teamName() {
|
|
11602
11602
|
- autoUpdate: Allows an easy upgrade of all users to the current version. To enable set to 'on'
|
11603
11603
|
- notify: Send email to testers
|
11604
11604
|
- options: Array of options (shake,video_only_wifi,anonymous)
|
11605
|
-
- custom: Array of custom options. Contact support
|
11605
|
+
- custom: Array of custom options. Contact support for more information
|
11606
11606
|
- timeout: Request timeout in seconds
|
11607
11607
|
- tags: Custom tags that can be used to organize your builds
|
11608
|
+
- folderName: Name of the dashboard folder that contains this app
|
11609
|
+
- landingPageMode: Visibility of build landing after upload. Can be 'open' or 'closed'
|
11610
|
+
- uploadToSaucelabs: Upload file directly to Sauce Labs. It can be 'on' or 'off'
|
11611
|
+
- platform: Use if upload build is not iOS or Android. Contact support for more information
|
11608
11612
|
|
11609
11613
|
You can retrieve your API key on [your settings page](https://free.testfairy.com/settings/)
|
11610
11614
|
*/
|
@@ -11621,7 +11625,11 @@ public func testfairy(apiKey: String,
|
|
11621
11625
|
options: [String] = [],
|
11622
11626
|
custom: String = "",
|
11623
11627
|
timeout: OptionalConfigValue<Int?> = .fastlaneDefault(nil),
|
11624
|
-
tags: [String] = []
|
11628
|
+
tags: [String] = [],
|
11629
|
+
folderName: String = "",
|
11630
|
+
landingPageMode: String = "open",
|
11631
|
+
uploadToSaucelabs: String = "off",
|
11632
|
+
platform: String = "")
|
11625
11633
|
{
|
11626
11634
|
let apiKeyArg = RubyCommand.Argument(name: "api_key", value: apiKey, type: nil)
|
11627
11635
|
let ipaArg = ipa.asRubyArgument(name: "ipa", type: nil)
|
@@ -11637,6 +11645,10 @@ public func testfairy(apiKey: String,
|
|
11637
11645
|
let customArg = RubyCommand.Argument(name: "custom", value: custom, type: nil)
|
11638
11646
|
let timeoutArg = timeout.asRubyArgument(name: "timeout", type: nil)
|
11639
11647
|
let tagsArg = RubyCommand.Argument(name: "tags", value: tags, type: nil)
|
11648
|
+
let folderNameArg = RubyCommand.Argument(name: "folder_name", value: folderName, type: nil)
|
11649
|
+
let landingPageModeArg = RubyCommand.Argument(name: "landing_page_mode", value: landingPageMode, type: nil)
|
11650
|
+
let uploadToSaucelabsArg = RubyCommand.Argument(name: "upload_to_saucelabs", value: uploadToSaucelabs, type: nil)
|
11651
|
+
let platformArg = RubyCommand.Argument(name: "platform", value: platform, type: nil)
|
11640
11652
|
let array: [RubyCommand.Argument?] = [apiKeyArg,
|
11641
11653
|
ipaArg,
|
11642
11654
|
apkArg,
|
@@ -11650,7 +11662,11 @@ public func testfairy(apiKey: String,
|
|
11650
11662
|
optionsArg,
|
11651
11663
|
customArg,
|
11652
11664
|
timeoutArg,
|
11653
|
-
tagsArg
|
11665
|
+
tagsArg,
|
11666
|
+
folderNameArg,
|
11667
|
+
landingPageModeArg,
|
11668
|
+
uploadToSaucelabsArg,
|
11669
|
+
platformArg]
|
11654
11670
|
let args: [RubyCommand.Argument] = array
|
11655
11671
|
.filter { $0?.value != nil }
|
11656
11672
|
.compactMap { $0 }
|
@@ -13861,4 +13877,4 @@ public let snapshotfile: Snapshotfile = .init()
|
|
13861
13877
|
|
13862
13878
|
// Please don't remove the lines below
|
13863
13879
|
// They are used to detect outdated files
|
13864
|
-
// FastlaneRunnerAPIVersion [0.9.
|
13880
|
+
// FastlaneRunnerAPIVersion [0.9.185]
|
@@ -2,50 +2,40 @@
|
|
2
2
|
"entries": {
|
3
3
|
"brew": {
|
4
4
|
"swiftformat": {
|
5
|
-
"version": "0.54.
|
5
|
+
"version": "0.54.6",
|
6
6
|
"bottle": {
|
7
7
|
"rebuild": 0,
|
8
8
|
"root_url": "https://ghcr.io/v2/homebrew/core",
|
9
9
|
"files": {
|
10
10
|
"arm64_sequoia": {
|
11
11
|
"cellar": ":any_skip_relocation",
|
12
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
13
|
-
"sha256": "
|
12
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c",
|
13
|
+
"sha256": "fda0a46091e8c4a1a913e08e29a92159ed747d83403508e0b5408e88e68cdf0c"
|
14
14
|
},
|
15
15
|
"arm64_sonoma": {
|
16
16
|
"cellar": ":any_skip_relocation",
|
17
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
18
|
-
"sha256": "
|
17
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198",
|
18
|
+
"sha256": "2c937e3425e9b44a73eb5ae4a83604b4476f901866014c01c1ebd3f3a8d9c198"
|
19
19
|
},
|
20
20
|
"arm64_ventura": {
|
21
21
|
"cellar": ":any_skip_relocation",
|
22
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
23
|
-
"sha256": "
|
24
|
-
},
|
25
|
-
"arm64_monterey": {
|
26
|
-
"cellar": ":any_skip_relocation",
|
27
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4",
|
28
|
-
"sha256": "3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4"
|
22
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1",
|
23
|
+
"sha256": "d68be9490bce8cb196933f1f421f791b0b9758a759956edfaf166f88dfca78e1"
|
29
24
|
},
|
30
25
|
"sonoma": {
|
31
26
|
"cellar": ":any_skip_relocation",
|
32
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
33
|
-
"sha256": "
|
27
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b",
|
28
|
+
"sha256": "784d61fca33bdbbdf96f8f23db2a0ea849ef62cb251eedfe83863869db84359b"
|
34
29
|
},
|
35
30
|
"ventura": {
|
36
31
|
"cellar": ":any_skip_relocation",
|
37
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
38
|
-
"sha256": "
|
39
|
-
},
|
40
|
-
"monterey": {
|
41
|
-
"cellar": ":any_skip_relocation",
|
42
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e",
|
43
|
-
"sha256": "8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e"
|
32
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe",
|
33
|
+
"sha256": "7845bd9bf8f0f94980f38d0ac322a5ee41bde07d18ec0c93a343c4aa7d2606fe"
|
44
34
|
},
|
45
35
|
"x86_64_linux": {
|
46
36
|
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
|
47
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
48
|
-
"sha256": "
|
37
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13",
|
38
|
+
"sha256": "14756d1f83aedf183be980541393c3e4d9cfa47dee3dbfdb665a3461f5045e13"
|
49
39
|
}
|
50
40
|
}
|
51
41
|
}
|
@@ -87,12 +77,12 @@
|
|
87
77
|
"macOS": "13.6"
|
88
78
|
},
|
89
79
|
"sonoma": {
|
90
|
-
"HOMEBREW_VERSION": "4.4.
|
80
|
+
"HOMEBREW_VERSION": "4.4.1",
|
91
81
|
"HOMEBREW_PREFIX": "/opt/homebrew",
|
92
82
|
"Homebrew/homebrew-core": "api",
|
93
83
|
"CLT": "16.0.0.0.1.1724870825",
|
94
84
|
"Xcode": "15.4",
|
95
|
-
"macOS": "14.
|
85
|
+
"macOS": "14.7"
|
96
86
|
}
|
97
87
|
}
|
98
88
|
}
|
@@ -84,7 +84,7 @@ module Precheck
|
|
84
84
|
optional: true,
|
85
85
|
default_value: "ios",
|
86
86
|
verify_block: proc do |value|
|
87
|
-
UI.user_error!("The platform can only be ios, appletvos, or osx") unless %(
|
87
|
+
UI.user_error!("The platform can only be ios, appletvos, or osx") unless %w(ios appletvos osx).include?(value)
|
88
88
|
end),
|
89
89
|
FastlaneCore::ConfigItem.new(key: :default_rule_level,
|
90
90
|
short_option: "-r",
|
@@ -54,7 +54,7 @@ module Produce
|
|
54
54
|
optional: true,
|
55
55
|
default_value: "ios",
|
56
56
|
verify_block: proc do |value|
|
57
|
-
UI.user_error!("The platform can only be ios or osx") unless %(
|
57
|
+
UI.user_error!("The platform can only be ios or osx") unless %w(ios osx tvos).include?(value)
|
58
58
|
end),
|
59
59
|
FastlaneCore::ConfigItem.new(key: :platforms,
|
60
60
|
short_option: "-J",
|
@@ -450,6 +450,94 @@ module Spaceship
|
|
450
450
|
return false
|
451
451
|
end
|
452
452
|
|
453
|
+
def do_sirp(user, password, modified_cookie)
|
454
|
+
require 'fastlane-sirp'
|
455
|
+
require 'base64'
|
456
|
+
|
457
|
+
client = SIRP::Client.new(2048)
|
458
|
+
a = client.start_authentication
|
459
|
+
|
460
|
+
data = {
|
461
|
+
a: Base64.strict_encode64(to_byte(a)),
|
462
|
+
accountName: user,
|
463
|
+
protocols: ['s2k', 's2k_fo']
|
464
|
+
}
|
465
|
+
|
466
|
+
response = request(:post) do |req|
|
467
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin/init")
|
468
|
+
req.body = data.to_json
|
469
|
+
req.headers['Content-Type'] = 'application/json'
|
470
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
471
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
472
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
473
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
474
|
+
end
|
475
|
+
|
476
|
+
puts("Received SIRP signin init response: #{response.body}") if Spaceship::Globals.verbose?
|
477
|
+
|
478
|
+
body = response.body
|
479
|
+
iterations = body["iteration"]
|
480
|
+
salt = Base64.strict_decode64(body["salt"])
|
481
|
+
b = Base64.strict_decode64(body["b"])
|
482
|
+
c = body["c"]
|
483
|
+
|
484
|
+
key_length = 32
|
485
|
+
encrypted_password = pbkdf2(password, salt, iterations, key_length)
|
486
|
+
|
487
|
+
m1 = client.process_challenge(
|
488
|
+
user,
|
489
|
+
to_hex(encrypted_password),
|
490
|
+
to_hex(salt),
|
491
|
+
to_hex(b),
|
492
|
+
is_password_encrypted: true
|
493
|
+
)
|
494
|
+
m2 = client.H_AMK
|
495
|
+
|
496
|
+
if m1 == false
|
497
|
+
puts("Error processing SIRP challenge") if Spaceship::Globals.verbose?
|
498
|
+
raise SIRPAuthenticationError
|
499
|
+
end
|
500
|
+
|
501
|
+
data = {
|
502
|
+
accountName: user,
|
503
|
+
c: c,
|
504
|
+
m1: Base64.encode64(to_byte(m1)).strip,
|
505
|
+
m2: Base64.encode64(to_byte(m2)).strip,
|
506
|
+
rememberMe: false
|
507
|
+
}
|
508
|
+
|
509
|
+
hashcash = self.fetch_hashcash
|
510
|
+
|
511
|
+
response = request(:post) do |req|
|
512
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin/complete?isRememberMeEnabled=false")
|
513
|
+
req.body = data.to_json
|
514
|
+
req.headers['Content-Type'] = 'application/json'
|
515
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
516
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
517
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
518
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
519
|
+
req.headers["X-Apple-HC"] = hashcash if hashcash
|
520
|
+
end
|
521
|
+
|
522
|
+
puts("Completed SIRP authentication with status of #{response.status}") if Spaceship::Globals.verbose?
|
523
|
+
|
524
|
+
return response
|
525
|
+
end
|
526
|
+
|
527
|
+
def pbkdf2(password, salt, iterations, key_length, digest = OpenSSL::Digest::SHA256.new)
|
528
|
+
require 'openssl'
|
529
|
+
password = OpenSSL::Digest::SHA256.digest(password)
|
530
|
+
OpenSSL::PKCS5.pbkdf2_hmac(password, salt, iterations, key_length, digest)
|
531
|
+
end
|
532
|
+
|
533
|
+
def to_hex(str)
|
534
|
+
str.unpack1('H*')
|
535
|
+
end
|
536
|
+
|
537
|
+
def to_byte(str)
|
538
|
+
[str].pack('H*')
|
539
|
+
end
|
540
|
+
|
453
541
|
# This method is used for both the Apple Dev Portal and App Store Connect
|
454
542
|
# This will also handle 2 step verification and 2 factor authentication
|
455
543
|
#
|
@@ -465,12 +553,6 @@ module Spaceship
|
|
465
553
|
# If the session is valid no need to attempt to generate a new one.
|
466
554
|
return true if has_valid_session
|
467
555
|
|
468
|
-
data = {
|
469
|
-
accountName: user,
|
470
|
-
password: password,
|
471
|
-
rememberMe: true
|
472
|
-
}
|
473
|
-
|
474
556
|
begin
|
475
557
|
# The below workaround is only needed for 2 step verified machines
|
476
558
|
# Due to escaping of cookie values we have a little workaround here
|
@@ -491,22 +573,7 @@ module Spaceship
|
|
491
573
|
modified_cookie.gsub!(unescaped_important_cookie, escaped_important_cookie)
|
492
574
|
end
|
493
575
|
|
494
|
-
|
495
|
-
# On 2023-02-23, Apple added a custom implementation
|
496
|
-
# of hashcash to their auth flow
|
497
|
-
# hashcash = nil
|
498
|
-
hashcash = self.fetch_hashcash
|
499
|
-
|
500
|
-
response = request(:post) do |req|
|
501
|
-
req.url("https://idmsa.apple.com/appleauth/auth/signin")
|
502
|
-
req.body = data.to_json
|
503
|
-
req.headers['Content-Type'] = 'application/json'
|
504
|
-
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
505
|
-
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
506
|
-
req.headers['Accept'] = 'application/json, text/javascript'
|
507
|
-
req.headers["Cookie"] = modified_cookie if modified_cookie
|
508
|
-
req.headers["X-Apple-HC"] = hashcash if hashcash
|
509
|
-
end
|
576
|
+
response = perform_login_method(user, password, modified_cookie)
|
510
577
|
rescue UnauthorizedAccessError
|
511
578
|
raise InvalidUserCredentialsError.new, "Invalid username and password combination. Used '#{user}' as the username."
|
512
579
|
end
|
@@ -552,6 +619,40 @@ module Spaceship
|
|
552
619
|
end
|
553
620
|
# rubocop:enable Metrics/PerceivedComplexity
|
554
621
|
|
622
|
+
def perform_login_method(user, password, modified_cookie)
|
623
|
+
do_legacy_signin = ENV['FASTLANE_USE_LEGACY_PRE_SIRP_AUTH']
|
624
|
+
if do_legacy_signin
|
625
|
+
puts("Starting legacy Apple ID login") if Spaceship::Globals.verbose?
|
626
|
+
|
627
|
+
# Fixes issue https://github.com/fastlane/fastlane/issues/21071
|
628
|
+
# On 2023-02-23, Apple added a custom implementation
|
629
|
+
# of hashcash to their auth flow
|
630
|
+
# hashcash = nil
|
631
|
+
hashcash = self.fetch_hashcash
|
632
|
+
|
633
|
+
data = {
|
634
|
+
accountName: user,
|
635
|
+
password: password,
|
636
|
+
rememberMe: true
|
637
|
+
}
|
638
|
+
|
639
|
+
return request(:post) do |req|
|
640
|
+
req.url("https://idmsa.apple.com/appleauth/auth/signin")
|
641
|
+
req.body = data.to_json
|
642
|
+
req.headers['Content-Type'] = 'application/json'
|
643
|
+
req.headers['X-Requested-With'] = 'XMLHttpRequest'
|
644
|
+
req.headers['X-Apple-Widget-Key'] = self.itc_service_key
|
645
|
+
req.headers['Accept'] = 'application/json, text/javascript'
|
646
|
+
req.headers["Cookie"] = modified_cookie if modified_cookie
|
647
|
+
req.headers["X-Apple-HC"] = hashcash if hashcash
|
648
|
+
end
|
649
|
+
else
|
650
|
+
# Fixes issue https://github.com/fastlane/fastlane/issues/26368#issuecomment-2424190032
|
651
|
+
puts("Starting SIRP Apple ID login") if Spaceship::Globals.verbose?
|
652
|
+
return do_sirp(user, password, modified_cookie)
|
653
|
+
end
|
654
|
+
end
|
655
|
+
|
555
656
|
def fetch_hashcash
|
556
657
|
response = request(:get, "https://idmsa.apple.com/appleauth/auth/signin?widgetKey=#{self.itc_service_key}")
|
557
658
|
headers = response.headers
|
@@ -43,6 +43,21 @@ module Spaceship
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
# User doesn't have enough permission for given action
|
47
|
+
class SIRPAuthenticationError < BasicPreferredInfoError
|
48
|
+
TITLE = 'Authentication issue validating secrets:'.freeze
|
49
|
+
|
50
|
+
def preferred_error_info
|
51
|
+
message ? [TITLE, message] : nil
|
52
|
+
end
|
53
|
+
|
54
|
+
# We don't want to show similar GitHub issues, as the error message
|
55
|
+
# should be pretty clear
|
56
|
+
def show_github_issues
|
57
|
+
false
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
46
61
|
# Raised when 429 is received from App Store Connect
|
47
62
|
class TooManyRequestsError < BasicPreferredInfoError
|
48
63
|
attr_reader :retry_after
|
@@ -106,14 +106,14 @@ module Supply
|
|
106
106
|
end
|
107
107
|
end
|
108
108
|
|
109
|
-
def fetch_track_and_release!(track, version_code,
|
109
|
+
def fetch_track_and_release!(track, version_code, statuses = nil)
|
110
110
|
tracks = client.tracks(track)
|
111
111
|
return nil, nil if tracks.empty?
|
112
112
|
|
113
113
|
track = tracks.first
|
114
114
|
releases = track.releases
|
115
115
|
|
116
|
-
releases = releases.select { |r| r.status
|
116
|
+
releases = releases.select { |r| statuses.include?(r.status) } unless statuses.nil? || statuses.empty?
|
117
117
|
releases = releases.select { |r| (r.version_codes || []).map(&:to_s).include?(version_code.to_s) } if version_code
|
118
118
|
|
119
119
|
if releases.size > 1
|
@@ -124,7 +124,7 @@ module Supply
|
|
124
124
|
end
|
125
125
|
|
126
126
|
def update_rollout
|
127
|
-
track, release = fetch_track_and_release!(Supply.config[:track], Supply.config[:version_code], Supply::ReleaseStatus::IN_PROGRESS)
|
127
|
+
track, release = fetch_track_and_release!(Supply.config[:track], Supply.config[:version_code], [Supply::ReleaseStatus::IN_PROGRESS, Supply::ReleaseStatus::DRAFT])
|
128
128
|
UI.user_error!("Unable to find the requested track - '#{Supply.config[:track]}'") unless track
|
129
129
|
UI.user_error!("Unable to find the requested release on track - '#{Supply.config[:track]}'") unless release
|
130
130
|
|
@@ -135,7 +135,11 @@ module Supply
|
|
135
135
|
if track && release
|
136
136
|
completed = Supply.config[:rollout].to_f == 1
|
137
137
|
release.user_fraction = completed ? nil : Supply.config[:rollout]
|
138
|
-
|
138
|
+
if Supply.config[:release_status]
|
139
|
+
release.status = Supply.config[:release_status]
|
140
|
+
else
|
141
|
+
release.status = completed ? Supply::ReleaseStatus::COMPLETED : Supply::ReleaseStatus::IN_PROGRESS
|
142
|
+
end
|
139
143
|
|
140
144
|
# Deleted other version codes if completed because only allowed on completed version in a release
|
141
145
|
track.releases.delete_if { |r| !(r.version_codes || []).map(&:to_s).include?(version_code) } if completed
|
metadata
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.226.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Roger Oba
|
8
|
+
- Luka Mirosevic
|
9
|
+
- Daniel Jankowski
|
10
|
+
- Max Ott
|
11
|
+
- Joshua Liebowitz
|
12
|
+
- Jorge Revuelta H
|
13
|
+
- Łukasz Grabowski
|
14
|
+
- Danielle Tomlinson
|
8
15
|
- Aaron Brager
|
16
|
+
- Jan Piotrowski
|
9
17
|
- Iulian Onofrei
|
18
|
+
- Kohki Miki
|
19
|
+
- Maksym Grebenets
|
20
|
+
- Stefan Natchev
|
10
21
|
- Andrew McBurney
|
11
|
-
-
|
12
|
-
-
|
22
|
+
- Jimmy Dee
|
23
|
+
- Matthew Ellis
|
24
|
+
- Satoshi Namai
|
13
25
|
- Felix Krause
|
14
|
-
- Jérôme Lacoste
|
15
26
|
- Helmut Januschka
|
16
|
-
- Max Ott
|
17
|
-
- Satoshi Namai
|
18
|
-
- Josh Holtz
|
19
|
-
- Kohki Miki
|
20
27
|
- Manish Rathi
|
21
|
-
- Jorge Revuelta H
|
22
28
|
- Fumiya Nakamura
|
23
|
-
-
|
24
|
-
-
|
29
|
+
- Josh Holtz
|
30
|
+
- Jérôme Lacoste
|
31
|
+
- Manu Wallner
|
25
32
|
- Olivier Halligon
|
26
|
-
- Stefan Natchev
|
27
|
-
- Jan Piotrowski
|
28
|
-
- Joshua Liebowitz
|
29
|
-
- Luka Mirosevic
|
30
|
-
- Matthew Ellis
|
31
|
-
- Danielle Tomlinson
|
32
|
-
- Roger Oba
|
33
33
|
autorequire:
|
34
34
|
bindir: bin
|
35
35
|
cert_chain: []
|
36
|
-
date: 2024-10
|
36
|
+
date: 2024-12-10 00:00:00.000000000 Z
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: addressable
|
@@ -293,6 +293,20 @@ dependencies:
|
|
293
293
|
- - "<"
|
294
294
|
- !ruby/object:Gem::Version
|
295
295
|
version: 3.0.0
|
296
|
+
- !ruby/object:Gem::Dependency
|
297
|
+
name: fastlane-sirp
|
298
|
+
requirement: !ruby/object:Gem::Requirement
|
299
|
+
requirements:
|
300
|
+
- - ">="
|
301
|
+
- !ruby/object:Gem::Version
|
302
|
+
version: 1.0.0
|
303
|
+
type: :runtime
|
304
|
+
prerelease: false
|
305
|
+
version_requirements: !ruby/object:Gem::Requirement
|
306
|
+
requirements:
|
307
|
+
- - ">="
|
308
|
+
- !ruby/object:Gem::Version
|
309
|
+
version: 1.0.0
|
296
310
|
- !ruby/object:Gem::Dependency
|
297
311
|
name: gh_inspector
|
298
312
|
requirement: !ruby/object:Gem::Requirement
|
@@ -713,14 +727,14 @@ dependencies:
|
|
713
727
|
requirements:
|
714
728
|
- - "~>"
|
715
729
|
- !ruby/object:Gem::Version
|
716
|
-
version: 0.
|
730
|
+
version: 0.4.0
|
717
731
|
type: :runtime
|
718
732
|
prerelease: false
|
719
733
|
version_requirements: !ruby/object:Gem::Requirement
|
720
734
|
requirements:
|
721
735
|
- - "~>"
|
722
736
|
- !ruby/object:Gem::Version
|
723
|
-
version: 0.
|
737
|
+
version: 0.4.0
|
724
738
|
description: The easiest way to automate beta deployments and releases for your iOS
|
725
739
|
and Android apps
|
726
740
|
email:
|