fastlane 2.168.0 → 2.173.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 +68 -68
- data/cert/lib/cert/options.rb +2 -2
- data/deliver/lib/deliver/app_screenshot.rb +5 -7
- data/deliver/lib/deliver/app_screenshot_validator.rb +108 -0
- data/deliver/lib/deliver/commands_generator.rb +1 -1
- data/deliver/lib/deliver/loader.rb +123 -21
- data/deliver/lib/deliver/setup.rb +8 -3
- data/deliver/lib/deliver/upload_metadata.rb +6 -10
- data/deliver/lib/deliver/upload_screenshots.rb +1 -64
- data/fastlane/lib/fastlane/actions/add_git_tag.rb +12 -3
- 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/docs/frame_screenshots.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +1 -1
- data/fastlane/lib/fastlane/actions/docs/upload_to_app_store.md.erb +4 -0
- data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +5 -1
- data/fastlane/lib/fastlane/actions/download_app_privacy_details_from_app_store.rb +142 -0
- data/fastlane/lib/fastlane/actions/download_dsyms.rb +0 -1
- data/fastlane/lib/fastlane/actions/git_commit.rb +6 -2
- data/fastlane/lib/fastlane/actions/github_api.rb +14 -3
- data/fastlane/lib/fastlane/actions/nexus_upload.rb +1 -0
- data/fastlane/lib/fastlane/actions/onesignal.rb +13 -3
- data/fastlane/lib/fastlane/actions/pod_push.rb +9 -0
- data/fastlane/lib/fastlane/actions/push_to_git_remote.rb +9 -1
- 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/set_github_release.rb +21 -8
- data/fastlane/lib/fastlane/actions/slack.rb +4 -5
- data/fastlane/lib/fastlane/actions/spm.rb +2 -2
- data/fastlane/lib/fastlane/actions/swiftlint.rb +4 -4
- data/fastlane/lib/fastlane/actions/upload_app_privacy_details_to_app_store.rb +291 -0
- data/fastlane/lib/fastlane/actions/xcode_install.rb +8 -5
- data/fastlane/lib/fastlane/cli_tools_distributor.rb +3 -0
- data/fastlane/lib/fastlane/plugins/template/.rubocop.yml +1 -1
- data/fastlane/lib/fastlane/swift_fastlane_api_generator.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 +267 -45
- data/fastlane/swift/Gymfile.swift +2 -2
- data/fastlane/swift/GymfileProtocol.swift +15 -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 +6 -2
- data/fastlane/swift/Scanfile.swift +2 -2
- data/fastlane/swift/ScanfileProtocol.swift +18 -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 +15 -3
- data/fastlane_core/lib/fastlane_core/helper.rb +2 -2
- data/fastlane_core/lib/fastlane_core/ipa_file_analyser.rb +41 -16
- data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +3 -4
- data/fastlane_core/lib/fastlane_core/project.rb +19 -6
- data/frameit/lib/frameit/device_types.rb +7 -1
- data/gym/lib/gym/error_handler.rb +8 -0
- data/gym/lib/gym/generators/build_command_generator.rb +3 -0
- data/gym/lib/gym/generators/package_command_generator_xcode7.rb +2 -2
- data/gym/lib/gym/options.rb +19 -3
- data/match/lib/match/encryption/openssl.rb +4 -2
- data/match/lib/match/runner.rb +1 -1
- data/match/lib/match/storage/git_storage.rb +14 -10
- data/precheck/lib/precheck/options.rb +6 -1
- data/precheck/lib/precheck/rule_processor.rb +1 -1
- data/precheck/lib/precheck/runner.rb +1 -1
- data/scan/lib/scan/options.rb +22 -1
- data/scan/lib/scan/runner.rb +6 -1
- data/scan/lib/scan/slack_poster.rb +4 -1
- data/scan/lib/scan/test_command_generator.rb +3 -0
- data/screengrab/lib/screengrab/runner.rb +2 -0
- data/sigh/lib/sigh/runner.rb +1 -1
- data/snapshot/lib/assets/SnapshotHelper.swift +6 -2
- data/snapshot/lib/snapshot/options.rb +17 -2
- data/snapshot/lib/snapshot/update.rb +1 -1
- data/spaceship/lib/spaceship/client.rb +28 -1
- data/spaceship/lib/spaceship/connect_api.rb +6 -0
- data/spaceship/lib/spaceship/connect_api/api_client.rb +1 -1
- data/spaceship/lib/spaceship/connect_api/models/app.rb +19 -4
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage.rb +59 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_category.rb +65 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_data_protection.rb +27 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_grouping.rb +18 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usage_purposes.rb +37 -0
- data/spaceship/lib/spaceship/connect_api/models/app_data_usages_publish_state.rb +36 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info.rb +1 -0
- data/spaceship/lib/spaceship/connect_api/models/app_info_localization.rb +2 -0
- data/spaceship/lib/spaceship/connect_api/models/app_store_version.rb +8 -1
- data/spaceship/lib/spaceship/connect_api/models/beta_group.rb +9 -0
- data/spaceship/lib/spaceship/connect_api/models/device.rb +30 -0
- data/spaceship/lib/spaceship/connect_api/response.rb +3 -1
- data/spaceship/lib/spaceship/connect_api/testflight/testflight.rb +12 -0
- data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +103 -0
- data/spaceship/lib/spaceship/errors.rb +19 -0
- data/spaceship/lib/spaceship/two_step_or_factor_client.rb +19 -6
- data/spaceship/lib/spaceship/upgrade_2fa_later_client.rb +91 -0
- metadata +44 -23
- data/fastlane/lib/fastlane/actions/.download_dsyms.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.app.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.app_screenshot.rb.swp +0 -0
- data/spaceship/lib/spaceship/connect_api/models/.build.rb.swp +0 -0
@@ -237,7 +237,7 @@ The `keyword.strings` and `title.strings` are standard `.strings` file you alrea
|
|
237
237
|
**Notes**
|
238
238
|
|
239
239
|
- These `.strings` files **MUST** be utf-8 (UTF-8) or utf-16 encoded (UTF-16 BE with BOM). They also must begin with an empty line. If you are having trouble see [issue #1740](https://github.com/fastlane/fastlane/issues/1740)
|
240
|
-
- You **MUST** provide a background if you want titles. _frameit_ will not add the
|
240
|
+
- You **MUST** provide a background if you want titles. _frameit_ will not add the titles if a background is not specified.
|
241
241
|
|
242
242
|
### Screenshot orientation
|
243
243
|
|
@@ -390,7 +390,7 @@ lane :beta do
|
|
390
390
|
end
|
391
391
|
```
|
392
392
|
|
393
|
-
By using the `force_for_new_devices` parameter, _match_ will check if the device count has changed since the last time you ran _match_, and automatically re-generate the provisioning profile if necessary. You can also use `force: true` to re-generate the provisioning profile on each run.
|
393
|
+
By using the `force_for_new_devices` parameter, _match_ will check if the (enabled) device count has changed since the last time you ran _match_, and automatically re-generate the provisioning profile if necessary. You can also use `force: true` to re-generate the provisioning profile on each run.
|
394
394
|
|
395
395
|
_**Important:** The `force_for_new_devices` parameter is ignored for App Store provisioning profiles since they don't contain any device information._
|
396
396
|
|
@@ -439,6 +439,10 @@ Use the `submission_information` parameter for additional submission specifiers,
|
|
439
439
|
fastlane deliver submit_build --build_number 830 --submission_information "{\"export_compliance_uses_encryption\": false, \"add_id_info_uses_idfa\": false }"
|
440
440
|
```
|
441
441
|
|
442
|
+
### App Privacy Details
|
443
|
+
|
444
|
+
Starting on December 8, 2020, Apple announced that developers are required to provide app privacy details that will help users understand an app's privacy practies. _deliver_ does not allow for updating of this information but this can be done with the _upload_app_privacy_details_to_app_store_ action. More information on [Uploading App Privacy Details](https://docs.fastlane.tools/uploading-app-privacy-details)
|
445
|
+
|
442
446
|
# Credentials
|
443
447
|
|
444
448
|
A detailed description about how your credentials are handled is available in a [credentials_manager](https://github.com/fastlane/fastlane/tree/master/credentials_manager).
|
@@ -218,7 +218,7 @@ fastlane pilot upload --verbose
|
|
218
218
|
|
219
219
|
## Firewall Issues
|
220
220
|
|
221
|
-
_pilot_ uses the iTunes Transporter to upload metadata and binaries. In case you are behind a firewall, you can specify a different transporter protocol from the command line using
|
221
|
+
_pilot_ uses the iTunes [Transporter](https://help.apple.com/itc/transporteruserguide/#/apdATD1E1288-D1E1A1303-D1E1288A1126) to upload metadata and binaries. In case you are behind a firewall, you can specify a different transporter protocol from the command line using
|
222
222
|
|
223
223
|
```no-highlight
|
224
224
|
DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS="-t DAV" pilot ...
|
@@ -231,6 +231,10 @@ ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
|
|
231
231
|
pilot...
|
232
232
|
```
|
233
233
|
|
234
|
+
Note, however, that Apple recommends you don’t specify the `-t transport` and instead allow Transporter to use automatic transport discovery to determine the best transport mode for your packages. For this reason, if the `t` option is passed, we will raise a warning.
|
235
|
+
|
236
|
+
Also note that `-t` is not the only additional parameter that can be used. The string specified in the `DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS` environment variable will be forwarded to Transporter. For all the available options, check [Apple's Transporter User Guide](https://help.apple.com/itc/transporteruserguide/#/apdATD1E1288-D1E1A1303-D1E1288A1126).
|
237
|
+
|
234
238
|
## Credentials Issues
|
235
239
|
|
236
240
|
If your password contains special characters, _pilot_ may throw a confusing error saying your "Your Apple ID or password was entered incorrectly". The easiest way to fix this error is to change your password to something that **does not** contains special characters.
|
@@ -0,0 +1,142 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
class DownloadAppPrivacyDetailsFromAppStoreAction < Action
|
4
|
+
DEFAULT_PATH = Fastlane::Helper.fastlane_enabled_folder_path
|
5
|
+
DEFAULT_FILE_NAME = "app_privacy_details.json"
|
6
|
+
|
7
|
+
def self.run(params)
|
8
|
+
require 'spaceship'
|
9
|
+
|
10
|
+
# Prompts select team if multiple teams and none specified
|
11
|
+
UI.message("Login to App Store Connect (#{params[:username]})")
|
12
|
+
Spaceship::ConnectAPI.login(params[:username], use_portal: false, use_tunes: true, tunes_team_id: params[:team_id], team_name: params[:team_name])
|
13
|
+
UI.message("Login successful")
|
14
|
+
|
15
|
+
# Get App
|
16
|
+
app = Spaceship::ConnectAPI::App.find(params[:app_identifier])
|
17
|
+
unless app
|
18
|
+
UI.user_error!("Could not find app with bundle identifier '#{params[:app_identifier]}' on account #{params[:username]}")
|
19
|
+
end
|
20
|
+
|
21
|
+
# Download usages and return a config
|
22
|
+
raw_usages = download_app_data_usages(params, app)
|
23
|
+
|
24
|
+
usages_config = []
|
25
|
+
if raw_usages.count == 1 && raw_usages.first.data_protection.id == Spaceship::ConnectAPI::AppDataUsageDataProtection::ID::DATA_NOT_COLLECTED
|
26
|
+
usages_config << {
|
27
|
+
"data_protections" => [Spaceship::ConnectAPI::AppDataUsageDataProtection::ID::DATA_NOT_COLLECTED]
|
28
|
+
}
|
29
|
+
else
|
30
|
+
grouped_usages = raw_usages.group_by do |usage|
|
31
|
+
usage.category.id
|
32
|
+
end
|
33
|
+
grouped_usages.sort_by(&:first).each do |key, usage_group|
|
34
|
+
purposes = usage_group.map(&:purpose).compact || []
|
35
|
+
data_protections = usage_group.map(&:data_protection).compact || []
|
36
|
+
usages_config << {
|
37
|
+
"category" => key,
|
38
|
+
"purposes" => purposes.map(&:id).sort.uniq,
|
39
|
+
"data_protections" => data_protections.map(&:id).sort.uniq
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Save to JSON file
|
45
|
+
json = JSON.pretty_generate(usages_config)
|
46
|
+
path = output_path(params)
|
47
|
+
|
48
|
+
UI.message("Writing file to #{path}")
|
49
|
+
File.write(path, json)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.output_path(params)
|
53
|
+
path = params[:output_json_path]
|
54
|
+
return File.absolute_path(path)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.download_app_data_usages(params, app)
|
58
|
+
UI.message("Downloading App Data Usage")
|
59
|
+
|
60
|
+
# Delete all existing usages for new ones
|
61
|
+
Spaceship::ConnectAPI::AppDataUsage.all(app_id: app.id, includes: "category,grouping,purpose,dataProtection", limit: 500)
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.description
|
65
|
+
"Download App Privacy Details from an app in App Store Connect"
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.available_options
|
69
|
+
user = CredentialsManager::AppfileConfig.try_fetch_value(:itunes_connect_id)
|
70
|
+
user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
|
71
|
+
|
72
|
+
[
|
73
|
+
FastlaneCore::ConfigItem.new(key: :username,
|
74
|
+
env_name: "FASTLANE_USER",
|
75
|
+
description: "Your Apple ID Username for App Store Connect",
|
76
|
+
default_value: user,
|
77
|
+
default_value_dynamic: true),
|
78
|
+
FastlaneCore::ConfigItem.new(key: :app_identifier,
|
79
|
+
env_name: "UPLOAD_APP_PRIVACY_DETAILS_TO_APP_STORE_APP_IDENTIFIER",
|
80
|
+
description: "The bundle identifier of your app",
|
81
|
+
code_gen_sensitive: true,
|
82
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
|
83
|
+
default_value_dynamic: true),
|
84
|
+
FastlaneCore::ConfigItem.new(key: :team_id,
|
85
|
+
env_name: "FASTLANE_ITC_TEAM_ID",
|
86
|
+
description: "The ID of your App Store Connect team if you're in multiple teams",
|
87
|
+
optional: true,
|
88
|
+
is_string: false, # as we also allow integers, which we convert to strings anyway
|
89
|
+
code_gen_sensitive: true,
|
90
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_id),
|
91
|
+
default_value_dynamic: true),
|
92
|
+
FastlaneCore::ConfigItem.new(key: :team_name,
|
93
|
+
env_name: "FASTLANE_ITC_TEAM_NAME",
|
94
|
+
description: "The name of your App Store Connect team if you're in multiple teams",
|
95
|
+
optional: true,
|
96
|
+
code_gen_sensitive: true,
|
97
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:itc_team_name),
|
98
|
+
default_value_dynamic: true),
|
99
|
+
|
100
|
+
# JSON paths
|
101
|
+
FastlaneCore::ConfigItem.new(key: :output_json_path,
|
102
|
+
env_name: "UPLOAD_APP_PRIVACY_DETAILS_TO_APP_STORE_OUTPUT_JSON_PATH",
|
103
|
+
description: "Path to the app usage data JSON file generated by interactive questions",
|
104
|
+
conflicting_options: [:skip_json_file_saving],
|
105
|
+
default_value: File.join(DEFAULT_PATH, DEFAULT_FILE_NAME))
|
106
|
+
]
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.author
|
110
|
+
"igor-makarov"
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.is_supported?(platform)
|
114
|
+
[:ios, :mac, :tvos].include?(platform)
|
115
|
+
end
|
116
|
+
|
117
|
+
def self.details
|
118
|
+
"Download App Privacy Details from an app in App Store Connect. For more detail information, view https://docs.fastlane.tools/uploading-app-privacy-details"
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.example_code
|
122
|
+
[
|
123
|
+
'download_app_privacy_details_from_app_store(
|
124
|
+
username: "your@email.com",
|
125
|
+
team_name: "Your Team",
|
126
|
+
app_identifier: "com.your.bundle"
|
127
|
+
)',
|
128
|
+
'download_app_privacy_details_from_app_store(
|
129
|
+
username: "your@email.com",
|
130
|
+
team_name: "Your Team",
|
131
|
+
app_identifier: "com.your.bundle",
|
132
|
+
output_json_path: "fastlane/app_data_usages.json"
|
133
|
+
)'
|
134
|
+
]
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.category
|
138
|
+
:production
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -285,7 +285,6 @@ module Fastlane
|
|
285
285
|
short_option: "-p",
|
286
286
|
env_name: "DOWNLOAD_DSYMS_PLATFORM",
|
287
287
|
description: "The app platform for dSYMs you wish to download (ios, appletvos)",
|
288
|
-
optional: true,
|
289
288
|
default_value: :ios),
|
290
289
|
FastlaneCore::ConfigItem.new(key: :version,
|
291
290
|
short_option: "-v",
|
@@ -11,7 +11,11 @@ module Fastlane
|
|
11
11
|
skip_git_hooks = params[:skip_git_hooks] ? '--no-verify' : ''
|
12
12
|
|
13
13
|
if params[:allow_nothing_to_commit]
|
14
|
-
|
14
|
+
# Here we check if the path passed in parameter contains any modification
|
15
|
+
# and we skip the `git commit` command if there is none.
|
16
|
+
# That means you can have other files modified that are not in the path parameter
|
17
|
+
# and still make use of allow_nothing_to_commit.
|
18
|
+
repo_clean = Actions.sh("git status #{paths} --porcelain").empty?
|
15
19
|
UI.success("Nothing to commit, working tree clean ✅.") if repo_clean
|
16
20
|
return if repo_clean
|
17
21
|
end
|
@@ -42,7 +46,7 @@ module Fastlane
|
|
42
46
|
type: Boolean,
|
43
47
|
optional: true),
|
44
48
|
FastlaneCore::ConfigItem.new(key: :allow_nothing_to_commit,
|
45
|
-
description: "Set to true to allow commit without any git changes",
|
49
|
+
description: "Set to true to allow commit without any git changes in the files you want to commit",
|
46
50
|
type: Boolean,
|
47
51
|
optional: true)
|
48
52
|
]
|
@@ -13,7 +13,7 @@ module Fastlane
|
|
13
13
|
|
14
14
|
http_method = (params[:http_method] || 'GET').to_s.upcase
|
15
15
|
url = construct_url(params[:server_url], params[:path], params[:url])
|
16
|
-
headers = construct_headers(params[:api_token], params[:headers])
|
16
|
+
headers = construct_headers(params[:api_token], params[:api_bearer], params[:headers])
|
17
17
|
payload = construct_body(params[:body], params[:raw_body])
|
18
18
|
error_handlers = params[:error_handlers] || {}
|
19
19
|
secure = params[:secure]
|
@@ -89,12 +89,22 @@ module Fastlane
|
|
89
89
|
FastlaneCore::ConfigItem.new(key: :api_token,
|
90
90
|
env_name: "FL_GITHUB_API_TOKEN",
|
91
91
|
description: "Personal API Token for GitHub - generate one at https://github.com/settings/tokens",
|
92
|
+
conflicting_options: [:api_bearer],
|
92
93
|
sensitive: true,
|
93
94
|
code_gen_sensitive: true,
|
94
95
|
is_string: true,
|
95
96
|
default_value: ENV["GITHUB_API_TOKEN"],
|
96
97
|
default_value_dynamic: true,
|
97
|
-
optional:
|
98
|
+
optional: true),
|
99
|
+
FastlaneCore::ConfigItem.new(key: :api_bearer,
|
100
|
+
env_name: "FL_GITHUB_API_BEARER",
|
101
|
+
sensitive: true,
|
102
|
+
code_gen_sensitive: true,
|
103
|
+
is_string: true,
|
104
|
+
description: "Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable",
|
105
|
+
conflicting_options: [:api_token],
|
106
|
+
optional: true,
|
107
|
+
default_value: nil),
|
98
108
|
FastlaneCore::ConfigItem.new(key: :http_method,
|
99
109
|
env_name: "FL_GITHUB_API_HTTP_METHOD",
|
100
110
|
description: "The HTTP method. e.g. GET / POST",
|
@@ -202,10 +212,11 @@ module Fastlane
|
|
202
212
|
|
203
213
|
private
|
204
214
|
|
205
|
-
def construct_headers(api_token, overrides)
|
215
|
+
def construct_headers(api_token, api_bearer, overrides)
|
206
216
|
require 'base64'
|
207
217
|
headers = { 'User-Agent' => 'fastlane-github_api' }
|
208
218
|
headers['Authorization'] = "Basic #{Base64.strict_encode64(api_token)}" if api_token
|
219
|
+
headers['Authorization'] = "Bearer #{api_bearer}" if api_bearer
|
209
220
|
headers.merge(overrides || {})
|
210
221
|
end
|
211
222
|
|
@@ -17,6 +17,7 @@ module Fastlane
|
|
17
17
|
apns_p12_password = params[:apns_p12_password]
|
18
18
|
android_token = params[:android_token]
|
19
19
|
android_gcm_sender_id = params[:android_gcm_sender_id]
|
20
|
+
organization_id = params[:organization_id]
|
20
21
|
|
21
22
|
has_app_id = !app_id.empty?
|
22
23
|
has_app_name = !app_name.empty?
|
@@ -43,6 +44,7 @@ module Fastlane
|
|
43
44
|
|
44
45
|
payload["gcm_key"] = android_token unless android_token.nil?
|
45
46
|
payload["android_gcm_sender_id"] = android_gcm_sender_id unless android_gcm_sender_id.nil?
|
47
|
+
payload["organization_id"] = organization_id unless organization_id.nil?
|
46
48
|
|
47
49
|
# here's the actual lifting - POST or PUT to OneSignal
|
48
50
|
|
@@ -135,7 +137,13 @@ module Fastlane
|
|
135
137
|
env_name: "APNS_ENV",
|
136
138
|
description: "APNS environment",
|
137
139
|
optional: true,
|
138
|
-
default_value: 'production')
|
140
|
+
default_value: 'production'),
|
141
|
+
|
142
|
+
FastlaneCore::ConfigItem.new(key: :organization_id,
|
143
|
+
env_name: "ONE_SIGNAL_ORGANIZATION_ID",
|
144
|
+
sensitive: true,
|
145
|
+
description: "OneSignal Organization ID",
|
146
|
+
optional: true)
|
139
147
|
]
|
140
148
|
end
|
141
149
|
|
@@ -163,7 +171,8 @@ module Fastlane
|
|
163
171
|
android_gcm_sender_id: "Your Android GCM Sender ID (optional)",
|
164
172
|
apns_p12: "Path to Apple .p12 file (optional)",
|
165
173
|
apns_p12_password: "Password for .p12 file (optional)",
|
166
|
-
apns_env: "production/sandbox (defaults to production)"
|
174
|
+
apns_env: "production/sandbox (defaults to production)",
|
175
|
+
organization_id: "Onesignal organization id (optional)"
|
167
176
|
)',
|
168
177
|
'onesignal(
|
169
178
|
app_id: "Your OneSignal App ID",
|
@@ -173,7 +182,8 @@ module Fastlane
|
|
173
182
|
android_gcm_sender_id: "Your Android GCM Sender ID (optional)",
|
174
183
|
apns_p12: "Path to Apple .p12 file (optional)",
|
175
184
|
apns_p12_password: "Password for .p12 file (optional)",
|
176
|
-
apns_env: "production/sandbox (defaults to production)"
|
185
|
+
apns_env: "production/sandbox (defaults to production)",
|
186
|
+
organization_id: "Onesignal organization id (optional)"
|
177
187
|
)'
|
178
188
|
]
|
179
189
|
end
|
@@ -43,6 +43,10 @@ module Fastlane
|
|
43
43
|
command << "--skip-tests"
|
44
44
|
end
|
45
45
|
|
46
|
+
if params[:use_json]
|
47
|
+
command << "--use-json"
|
48
|
+
end
|
49
|
+
|
46
50
|
if params[:verbose]
|
47
51
|
command << "--verbose"
|
48
52
|
end
|
@@ -121,6 +125,11 @@ module Fastlane
|
|
121
125
|
optional: true,
|
122
126
|
type: Boolean,
|
123
127
|
env_name: "FL_POD_PUSH_SKIP_TESTS"),
|
128
|
+
FastlaneCore::ConfigItem.new(key: :use_json,
|
129
|
+
description: "Convert the podspec to JSON before pushing it to the repo",
|
130
|
+
optional: true,
|
131
|
+
type: Boolean,
|
132
|
+
env_name: "FL_POD_PUSH_USE_JSON"),
|
124
133
|
FastlaneCore::ConfigItem.new(key: :verbose,
|
125
134
|
description: "Show more debugging information",
|
126
135
|
optional: true,
|
@@ -32,6 +32,9 @@ module Fastlane
|
|
32
32
|
# optionally add the set-upstream component
|
33
33
|
command << '--set-upstream' if params[:set_upstream]
|
34
34
|
|
35
|
+
# optionally add the --push_options components
|
36
|
+
params[:push_options].each { |push_option| command << "--push-option=#{push_option}" }
|
37
|
+
|
35
38
|
# execute our command
|
36
39
|
Actions.sh('pwd')
|
37
40
|
return command.join(' ') if Helper.test?
|
@@ -84,7 +87,12 @@ module Fastlane
|
|
84
87
|
env_name: "FL_GIT_PUSH_USE_SET_UPSTREAM",
|
85
88
|
description: "Whether or not to use --set-upstream",
|
86
89
|
type: Boolean,
|
87
|
-
default_value: false)
|
90
|
+
default_value: false),
|
91
|
+
FastlaneCore::ConfigItem.new(key: :push_options,
|
92
|
+
env_name: "FL_GIT_PUSH_PUSH_OPTION",
|
93
|
+
description: "Array of strings to be passed using the '--push-option' option",
|
94
|
+
type: Array,
|
95
|
+
default_value: [])
|
88
96
|
]
|
89
97
|
end
|
90
98
|
|
@@ -27,7 +27,7 @@ module Fastlane
|
|
27
27
|
end
|
28
28
|
|
29
29
|
begin
|
30
|
-
Spaceship::ConnectAPI::Device.
|
30
|
+
Spaceship::ConnectAPI::Device.find_or_create(udid, name: name, platform: platform)
|
31
31
|
rescue => ex
|
32
32
|
UI.error(ex.to_s)
|
33
33
|
UI.crash!("Failed to register new device (name: #{name}, platform: #{platform}, UDID: #{udid})")
|
@@ -77,7 +77,7 @@ module Fastlane
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def self.try_create_device(name: nil, platform: nil, udid: nil)
|
80
|
-
Spaceship::ConnectAPI::Device.
|
80
|
+
Spaceship::ConnectAPI::Device.find_or_create(udid, name: name, platform: platform)
|
81
81
|
rescue => ex
|
82
82
|
UI.error(ex.to_s)
|
83
83
|
UI.crash!("Failed to register new device (name: #{name}, UDID: #{udid})")
|
@@ -155,6 +155,7 @@ module Fastlane
|
|
155
155
|
FastlaneCore::ConfigItem.new(key: :username,
|
156
156
|
env_name: "DELIVER_USER",
|
157
157
|
description: "Optional: Your Apple ID",
|
158
|
+
optional: true,
|
158
159
|
default_value: user,
|
159
160
|
default_value_dynamic: true),
|
160
161
|
FastlaneCore::ConfigItem.new(key: :platform,
|
@@ -13,6 +13,7 @@ module Fastlane
|
|
13
13
|
|
14
14
|
repo_name = params[:repository_name]
|
15
15
|
api_token = params[:api_token]
|
16
|
+
api_bearer = params[:api_bearer]
|
16
17
|
server_url = params[:server_url]
|
17
18
|
tag_name = params[:tag_name]
|
18
19
|
|
@@ -28,6 +29,7 @@ module Fastlane
|
|
28
29
|
GithubApiAction.run(
|
29
30
|
server_url: server_url,
|
30
31
|
api_token: api_token,
|
32
|
+
api_bearer: api_bearer,
|
31
33
|
http_method: 'POST',
|
32
34
|
path: "repos/#{repo_name}/releases",
|
33
35
|
body: payload,
|
@@ -65,12 +67,13 @@ module Fastlane
|
|
65
67
|
assets = params[:upload_assets]
|
66
68
|
if assets && assets.count > 0
|
67
69
|
# upload assets
|
68
|
-
self.upload_assets(assets, json['upload_url'], api_token)
|
70
|
+
self.upload_assets(assets, json['upload_url'], api_token, api_bearer)
|
69
71
|
|
70
72
|
# fetch the release again, so that it contains the uploaded assets
|
71
73
|
GithubApiAction.run(
|
72
74
|
server_url: server_url,
|
73
75
|
api_token: api_token,
|
76
|
+
api_bearer: api_bearer,
|
74
77
|
http_method: 'GET',
|
75
78
|
path: "repos/#{repo_name}/releases/#{release_id}",
|
76
79
|
error_handlers: {
|
@@ -90,13 +93,13 @@ module Fastlane
|
|
90
93
|
end
|
91
94
|
end
|
92
95
|
|
93
|
-
def self.upload_assets(assets, upload_url_template, api_token)
|
96
|
+
def self.upload_assets(assets, upload_url_template, api_token, api_bearer)
|
94
97
|
assets.each do |asset|
|
95
|
-
self.upload(asset, upload_url_template, api_token)
|
98
|
+
self.upload(asset, upload_url_template, api_token, api_bearer)
|
96
99
|
end
|
97
100
|
end
|
98
101
|
|
99
|
-
def self.upload(asset_path, upload_url_template, api_token)
|
102
|
+
def self.upload(asset_path, upload_url_template, api_token, api_bearer)
|
100
103
|
# if it's a directory, zip it first in a temp directory, because we can only upload binary files
|
101
104
|
absolute_path = File.absolute_path(asset_path)
|
102
105
|
|
@@ -107,14 +110,14 @@ module Fastlane
|
|
107
110
|
Dir.mktmpdir do |dir|
|
108
111
|
tmpzip = File.join(dir, File.basename(absolute_path) + '.zip')
|
109
112
|
sh("cd \"#{File.dirname(absolute_path)}\"; zip -r --symlinks \"#{tmpzip}\" \"#{File.basename(absolute_path)}\" 2>&1 >/dev/null")
|
110
|
-
self.upload_file(tmpzip, upload_url_template, api_token)
|
113
|
+
self.upload_file(tmpzip, upload_url_template, api_token, api_bearer)
|
111
114
|
end
|
112
115
|
else
|
113
|
-
self.upload_file(absolute_path, upload_url_template, api_token)
|
116
|
+
self.upload_file(absolute_path, upload_url_template, api_token, api_bearer)
|
114
117
|
end
|
115
118
|
end
|
116
119
|
|
117
|
-
def self.upload_file(file, url_template, api_token)
|
120
|
+
def self.upload_file(file, url_template, api_token, api_bearer)
|
118
121
|
require 'addressable/template'
|
119
122
|
file_name = File.basename(file)
|
120
123
|
expanded_url = Addressable::Template.new(url_template).expand(name: file_name).to_s
|
@@ -122,6 +125,7 @@ module Fastlane
|
|
122
125
|
UI.important("Uploading #{file_name}")
|
123
126
|
GithubApiAction.run(
|
124
127
|
api_token: api_token,
|
128
|
+
api_bearer: api_bearer,
|
125
129
|
http_method: 'POST',
|
126
130
|
headers: headers,
|
127
131
|
url: expanded_url,
|
@@ -173,12 +177,21 @@ module Fastlane
|
|
173
177
|
FastlaneCore::ConfigItem.new(key: :api_token,
|
174
178
|
env_name: "FL_GITHUB_RELEASE_API_TOKEN",
|
175
179
|
description: "Personal API Token for GitHub - generate one at https://github.com/settings/tokens",
|
180
|
+
conflicting_options: [:api_bearer],
|
176
181
|
sensitive: true,
|
177
182
|
code_gen_sensitive: true,
|
178
183
|
is_string: true,
|
179
184
|
default_value: ENV["GITHUB_API_TOKEN"],
|
180
185
|
default_value_dynamic: true,
|
181
|
-
optional:
|
186
|
+
optional: true),
|
187
|
+
FastlaneCore::ConfigItem.new(key: :api_bearer,
|
188
|
+
env_name: "FL_GITHUB_RELEASE_API_BEARER",
|
189
|
+
sensitive: true,
|
190
|
+
code_gen_sensitive: true,
|
191
|
+
description: "Use a Bearer authorization token. Usually generated by Github Apps, e.g. GitHub Actions GITHUB_TOKEN environment variable",
|
192
|
+
conflicting_options: [:api_token],
|
193
|
+
optional: true,
|
194
|
+
default_value: nil),
|
182
195
|
FastlaneCore::ConfigItem.new(key: :tag_name,
|
183
196
|
env_name: "FL_SET_GITHUB_RELEASE_TAG_NAME",
|
184
197
|
description: "Pass in the tag name",
|