fastlane 0.11.0 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/assets/FastfileTemplate +3 -0
- data/lib/fastlane.rb +1 -0
- data/lib/fastlane/action.rb +5 -0
- data/lib/fastlane/action_collector.rb +3 -1
- data/lib/fastlane/actions/actions_helper.rb +5 -0
- data/lib/fastlane/actions/add_git_tag.rb +21 -15
- data/lib/fastlane/actions/cert.rb +2 -2
- data/lib/fastlane/actions/clean_build_artifacts.rb +1 -1
- data/lib/fastlane/actions/commit_version_bump.rb +15 -8
- data/lib/fastlane/actions/crashlytics.rb +51 -66
- data/lib/fastlane/actions/deliver.rb +32 -15
- data/lib/fastlane/actions/deploygate.rb +29 -22
- data/lib/fastlane/actions/ensure_git_status_clean.rb +1 -1
- data/lib/fastlane/actions/frameit.rb +2 -2
- data/lib/fastlane/actions/gcovr.rb +2 -2
- data/lib/fastlane/actions/hipchat.rb +36 -23
- data/lib/fastlane/actions/hockey.rb +37 -23
- data/lib/fastlane/actions/increment_build_number.rb +14 -19
- data/lib/fastlane/actions/increment_version_number.rb +42 -44
- data/lib/fastlane/actions/install_carthage.rb +1 -1
- data/lib/fastlane/actions/install_cocapods.rb +1 -1
- data/lib/fastlane/actions/ipa.rb +69 -47
- data/lib/fastlane/actions/notify.rb +1 -1
- data/lib/fastlane/actions/pem.rb +1 -1
- data/lib/fastlane/actions/produce.rb +3 -4
- data/lib/fastlane/actions/push_to_git_remote.rb +24 -14
- data/lib/fastlane/actions/register_devices.rb +23 -11
- data/lib/fastlane/actions/reset_git_repo.rb +13 -5
- data/lib/fastlane/actions/resign.rb +19 -16
- data/lib/fastlane/actions/s3.rb +56 -37
- data/lib/fastlane/actions/sigh.rb +1 -1
- data/lib/fastlane/actions/slack.rb +31 -13
- data/lib/fastlane/actions/snapshot.rb +13 -6
- data/lib/fastlane/actions/team_id.rb +1 -1
- data/lib/fastlane/actions/team_name.rb +1 -1
- data/lib/fastlane/actions/testmunk.rb +28 -14
- data/lib/fastlane/actions/typetalk.rb +1 -1
- data/lib/fastlane/actions/update_fastlane.rb +115 -0
- data/lib/fastlane/actions/update_project_code_signing.rb +22 -7
- data/lib/fastlane/actions/xcode_select.rb +1 -1
- data/lib/fastlane/actions/xcodebuild.rb +56 -12
- data/lib/fastlane/actions_list.rb +2 -2
- data/lib/fastlane/configuration_helper.rb +28 -0
- data/lib/fastlane/fast_file.rb +17 -0
- data/lib/fastlane/fastlane_folder.rb +3 -3
- data/lib/fastlane/setup.rb +11 -5
- data/lib/fastlane/version.rb +1 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b6af986f5285287dc4be0672d7567284e404ad1f
|
4
|
+
data.tar.gz: 349556bcb8ecd9755d3276a1691c14e3fe423e43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c28b00dfefe71736fefdedc38cf21f224113e2f66a7f2b9ec80c9c08012251c167fd05e5c3e53a8183b3a086ccc421b055e4cde9cd8202f39f9d6ebcaa00d080
|
7
|
+
data.tar.gz: 26a97d1667f249374d9cdc7338a3344305fb8698dc613c8a5483a4eeb508357e0b4a891e50ce694741d9ffb374c893872a2b9f2bac5c6b3c7bc36e4b0564c0cd
|
data/lib/assets/FastfileTemplate
CHANGED
@@ -9,6 +9,9 @@
|
|
9
9
|
# Uncomment the following line to opt out
|
10
10
|
# opt_out_usage
|
11
11
|
|
12
|
+
# If you want to automatically update fastlane if a new version is available:
|
13
|
+
# update_fastlane
|
14
|
+
|
12
15
|
# This is the minimum version number required.
|
13
16
|
# Update this, if you use features of a newer version
|
14
17
|
fastlane_version "[[FASTLANE_VERSION]]"
|
data/lib/fastlane.rb
CHANGED
data/lib/fastlane/action.rb
CHANGED
@@ -54,5 +54,10 @@ module Fastlane
|
|
54
54
|
def self.sh(command)
|
55
55
|
Fastlane::Actions.sh(command)
|
56
56
|
end
|
57
|
+
|
58
|
+
# instead of "AddGitAction", this will return "add_git" to print it to the user
|
59
|
+
def self.action_name
|
60
|
+
self.name.split('::').last.gsub('Action', '').fastlane_underscore
|
61
|
+
end
|
57
62
|
end
|
58
63
|
end
|
@@ -17,6 +17,11 @@ module Fastlane
|
|
17
17
|
@lane_context ||= {}
|
18
18
|
end
|
19
19
|
|
20
|
+
# Used in tests to get a clear lane before every test
|
21
|
+
def self.clear_lane_context
|
22
|
+
@lane_context = nil
|
23
|
+
end
|
24
|
+
|
20
25
|
# Pass a block which should be tracked. One block = one testcase
|
21
26
|
# @param step_name (String) the name of the currently built code (e.g. snapshot, sigh, ...)
|
22
27
|
def self.execute_action(step_name)
|
@@ -2,19 +2,12 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
# Adds a git tag to the current commit
|
4
4
|
class AddGitTagAction < Action
|
5
|
-
def self.run(
|
6
|
-
|
5
|
+
def self.run(options)
|
6
|
+
lane_name = Actions.lane_context[Actions::SharedValues::LANE_NAME].gsub(' ', '') # no spaces allowed
|
7
7
|
|
8
|
-
|
9
|
-
grouping = (params && params[:grouping]) || 'builds'
|
10
|
-
prefix = (params && params[:prefix]) || ''
|
11
|
-
build_number = (params && params[:build_number]) || Actions.lane_context[Actions::SharedValues::BUILD_NUMBER]
|
12
|
-
|
13
|
-
lane_name = Actions.lane_context[Actions::SharedValues::LANE_NAME]
|
8
|
+
tag = options[:tag] || "#{options[:grouping]}/#{lane_name}/#{options[:prefix]}#{options[:build_number].to_s}"
|
14
9
|
|
15
|
-
|
16
|
-
|
17
|
-
Helper.log.info 'Adding git tag "#{tag}" 🎯.'
|
10
|
+
Helper.log.info "Adding git tag '#{tag}' 🎯."
|
18
11
|
Actions.sh("git tag #{tag}")
|
19
12
|
end
|
20
13
|
|
@@ -24,10 +17,23 @@ module Fastlane
|
|
24
17
|
|
25
18
|
def self.available_options
|
26
19
|
[
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
20
|
+
FastlaneCore::ConfigItem.new(key: :tag,
|
21
|
+
env_name: "FL_GIT_TAG_TAG",
|
22
|
+
description: "Define your own tag text. This will replace all other parameters",
|
23
|
+
optional: true),
|
24
|
+
FastlaneCore::ConfigItem.new(key: :grouping,
|
25
|
+
env_name: "FL_GIT_TAG_GROUPING",
|
26
|
+
description: "Is used to keep your tags organised under one 'folder'. Defaults to 'builds'",
|
27
|
+
default_value: 'builds'),
|
28
|
+
FastlaneCore::ConfigItem.new(key: :prefix,
|
29
|
+
env_name: "FL_GIT_TAG_PREFIX",
|
30
|
+
description: "Anything you want to put in front of the version number (e.g. 'v')",
|
31
|
+
default_value: ''),
|
32
|
+
FastlaneCore::ConfigItem.new(key: :build_number,
|
33
|
+
env_name: "FL_GIT_TAG_BUILD_NUMBER",
|
34
|
+
description: "The build number. Defaults to the result of increment_build_number if you\'re using it",
|
35
|
+
default_value: Actions.lane_context[Actions::SharedValues::BUILD_NUMBER],
|
36
|
+
is_string: false)
|
31
37
|
]
|
32
38
|
end
|
33
39
|
|
@@ -12,7 +12,7 @@ module Fastlane
|
|
12
12
|
|
13
13
|
return if Helper.test?
|
14
14
|
|
15
|
-
FastlaneCore::UpdateChecker.start_looking_for_update('cert')
|
15
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('cert') unless Helper.is_test?
|
16
16
|
|
17
17
|
begin
|
18
18
|
Dir.chdir(FastlaneFolder.path || Dir.pwd) do
|
@@ -37,7 +37,7 @@ module Fastlane
|
|
37
37
|
|
38
38
|
Helper.log.info("Use signing certificate '#{certificate_id}' from now on!".green)
|
39
39
|
|
40
|
-
ENV["SIGH_CERTIFICATE_ID"] = certificate_id
|
40
|
+
ENV["SIGH_CERTIFICATE_ID"] = certificate_id # for further use in the sigh action
|
41
41
|
end
|
42
42
|
ensure
|
43
43
|
FastlaneCore::UpdateChecker.show_update_status('cert', Cert::VERSION)
|
@@ -8,10 +8,7 @@ module Fastlane
|
|
8
8
|
require 'set'
|
9
9
|
require 'shellwords'
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
commit_message = (params && params[:message]) || 'Version Bump'
|
14
|
-
xcodeproj_path = (params && params[:xcodeproj]) ? File.expand_path(File.join('.', params[:xcodeproj])) : nil
|
11
|
+
xcodeproj_path = params[:xcodeproj] ? File.expand_path(File.join('.', params[:xcodeproj])) : nil
|
15
12
|
|
16
13
|
# find the repo root path
|
17
14
|
repo_path = `git rev-parse --show-toplevel`.strip
|
@@ -70,9 +67,9 @@ module Fastlane
|
|
70
67
|
|
71
68
|
# then create a commit with a message
|
72
69
|
Actions.sh("git add #{git_add_paths.map(&:shellescape).join(' ')}")
|
73
|
-
Actions.sh("git commit -m '#{
|
70
|
+
Actions.sh("git commit -m '#{params[:message]}'")
|
74
71
|
|
75
|
-
Helper.log.info "Committed \"#{
|
72
|
+
Helper.log.info "Committed \"#{params[:message]}\" 💾.".green
|
76
73
|
end
|
77
74
|
|
78
75
|
def self.description
|
@@ -81,8 +78,18 @@ module Fastlane
|
|
81
78
|
|
82
79
|
def self.available_options
|
83
80
|
[
|
84
|
-
|
85
|
-
|
81
|
+
FastlaneCore::ConfigItem.new(key: :message,
|
82
|
+
env_name: "FL_COMMIT_BUMP_MESSAGE",
|
83
|
+
description: "The commit message when committing the version bump",
|
84
|
+
default_value: "Version Bump"),
|
85
|
+
FastlaneCore::ConfigItem.new(key: :xcodeproj,
|
86
|
+
env_name: "FL_BUILD_NUMBER_PROJECT",
|
87
|
+
description: "The path to your project file (Not the workspace). If you have only one, this is optional",
|
88
|
+
optional: true,
|
89
|
+
verify_block: Proc.new do |value|
|
90
|
+
raise "Please pass the path to the project, not the workspace".red if value.include?"workspace"
|
91
|
+
raise "Could not find Xcode project".red unless File.exists?(value)
|
92
|
+
end)
|
86
93
|
]
|
87
94
|
end
|
88
95
|
|
@@ -13,19 +13,7 @@ module Fastlane
|
|
13
13
|
def self.run(params)
|
14
14
|
require 'shenzhen'
|
15
15
|
require 'shenzhen/plugins/crashlytics'
|
16
|
-
|
17
|
-
assert_params_given!(params)
|
18
|
-
|
19
|
-
params = params.first
|
20
|
-
|
21
|
-
crashlytics_path = params[:crashlytics_path] || ENV["CRASHLYTICS_FRAMEWORK_PATH"]
|
22
|
-
api_token = params[:api_token] || ENV["CRASHLYTICS_API_TOKEN"]
|
23
|
-
build_secret = params[:build_secret] || ENV["CRASHLYTICS_BUILD_SECRET"]
|
24
|
-
ipa_path = params[:ipa_path] || Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
25
|
-
notes_path = params[:notes_path]
|
26
|
-
emails = params[:emails]
|
27
|
-
notifications = params[:notifications]
|
28
|
-
|
16
|
+
|
29
17
|
# can pass groups param either as an Array or a String
|
30
18
|
case params[:groups]
|
31
19
|
when NilClass
|
@@ -36,15 +24,16 @@ module Fastlane
|
|
36
24
|
groups = params[:groups]
|
37
25
|
end
|
38
26
|
|
39
|
-
assert_valid_params!(crashlytics_path, api_token, build_secret, ipa_path)
|
40
|
-
|
41
27
|
Helper.log.info 'Uploading the IPA to Crashlytics. Go for a coffee ☕️.'.green
|
42
28
|
|
43
|
-
|
29
|
+
if Helper.test?
|
30
|
+
# Access all values, to do the verify
|
31
|
+
return params[:crashlytics_path], params[:api_token], params[:build_secret], params[:ipa_path], params[:build_secret], params[:ipa_path], params[:notes_path], params[:emails], params[:groups], params[:notifications]
|
32
|
+
end
|
44
33
|
|
45
|
-
client = Shenzhen::Plugins::Crashlytics::Client.new(crashlytics_path, api_token, build_secret)
|
34
|
+
client = Shenzhen::Plugins::Crashlytics::Client.new(params[:crashlytics_path], params[:api_token], params[:build_secret])
|
46
35
|
|
47
|
-
response = client.upload_build(ipa_path, file: ipa_path, notes: notes_path, emails: emails, groups: groups, notifications: notifications)
|
36
|
+
response = client.upload_build(ipa_path, file: params[:ipa_path], notes: params[:notes_path], emails: params[:emails], groups: params[:groups], notifications: params[:notifications])
|
48
37
|
|
49
38
|
if response
|
50
39
|
Helper.log.info 'Build successfully uploaded to Crashlytics'.green
|
@@ -54,66 +43,62 @@ module Fastlane
|
|
54
43
|
end
|
55
44
|
end
|
56
45
|
|
57
|
-
private
|
58
|
-
|
59
|
-
def self.assert_params_given!(params)
|
60
|
-
return unless params.empty?
|
61
|
-
raise 'You have to pass Crashlytics parameters to the Crashlytics action, take a look at https://github.com/KrauseFx/fastlane#crashlytics'.red
|
62
|
-
end
|
63
|
-
|
64
|
-
def self.assert_valid_params!(crashlytics_path, api_token, build_secret, ipa_path)
|
65
|
-
assert_valid_crashlytics_path!(crashlytics_path)
|
66
|
-
assert_valid_api_token!(api_token)
|
67
|
-
assert_valid_build_secret!(build_secret)
|
68
|
-
assert_valid_ipa_path!(ipa_path)
|
69
|
-
end
|
70
|
-
|
71
|
-
def self.assert_valid_crashlytics_path!(crashlytics_path)
|
72
|
-
return if crashlytics_path && File.exist?(crashlytics_path)
|
73
|
-
raise "No Crashlytics path given or found, pass using `crashlytics_path: 'path'`".red
|
74
|
-
end
|
75
|
-
|
76
|
-
def self.assert_valid_api_token!(token)
|
77
|
-
return unless token.nil? || token.empty?
|
78
|
-
raise "No API token for Crashlytics given, pass using `api_token: 'token'`".red
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.assert_valid_build_secret!(build_secret)
|
82
|
-
return unless build_secret.nil? || build_secret.empty?
|
83
|
-
raise "No build secret for Crashlytics given, pass using `build_secret: 'secret'`".red
|
84
|
-
end
|
85
|
-
|
86
|
-
def self.assert_valid_ipa_path!(ipa_path)
|
87
|
-
return if ipa_path && File.exist?(ipa_path)
|
88
|
-
raise "No IPA file given or found, pass using `ipa_path: 'path/app.ipa'`".red
|
89
|
-
end
|
90
|
-
|
91
46
|
def self.description
|
92
47
|
"Upload a new build to Crashlytics Beta"
|
93
48
|
end
|
94
49
|
|
95
50
|
def self.available_options
|
96
51
|
[
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
52
|
+
FastlaneCore::ConfigItem.new(key: :crashlytics_path,
|
53
|
+
env_name: "CRASHLYTICS_FRAMEWORK_PATH",
|
54
|
+
description: "Path to your Crashlytics bundle",
|
55
|
+
verify_block: Proc.new do |value|
|
56
|
+
raise "No Crashlytics path given or found, pass using `crashlytics_path: 'path'`".red unless File.exists?(value)
|
57
|
+
end),
|
58
|
+
FastlaneCore::ConfigItem.new(key: :api_token,
|
59
|
+
env_name: "CRASHLYTICS_API_TOKEN",
|
60
|
+
description: "Crashlytics Beta API Token",
|
61
|
+
verify_block: Proc.new do |value|
|
62
|
+
raise "No API token for Crashlytics given, pass using `api_token: 'token'`".red unless (value and not value.empty?)
|
63
|
+
end),
|
64
|
+
FastlaneCore::ConfigItem.new(key: :build_secret,
|
65
|
+
env_name: "CRASHLYTICS_BUILD_SECRET",
|
66
|
+
description: "Crashlytics Build Secret",
|
67
|
+
verify_block: Proc.new do |value|
|
68
|
+
raise "No build secret for Crashlytics given, pass using `build_secret: 'secret'`".red unless (value and not value.empty?)
|
69
|
+
end),
|
70
|
+
FastlaneCore::ConfigItem.new(key: :ipa_path,
|
71
|
+
env_name: "CRASHLYTICS_IPA_PATH",
|
72
|
+
description: "Path to your IPA file. Optional if you use the `ipa` or `xcodebuild` action",
|
73
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
74
|
+
verify_block: Proc.new do |value|
|
75
|
+
raise "No IPA file given or found, pass using `ipa_path: 'path/app.ipa'`".red unless File.exists?(value)
|
76
|
+
end),
|
77
|
+
FastlaneCore::ConfigItem.new(key: :notes_path,
|
78
|
+
env_name: "CRASHLYTICS_NOTES_PATH",
|
79
|
+
description: "Path to the release notes",
|
80
|
+
optional: true,
|
81
|
+
verify_block: Proc.new do |value|
|
82
|
+
raise "Path '#{value}' not found".red unless File.exists?(value)
|
83
|
+
end),
|
84
|
+
FastlaneCore::ConfigItem.new(key: :groups,
|
85
|
+
env_name: "CRASHLYTICS_GROUPS",
|
86
|
+
description: "The groups used for distribution",
|
87
|
+
optional: true),
|
88
|
+
FastlaneCore::ConfigItem.new(key: :emails,
|
89
|
+
env_name: "CRASHLYTICS_EMAILS",
|
90
|
+
description: "Pass email addresses, separated by commas",
|
91
|
+
optional: true),
|
92
|
+
FastlaneCore::ConfigItem.new(key: :notifications,
|
93
|
+
env_name: "CRASHLYTICS_NOTIFICATIONS",
|
94
|
+
description: "Crashlytics notification option (true/false)",
|
95
|
+
optional: true)
|
104
96
|
]
|
105
97
|
end
|
106
98
|
|
107
99
|
def self.author
|
108
100
|
"pedrogimenez"
|
109
101
|
end
|
110
|
-
|
111
|
-
private_class_method :assert_params_given!,
|
112
|
-
:assert_valid_params!,
|
113
|
-
:assert_valid_crashlytics_path!,
|
114
|
-
:assert_valid_api_token!,
|
115
|
-
:assert_valid_build_secret!,
|
116
|
-
:assert_valid_ipa_path!
|
117
102
|
end
|
118
103
|
end
|
119
104
|
end
|
@@ -4,24 +4,20 @@ module Fastlane
|
|
4
4
|
end
|
5
5
|
|
6
6
|
class DeliverAction < Action
|
7
|
-
def self.run(
|
7
|
+
def self.run(config)
|
8
8
|
require 'deliver'
|
9
9
|
|
10
|
-
FastlaneCore::UpdateChecker.start_looking_for_update('deliver')
|
10
|
+
FastlaneCore::UpdateChecker.start_looking_for_update('deliver') unless Helper.is_test?
|
11
11
|
|
12
12
|
begin
|
13
|
-
ENV['DELIVER_SCREENSHOTS_PATH'] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH]
|
13
|
+
ENV['DELIVER_SCREENSHOTS_PATH'] = Actions.lane_context[SharedValues::SNAPSHOT_SCREENSHOTS_PATH] # use snapshot's screenshots if there
|
14
14
|
|
15
|
-
|
16
|
-
beta = params.include?(:beta)
|
17
|
-
skip_deploy = params.include?(:skip_deploy)
|
18
|
-
|
19
|
-
Dir.chdir(ENV["DELIVERFILE_PATH"] || FastlaneFolder.path || Dir.pwd) do
|
15
|
+
Dir.chdir(config[:deliver_file_path] || FastlaneFolder.path || Dir.pwd) do
|
20
16
|
# This should be executed in the fastlane folder
|
21
17
|
Deliver::Deliverer.new(nil,
|
22
|
-
force: force,
|
23
|
-
is_beta_ipa: beta,
|
24
|
-
skip_deploy: skip_deploy)
|
18
|
+
force: config[:force],
|
19
|
+
is_beta_ipa: config[:beta],
|
20
|
+
skip_deploy: config[:skip_deploy])
|
25
21
|
|
26
22
|
if ENV['DELIVER_IPA_PATH'] # since IPA upload is optional
|
27
23
|
Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] = File.expand_path(ENV['DELIVER_IPA_PATH']) # deliver will store it in the environment
|
@@ -38,10 +34,31 @@ module Fastlane
|
|
38
34
|
|
39
35
|
def self.available_options
|
40
36
|
[
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
37
|
+
FastlaneCore::ConfigItem.new(key: :force,
|
38
|
+
env_name: "FL_DELIVER_FORCE",
|
39
|
+
description: "Set to true to skip PDF verification",
|
40
|
+
optional: true,
|
41
|
+
default_value: false,
|
42
|
+
is_string: false),
|
43
|
+
FastlaneCore::ConfigItem.new(key: :beta,
|
44
|
+
env_name: "FL_DELIVER_BETA",
|
45
|
+
description: "Upload a new version to TestFlight",
|
46
|
+
optional: true,
|
47
|
+
default_value: false,
|
48
|
+
is_string: false),
|
49
|
+
FastlaneCore::ConfigItem.new(key: :skip_deploy,
|
50
|
+
env_name: "FL_DELIVER_SKIP_DEPLOY",
|
51
|
+
description: "Skip the submission of the app - it will only be uploaded",
|
52
|
+
optional: true,
|
53
|
+
default_value: false,
|
54
|
+
is_string: false),
|
55
|
+
FastlaneCore::ConfigItem.new(key: :deliver_file_path,
|
56
|
+
env_name: "FL_DELIVER_CONFIG_PATH",
|
57
|
+
description: "Specify a path to the directory containing the Deliverfile",
|
58
|
+
default_value: FastlaneFolder.path || Dir.pwd, # defaults to fastlane folder
|
59
|
+
verify_block: Proc.new do |value|
|
60
|
+
raise "Couldn't find folder '#{value}'. Make sure to pass the path to the directory not the file!".red unless File.directory?(value)
|
61
|
+
end)
|
45
62
|
]
|
46
63
|
end
|
47
64
|
|
@@ -17,25 +17,21 @@ module Fastlane
|
|
17
17
|
platform == :ios
|
18
18
|
end
|
19
19
|
|
20
|
-
def self.run(
|
20
|
+
def self.run(options)
|
21
21
|
require 'shenzhen'
|
22
22
|
require 'shenzhen/plugins/deploygate'
|
23
23
|
|
24
24
|
# Available options: https://deploygate.com/docs/api
|
25
|
-
options = {
|
26
|
-
ipa: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]
|
27
|
-
}.merge(params.first || {})
|
28
|
-
assert_options!(options)
|
29
|
-
|
30
25
|
Helper.log.info 'Starting with ipa upload to DeployGate... this could take some time ⏳'.green
|
26
|
+
|
31
27
|
client = Shenzhen::Plugins::DeployGate::Client.new(
|
32
|
-
options
|
33
|
-
options
|
28
|
+
options[:api_token],
|
29
|
+
options[:user]
|
34
30
|
)
|
35
31
|
|
36
|
-
return if Helper.test?
|
32
|
+
return options[:ipa] if Helper.test?
|
37
33
|
|
38
|
-
response = client.upload_build(options
|
34
|
+
response = client.upload_build(options[:ipa], options)
|
39
35
|
if parse_response(response)
|
40
36
|
Helper.log.info "DeployGate URL: #{Actions.lane_context[SharedValues::DEPLOYGATE_URL]}"
|
41
37
|
Helper.log.info "Build successfully uploaded to DeployGate as revision \##{Actions.lane_context[SharedValues::DEPLOYGATE_REVISION]}!".green
|
@@ -44,14 +40,6 @@ module Fastlane
|
|
44
40
|
end
|
45
41
|
end
|
46
42
|
|
47
|
-
def self.assert_options!(options)
|
48
|
-
raise "No API Token for DeployGate given, pass using `api_token: 'token'`".red unless options[:api_token].to_s.length > 0
|
49
|
-
raise "No User for app given, pass using `user: 'user'`".red unless options[:user].to_s.length > 0
|
50
|
-
raise "No IPA file given or found, pass using `ipa: 'path.ipa'`".red unless options[:ipa]
|
51
|
-
raise "IPA file on path '#{File.expand_path(options[:ipa])}' not found".red unless File.exist?(options[:ipa])
|
52
|
-
end
|
53
|
-
private_class_method :assert_options!
|
54
|
-
|
55
43
|
def self.parse_response(response)
|
56
44
|
if response.body && response.body.key?('error')
|
57
45
|
unless response.body['error']
|
@@ -94,10 +82,29 @@ module Fastlane
|
|
94
82
|
|
95
83
|
def self.available_options
|
96
84
|
[
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
85
|
+
FastlaneCore::ConfigItem.new(key: :api_token,
|
86
|
+
env_name: "DEPLOYGATE_API_TOKEN",
|
87
|
+
description: "Deploygate API Token",
|
88
|
+
verify_block: Proc.new do |value|
|
89
|
+
raise "No API Token for DeployGate given, pass using `api_token: 'token'`".red unless value.to_s.length > 0
|
90
|
+
end),
|
91
|
+
FastlaneCore::ConfigItem.new(key: :user,
|
92
|
+
env_name: "DEPLOYGATE_USER",
|
93
|
+
description: "Target username or organization name",
|
94
|
+
verify_block: Proc.new do |value|
|
95
|
+
raise "No User for app given, pass using `user: 'user'`".red unless value.to_s.length > 0
|
96
|
+
end),
|
97
|
+
FastlaneCore::ConfigItem.new(key: :ipa,
|
98
|
+
env_name: "DEPLOYGATE_IPA_PATH",
|
99
|
+
description: "Path to your IPA file. Optional if you use the `ipa` or `xcodebuild` action",
|
100
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
101
|
+
verify_block: Proc.new do |value|
|
102
|
+
raise "No IPA file given or found, pass using `ipa: 'path.ipa'`".red unless File.exists?(value)
|
103
|
+
end),
|
104
|
+
FastlaneCore::ConfigItem.new(key: :message,
|
105
|
+
env_name: "DEPLOYGATE_MESSAGE",
|
106
|
+
description: "Release Notes",
|
107
|
+
default_value: "No changelog provided")
|
101
108
|
]
|
102
109
|
end
|
103
110
|
|