fastlane 2.171.0 → 2.172.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 +72 -72
- data/deliver/lib/deliver/commands_generator.rb +1 -1
- data/deliver/lib/deliver/setup.rb +8 -3
- data/fastlane/lib/fastlane/actions/{.github_api.rb.swp → .update_fastlane.rb.swp} +0 -0
- data/fastlane/lib/fastlane/actions/artifactory.rb +36 -3
- data/fastlane/lib/fastlane/actions/build_app.rb +3 -1
- data/fastlane/lib/fastlane/actions/create_pull_request.rb +16 -1
- data/fastlane/lib/fastlane/actions/create_xcframework.rb +118 -0
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +0 -1
- data/fastlane/lib/fastlane/actions/git_commit.rb +8 -4
- data/fastlane/lib/fastlane/actions/register_device.rb +1 -1
- data/fastlane/lib/fastlane/actions/register_devices.rb +2 -1
- data/fastlane/lib/fastlane/actions/swiftlint.rb +4 -4
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +3 -0
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +2 -2
- data/fastlane/swift/DeliverfileProtocol.swift +2 -2
- data/fastlane/swift/Fastlane.swift +125 -18
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +11 -3
- data/fastlane/swift/Matchfile.swift +2 -2
- data/fastlane/swift/MatchfileProtocol.swift +2 -2
- data/fastlane/swift/Precheckfile.swift +2 -2
- data/fastlane/swift/PrecheckfileProtocol.swift +2 -2
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +10 -2
- data/fastlane/swift/Screengrabfile.swift +2 -2
- data/fastlane/swift/ScreengrabfileProtocol.swift +2 -2
- data/fastlane/swift/Snapshotfile.swift +2 -2
- data/fastlane/swift/SnapshotfileProtocol.swift +14 -2
- data/fastlane_core/lib/fastlane_core/helper.rb +1 -1
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
- data/fastlane_core/lib/fastlane_core/project.rb +18 -5
- data/frameit/lib/frameit/device_types.rb +7 -1
- data/gym/lib/gym/generators/build_command_generator.rb +3 -1
- data/gym/lib/gym/options.rb +12 -2
- data/scan/lib/scan/options.rb +10 -0
- data/scan/lib/scan/runner.rb +6 -1
- data/scan/lib/scan/slack_poster.rb +3 -1
- data/scan/lib/scan/test_command_generator.rb +3 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +1 -1
- data/snapshot/lib/snapshot/options.rb +16 -1
- data/snapshot/lib/snapshot/update.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +3 -1
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +26 -0
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +1 -0
- metadata +36 -23
- data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
- data/fastlane/lib/fastlane/actions/.set_github_release.rb.swp +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d25e374341a7acedcadc6a1861a3f047f4e6f71312d68e6b770e083cfa527e7a
|
4
|
+
data.tar.gz: 01eac07e1ca532f1baf5bb23722927b87fc10d5aeb867db86d18d60eddc87f09
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ccfbd1a683d17b27384030f99fb4e8db51feccdcca7bc959efb1b0455ded32efa4470b1082710388d6e6444e6c02e7c7ef1e7d8b8f0e6c88746ccb984246a70
|
7
|
+
data.tar.gz: 59e9908175276ce658cf959c647a3426d55688bfa0f181f4d1c8554d1a6a7f64f36926d55b730255c3156411259f0f8a25f5e166e8d0d8652f2f6059fba1d78a
|
data/README.md
CHANGED
@@ -34,11 +34,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
34
34
|
<!-- This table is regenerated and resorted on each release -->
|
35
35
|
<table id='team'>
|
36
36
|
<tr>
|
37
|
-
<td id='
|
38
|
-
<a href='https://github.com/
|
39
|
-
<img src='https://github.com/
|
37
|
+
<td id='iulian-onofrei'>
|
38
|
+
<a href='https://github.com/revolter'>
|
39
|
+
<img src='https://github.com/revolter.png?size=140'>
|
40
40
|
</a>
|
41
|
-
<h4 align='center'><a href='https://twitter.com/
|
41
|
+
<h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
|
42
|
+
</td>
|
43
|
+
<td id='stefan-natchev'>
|
44
|
+
<a href='https://github.com/snatchev'>
|
45
|
+
<img src='https://github.com/snatchev.png?size=140'>
|
46
|
+
</a>
|
47
|
+
<h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
|
42
48
|
</td>
|
43
49
|
<td id='aaron-brager'>
|
44
50
|
<a href='https://github.com/getaaron'>
|
@@ -46,43 +52,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
46
52
|
</a>
|
47
53
|
<h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
|
48
54
|
</td>
|
49
|
-
<td id='
|
50
|
-
<a href='https://github.com/
|
51
|
-
<img src='https://github.com/
|
55
|
+
<td id='andrew-mcburney'>
|
56
|
+
<a href='https://github.com/armcburney'>
|
57
|
+
<img src='https://github.com/armcburney.png?size=140'>
|
52
58
|
</a>
|
53
|
-
<h4 align='center'><a href='https://twitter.com/
|
59
|
+
<h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
|
54
60
|
</td>
|
55
|
-
<td id='
|
56
|
-
<a href='https://github.com/
|
57
|
-
<img src='https://github.com/
|
61
|
+
<td id='fumiya-nakamura'>
|
62
|
+
<a href='https://github.com/nafu'>
|
63
|
+
<img src='https://github.com/nafu.png?size=140'>
|
58
64
|
</a>
|
59
|
-
<h4 align='center'><a href='https://twitter.com/
|
65
|
+
<h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
|
60
66
|
</td>
|
67
|
+
</tr>
|
68
|
+
<tr>
|
61
69
|
<td id='olivier-halligon'>
|
62
70
|
<a href='https://github.com/AliSoftware'>
|
63
71
|
<img src='https://github.com/AliSoftware.png?size=140'>
|
64
72
|
</a>
|
65
73
|
<h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
|
66
74
|
</td>
|
67
|
-
|
68
|
-
<
|
69
|
-
<
|
70
|
-
<a href='https://github.com/lacostej'>
|
71
|
-
<img src='https://github.com/lacostej.png?size=140'>
|
75
|
+
<td id='kohki-miki'>
|
76
|
+
<a href='https://github.com/giginet'>
|
77
|
+
<img src='https://github.com/giginet.png?size=140'>
|
72
78
|
</a>
|
73
|
-
<h4 align='center'><a href='https://twitter.com/
|
79
|
+
<h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
|
74
80
|
</td>
|
75
|
-
<td id='
|
76
|
-
<a href='https://github.com/
|
77
|
-
<img src='https://github.com/
|
81
|
+
<td id='jimmy-dee'>
|
82
|
+
<a href='https://github.com/jdee'>
|
83
|
+
<img src='https://github.com/jdee.png?size=140'>
|
78
84
|
</a>
|
79
|
-
<h4 align='center'
|
85
|
+
<h4 align='center'>Jimmy Dee</h4>
|
80
86
|
</td>
|
81
|
-
<td id='
|
82
|
-
<a href='https://github.com/
|
83
|
-
<img src='https://github.com/
|
87
|
+
<td id='felix-krause'>
|
88
|
+
<a href='https://github.com/KrauseFx'>
|
89
|
+
<img src='https://github.com/KrauseFx.png?size=140'>
|
84
90
|
</a>
|
85
|
-
<h4 align='center'><a href='https://twitter.com/
|
91
|
+
<h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
|
86
92
|
</td>
|
87
93
|
<td id='manu-wallner'>
|
88
94
|
<a href='https://github.com/milch'>
|
@@ -90,57 +96,51 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
90
96
|
</a>
|
91
97
|
<h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
|
92
98
|
</td>
|
93
|
-
<td id='jimmy-dee'>
|
94
|
-
<a href='https://github.com/jdee'>
|
95
|
-
<img src='https://github.com/jdee.png?size=140'>
|
96
|
-
</a>
|
97
|
-
<h4 align='center'>Jimmy Dee</h4>
|
98
|
-
</td>
|
99
99
|
</tr>
|
100
100
|
<tr>
|
101
|
-
<td id='danielle-tomlinson'>
|
102
|
-
<a href='https://github.com/endocrimes'>
|
103
|
-
<img src='https://github.com/endocrimes.png?size=140'>
|
104
|
-
</a>
|
105
|
-
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
106
|
-
</td>
|
107
|
-
<td id='matthew-ellis'>
|
108
|
-
<a href='https://github.com/matthewellis'>
|
109
|
-
<img src='https://github.com/matthewellis.png?size=140'>
|
110
|
-
</a>
|
111
|
-
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
112
|
-
</td>
|
113
101
|
<td id='jan-piotrowski'>
|
114
102
|
<a href='https://github.com/janpio'>
|
115
103
|
<img src='https://github.com/janpio.png?size=140'>
|
116
104
|
</a>
|
117
105
|
<h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
|
118
106
|
</td>
|
119
|
-
<td id='
|
120
|
-
<a href='https://github.com/
|
121
|
-
<img src='https://github.com/
|
107
|
+
<td id='jérôme-lacoste'>
|
108
|
+
<a href='https://github.com/lacostej'>
|
109
|
+
<img src='https://github.com/lacostej.png?size=140'>
|
122
110
|
</a>
|
123
|
-
<h4 align='center'><a href='https://twitter.com/
|
111
|
+
<h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
|
124
112
|
</td>
|
125
|
-
<td id='
|
126
|
-
<a href='https://github.com/
|
127
|
-
<img src='https://github.com/
|
113
|
+
<td id='maksym-grebenets'>
|
114
|
+
<a href='https://github.com/mgrebenets'>
|
115
|
+
<img src='https://github.com/mgrebenets.png?size=140'>
|
128
116
|
</a>
|
129
|
-
<h4 align='center'><a href='https://twitter.com/
|
117
|
+
<h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
|
130
118
|
</td>
|
131
|
-
</tr>
|
132
|
-
<tr>
|
133
119
|
<td id='max-ott'>
|
134
120
|
<a href='https://github.com/max-ott'>
|
135
121
|
<img src='https://github.com/max-ott.png?size=140'>
|
136
122
|
</a>
|
137
123
|
<h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
|
138
124
|
</td>
|
139
|
-
<td id='
|
140
|
-
<a href='https://github.com/
|
141
|
-
<img src='https://github.com/
|
125
|
+
<td id='josh-holtz'>
|
126
|
+
<a href='https://github.com/joshdholtz'>
|
127
|
+
<img src='https://github.com/joshdholtz.png?size=140'>
|
142
128
|
</a>
|
143
|
-
<h4 align='center'><a href='https://twitter.com/
|
129
|
+
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
130
|
+
</td>
|
131
|
+
</tr>
|
132
|
+
<tr>
|
133
|
+
<td id='luka-mirosevic'>
|
134
|
+
<a href='https://github.com/lmirosevic'>
|
135
|
+
<img src='https://github.com/lmirosevic.png?size=140'>
|
136
|
+
</a>
|
137
|
+
<h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
|
138
|
+
</td>
|
139
|
+
<td id='danielle-tomlinson'>
|
140
|
+
<a href='https://github.com/endocrimes'>
|
141
|
+
<img src='https://github.com/endocrimes.png?size=140'>
|
142
|
+
</a>
|
143
|
+
<h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
|
144
144
|
</td>
|
145
145
|
<td id='jorge-revuelta-h'>
|
146
146
|
<a href='https://github.com/minuscorp'>
|
@@ -148,31 +148,31 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
|
|
148
148
|
</a>
|
149
149
|
<h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
|
150
150
|
</td>
|
151
|
+
<td id='matthew-ellis'>
|
152
|
+
<a href='https://github.com/matthewellis'>
|
153
|
+
<img src='https://github.com/matthewellis.png?size=140'>
|
154
|
+
</a>
|
155
|
+
<h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
|
156
|
+
</td>
|
151
157
|
<td id='joshua-liebowitz'>
|
152
158
|
<a href='https://github.com/taquitos'>
|
153
159
|
<img src='https://github.com/taquitos.png?size=140'>
|
154
160
|
</a>
|
155
161
|
<h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
|
156
162
|
</td>
|
157
|
-
<td id='josh-holtz'>
|
158
|
-
<a href='https://github.com/joshdholtz'>
|
159
|
-
<img src='https://github.com/joshdholtz.png?size=140'>
|
160
|
-
</a>
|
161
|
-
<h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
|
162
|
-
</td>
|
163
163
|
</tr>
|
164
164
|
<tr>
|
165
|
-
<td id='
|
166
|
-
<a href='https://github.com/
|
167
|
-
<img src='https://github.com/
|
165
|
+
<td id='daniel-jankowski'>
|
166
|
+
<a href='https://github.com/mollyIV'>
|
167
|
+
<img src='https://github.com/mollyIV.png?size=140'>
|
168
168
|
</a>
|
169
|
-
<h4 align='center'><a href='https://twitter.com/
|
169
|
+
<h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
|
170
170
|
</td>
|
171
|
-
<td id='
|
172
|
-
<a href='https://github.com/
|
173
|
-
<img src='https://github.com/
|
171
|
+
<td id='helmut-januschka'>
|
172
|
+
<a href='https://github.com/hjanuschka'>
|
173
|
+
<img src='https://github.com/hjanuschka.png?size=140'>
|
174
174
|
</a>
|
175
|
-
<h4 align='center'><a href='https://twitter.com/
|
175
|
+
<h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
|
176
176
|
</td>
|
177
177
|
</table>
|
178
178
|
|
@@ -46,7 +46,7 @@ module Deliver
|
|
46
46
|
v = app.get_latest_app_store_version(platform: platform)
|
47
47
|
|
48
48
|
metadata_path = options[:metadata_path] || File.join(deliver_path, 'metadata')
|
49
|
-
generate_metadata_files(app, v, metadata_path)
|
49
|
+
generate_metadata_files(app, v, metadata_path, options)
|
50
50
|
|
51
51
|
# Generate the final Deliverfile here
|
52
52
|
return File.read(deliverfile_path)
|
@@ -60,9 +60,14 @@ module Deliver
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
def generate_metadata_files(app, version, path)
|
63
|
+
def generate_metadata_files(app, version, path, options)
|
64
64
|
# App info localizations
|
65
|
-
|
65
|
+
if options[:use_live_version]
|
66
|
+
app_info = app.fetch_live_app_info
|
67
|
+
UI.user_error!("The option `use_live_version` was set to `true`, however no live app was found on App Store Connect.") unless app_info
|
68
|
+
else
|
69
|
+
app_info = app.fetch_edit_app_info || app.fetch_live_app_info
|
70
|
+
end
|
66
71
|
app_info_localizations = app_info.get_app_info_localizations
|
67
72
|
app_info_localizations.each do |localization|
|
68
73
|
language = localization.locale
|
Binary file
|
@@ -10,7 +10,12 @@ module Fastlane
|
|
10
10
|
Actions.verify_gem!('artifactory')
|
11
11
|
|
12
12
|
require 'artifactory'
|
13
|
+
|
14
|
+
UI.user_error!("Cannot connect to Artifactory - 'username' was provided but it's missing 'password'") if params[:username] && !params[:password]
|
15
|
+
UI.user_error!("Cannot connect to Artifactory - 'password' was provided but it's missing 'username'") if !params[:username] && params[:password]
|
16
|
+
UI.user_error!("Cannot connect to Artifactory - either 'api_key', or 'username' and 'password' must be provided") if !params[:api_key] && !params[:username]
|
13
17
|
file_path = File.absolute_path(params[:file])
|
18
|
+
|
14
19
|
if File.exist?(file_path)
|
15
20
|
client = connect_to_artifactory(params)
|
16
21
|
artifact = Artifactory::Resource::Artifact.new
|
@@ -37,7 +42,7 @@ module Fastlane
|
|
37
42
|
end
|
38
43
|
|
39
44
|
def self.connect_to_artifactory(params)
|
40
|
-
config_keys = [:endpoint, :username, :password, :ssl_pem_file, :ssl_verify, :proxy_username, :proxy_password, :proxy_address, :proxy_port, :read_timeout]
|
45
|
+
config_keys = [:endpoint, :username, :password, :api_key, :ssl_pem_file, :ssl_verify, :proxy_username, :proxy_password, :proxy_address, :proxy_port, :read_timeout]
|
41
46
|
config = params.values.select do |key|
|
42
47
|
config_keys.include?(key)
|
43
48
|
end
|
@@ -48,6 +53,10 @@ module Fastlane
|
|
48
53
|
'This action uploads an artifact to artifactory'
|
49
54
|
end
|
50
55
|
|
56
|
+
def self.details
|
57
|
+
'Connect to the artifactory server using either a username/password or an api_key'
|
58
|
+
end
|
59
|
+
|
51
60
|
def self.is_supported?(platform)
|
52
61
|
true
|
53
62
|
end
|
@@ -72,6 +81,13 @@ module Fastlane
|
|
72
81
|
file: "example.ipa", # File to upload
|
73
82
|
repo: "mobile_artifacts", # Artifactory repo
|
74
83
|
repo_path: "/ios/appname/example-major.minor.ipa" # Path to place the artifact including its filename
|
84
|
+
)',
|
85
|
+
'artifactory(
|
86
|
+
api_key: "api_key",
|
87
|
+
endpoint: "https://artifactory.example.com/artifactory/",
|
88
|
+
file: "example.ipa", # File to upload
|
89
|
+
repo: "mobile_artifacts", # Artifactory repo
|
90
|
+
repo_path: "/ios/appname/example-major.minor.ipa" # Path to place the artifact including its filename
|
75
91
|
)'
|
76
92
|
]
|
77
93
|
end
|
@@ -101,12 +117,29 @@ module Fastlane
|
|
101
117
|
FastlaneCore::ConfigItem.new(key: :username,
|
102
118
|
env_name: "FL_ARTIFACTORY_USERNAME",
|
103
119
|
description: "Artifactory username",
|
104
|
-
optional:
|
120
|
+
optional: true,
|
121
|
+
conflicting_options: [:api_key],
|
122
|
+
conflict_block: proc do |value|
|
123
|
+
UI.user_error!("You can't use option '#{value.key}' along with 'username'")
|
124
|
+
end),
|
105
125
|
FastlaneCore::ConfigItem.new(key: :password,
|
106
126
|
env_name: "FL_ARTIFACTORY_PASSWORD",
|
107
127
|
description: "Artifactory password",
|
108
128
|
sensitive: true,
|
109
|
-
optional:
|
129
|
+
optional: true,
|
130
|
+
conflicting_options: [:api_key],
|
131
|
+
conflict_block: proc do |value|
|
132
|
+
UI.user_error!("You can't use option '#{value.key}' along with 'password'")
|
133
|
+
end),
|
134
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
135
|
+
env_name: "FL_ARTIFACTORY_API_KEY",
|
136
|
+
description: "Artifactory API key",
|
137
|
+
sensitive: true,
|
138
|
+
optional: true,
|
139
|
+
conflicting_options: [:username, :password],
|
140
|
+
conflict_block: proc do |value|
|
141
|
+
UI.user_error!("You can't use option '#{value.key}' along with 'api_key'")
|
142
|
+
end),
|
110
143
|
FastlaneCore::ConfigItem.new(key: :properties,
|
111
144
|
env_name: "FL_ARTIFACTORY_PROPERTIES",
|
112
145
|
description: "Artifact properties hash",
|
@@ -8,6 +8,7 @@ module Fastlane
|
|
8
8
|
end
|
9
9
|
|
10
10
|
class BuildAppAction < Action
|
11
|
+
# rubocop:disable Metrics/PerceivedComplexity
|
11
12
|
def self.run(values)
|
12
13
|
require 'gym'
|
13
14
|
|
@@ -50,7 +51,8 @@ module Fastlane
|
|
50
51
|
begin
|
51
52
|
profile = FastlaneCore::ProvisioningProfile.parse(profile_path)
|
52
53
|
app_id_prefix = profile["ApplicationIdentifierPrefix"].first
|
53
|
-
|
54
|
+
entitlements = profile["Entitlements"]
|
55
|
+
bundle_id = (entitlements["application-identifier"] || entitlements["com.apple.application-identifier"]).gsub("#{app_id_prefix}.", "")
|
54
56
|
values[:export_options][:provisioningProfiles][bundle_id] = profile["Name"]
|
55
57
|
rescue => ex
|
56
58
|
UI.error("Couldn't load profile at path: #{profile_path}")
|
@@ -20,6 +20,7 @@ module Fastlane
|
|
20
20
|
GithubApiAction.run(
|
21
21
|
server_url: params[:api_url],
|
22
22
|
api_token: params[:api_token],
|
23
|
+
api_bearer: params[:api_bearer],
|
23
24
|
http_method: 'POST',
|
24
25
|
path: "repos/#{params[:repo]}/pulls",
|
25
26
|
body: payload,
|
@@ -60,6 +61,7 @@ module Fastlane
|
|
60
61
|
GithubApiAction.run(
|
61
62
|
server_url: params[:api_url],
|
62
63
|
api_token: params[:api_token],
|
64
|
+
api_bearer: params[:api_bearer],
|
63
65
|
http_method: 'PATCH',
|
64
66
|
path: "repos/#{params[:repo]}/issues/#{number}",
|
65
67
|
body: payload,
|
@@ -79,6 +81,7 @@ module Fastlane
|
|
79
81
|
GithubApiAction.run(
|
80
82
|
server_url: params[:api_url],
|
81
83
|
api_token: params[:api_token],
|
84
|
+
api_bearer: params[:api_bearer],
|
82
85
|
http_method: 'POST',
|
83
86
|
path: "repos/#{params[:repo]}/issues/#{number}/assignees",
|
84
87
|
body: payload,
|
@@ -103,6 +106,7 @@ module Fastlane
|
|
103
106
|
GithubApiAction.run(
|
104
107
|
server_url: params[:api_url],
|
105
108
|
api_token: params[:api_token],
|
109
|
+
api_bearer: params[:api_bearer],
|
106
110
|
http_method: 'POST',
|
107
111
|
path: "repos/#{params[:repo]}/pulls/#{number}/requested_reviewers",
|
108
112
|
body: payload,
|
@@ -124,6 +128,7 @@ module Fastlane
|
|
124
128
|
GithubApiAction.run(
|
125
129
|
server_url: params[:api_url],
|
126
130
|
api_token: params[:api_token],
|
131
|
+
api_bearer: params[:api_bearer],
|
127
132
|
http_method: 'PATCH',
|
128
133
|
path: "repos/#{params[:repo]}/issues/#{number}",
|
129
134
|
body: payload,
|
@@ -161,7 +166,17 @@ module Fastlane
|
|
161
166
|
default_value: ENV["GITHUB_API_TOKEN"],
|
162
167
|
default_value_dynamic: true,
|
163
168
|
is_string: true,
|
164
|
-
|
169
|
+
conflicting_options: [:api_bearer],
|
170
|
+
optional: true),
|
171
|
+
FastlaneCore::ConfigItem.new(key: :api_bearer,
|
172
|
+
env_name: "GITHUB_PULL_REQUEST_API_BEARER",
|
173
|
+
description: "Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable",
|
174
|
+
sensitive: true,
|
175
|
+
code_gen_sensitive: true,
|
176
|
+
is_string: true,
|
177
|
+
conflicting_options: [:api_token],
|
178
|
+
optional: true,
|
179
|
+
default_value: nil),
|
165
180
|
FastlaneCore::ConfigItem.new(key: :repo,
|
166
181
|
env_name: "GITHUB_PULL_REQUEST_REPO",
|
167
182
|
description: "The name of the repository you want to submit the pull request to",
|
@@ -0,0 +1,118 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
XCFRAMEWORK_PATH ||= :XCFRAMEWORK_PATH
|
5
|
+
end
|
6
|
+
|
7
|
+
class CreateXcframeworkAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
UI.user_error!("Please provide either :frameworks or :libraries to be packaged into the xcframework") unless params[:frameworks] || params[:libraries]
|
10
|
+
|
11
|
+
create_command = ['xcodebuild', '-create-xcframework']
|
12
|
+
create_command << params[:frameworks].map { |framework| ['-framework', "\"#{framework}\""] }.flatten if params[:frameworks]
|
13
|
+
create_command << params[:libraries].map { |library, headers| ['-library', "\"#{library}\""] + (headers.empty? ? [] : ['-headers', "\"#{headers}\""]) } if params[:libraries]
|
14
|
+
create_command << ['-output', "\"#{params[:output]}\""]
|
15
|
+
create_command << ['-allow-internal-distribution'] if params[:allow_internal_distribution]
|
16
|
+
|
17
|
+
Actions.lane_context[SharedValues::XCFRAMEWORK_PATH] = params[:output]
|
18
|
+
|
19
|
+
sh(create_command)
|
20
|
+
end
|
21
|
+
|
22
|
+
#####################################################
|
23
|
+
# @!group Documentation
|
24
|
+
#####################################################
|
25
|
+
|
26
|
+
def self.description
|
27
|
+
"Package multiple build configs of a library/framework into a single xcframework"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.details
|
31
|
+
<<~DETAILS
|
32
|
+
Utility for packaging multiple build configurations of a given library
|
33
|
+
or framework into a single xcframework.
|
34
|
+
|
35
|
+
If you want to package several frameworks just provide an array containing
|
36
|
+
the list of frameworks to be packaged using the :frameworks parameter.
|
37
|
+
|
38
|
+
If you want to package several libraries with their corresponding headers
|
39
|
+
provide a hash containing the library as the key and the directory containing
|
40
|
+
its headers as the value (or an empty string if there are no headers associated
|
41
|
+
with the provided library).
|
42
|
+
|
43
|
+
Finally specify the location of the xcframework to be generated using the :output
|
44
|
+
parameter.
|
45
|
+
DETAILS
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.available_options
|
49
|
+
[
|
50
|
+
FastlaneCore::ConfigItem.new(key: :frameworks,
|
51
|
+
env_name: "FL_CREATE_XCFRAMEWORK_FRAMEWORKS",
|
52
|
+
description: "Frameworks to add to the target xcframework",
|
53
|
+
type: Array,
|
54
|
+
optional: true,
|
55
|
+
conflicting_options: [:libraries],
|
56
|
+
verify_block: proc do |value|
|
57
|
+
value.each do |framework|
|
58
|
+
UI.user_error!("#{framework} doesn't end with '.framework'. Is this really a framework?") unless framework.end_with?('.framework')
|
59
|
+
UI.user_error!("Couldn't find framework at #{framework}") unless File.exist?(framework)
|
60
|
+
UI.user_error!("#{framework} doesn't seem to be a framework") unless File.directory?(framework)
|
61
|
+
end
|
62
|
+
end),
|
63
|
+
FastlaneCore::ConfigItem.new(key: :libraries,
|
64
|
+
env_name: "FL_CREATE_XCFRAMEWORK_LIBRARIES",
|
65
|
+
description: "Libraries to add to the target xcframework, with their corresponding headers",
|
66
|
+
type: Hash,
|
67
|
+
optional: true,
|
68
|
+
conflicting_options: [:frameworks],
|
69
|
+
verify_block: proc do |value|
|
70
|
+
value.each do |library, headers|
|
71
|
+
UI.user_error!("Couldn't find library at #{library}") unless File.exist?(library)
|
72
|
+
UI.user_error!("#{headers} doesn't exist or is not a directory") unless headers.empty? || File.directory?(headers)
|
73
|
+
end
|
74
|
+
end),
|
75
|
+
FastlaneCore::ConfigItem.new(key: :output,
|
76
|
+
env_name: "FL_CREATE_XCFRAMEWORK_OUTPUT",
|
77
|
+
description: "The path to write the xcframework to",
|
78
|
+
type: String,
|
79
|
+
optional: false),
|
80
|
+
FastlaneCore::ConfigItem.new(key: :allow_internal_distribution,
|
81
|
+
env_name: "FL_CREATE_XCFRAMEWORK_ALLOW_INTERNAL_DISTRIBUTION",
|
82
|
+
description: "Specifies that the created xcframework contains information not suitable for public distribution",
|
83
|
+
type: Boolean,
|
84
|
+
optional: true,
|
85
|
+
default_value: false)
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.output
|
90
|
+
[
|
91
|
+
['XCFRAMEWORK_PATH', 'Location of the generated xcframework']
|
92
|
+
]
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.return_value
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.example_code
|
99
|
+
[
|
100
|
+
"create_xcframework(frameworks: ['FrameworkA.framework', 'FrameworkB.framework'], output: 'UniversalFramework.xcframework')",
|
101
|
+
"create_xcframework(libraries: { 'LibraryA.so' => '', 'LibraryB.so' => 'LibraryBHeaders'}, output: 'UniversalFramework.xcframework')"
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.category
|
106
|
+
:building
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.authors
|
110
|
+
["jgongo"]
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.is_supported?(platform)
|
114
|
+
[:ios, :mac].include?(platform)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|