fastlane 1.27.0 → 1.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 801fcf882415279031545480f46097c3af458ae2
|
|
4
|
+
data.tar.gz: 8c7f3068f19f4e20035ff95a976bef494b8ebb68
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bd5cc1c1c89af9a374654f55a70bd9bf948fa79b0a3c6ab224fe0770a2908cf00b54fca83f8ccf3c2342e2132d3fba5c8b5ced7b9f75135b61e0336c35f7c078
|
|
7
|
+
data.tar.gz: 797bf7f700e41fd277431217c5622e661d138db797272f92b3cb2b2a801b6ecbcdf20826ef743d96701b58a59cdc8d36c2f559a4b94b9950f49d5d10d46982bf
|
|
@@ -1,64 +1,37 @@
|
|
|
1
|
-
# Workaround, since crashlytics.rb from shenzhen includes the code for commander.
|
|
2
|
-
def command(_param)
|
|
3
|
-
end
|
|
4
|
-
|
|
5
1
|
module Fastlane
|
|
6
2
|
module Actions
|
|
7
3
|
class CrashlyticsAction < Action
|
|
8
|
-
|
|
9
|
-
def self.is_supported?(platform)
|
|
10
|
-
[:ios, :mac].include? platform
|
|
11
|
-
end
|
|
12
|
-
|
|
13
4
|
def self.run(params)
|
|
14
|
-
|
|
15
|
-
require 'shenzhen/plugins/crashlytics'
|
|
5
|
+
Helper.log.info 'Uploading the IPA to Crashlytics Beta. Time for some ☕️.'.green
|
|
16
6
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
when NilClass
|
|
20
|
-
groups = nil
|
|
21
|
-
when Array
|
|
22
|
-
groups = params[:groups].join(',')
|
|
23
|
-
when String
|
|
24
|
-
groups = params[:groups]
|
|
25
|
-
end
|
|
7
|
+
params[:groups] = params[:groups].join(",") if params[:groups].kind_of?(Array)
|
|
8
|
+
params[:emails] = params[:emails].join(",") if params[:emails].kind_of?(Array)
|
|
26
9
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
when String
|
|
31
|
-
if params[:notifications] == 'YES' || params[:notifications] == 'NO'
|
|
32
|
-
notifications = params[:notifications]
|
|
33
|
-
else
|
|
34
|
-
notifications = 'YES' if params[:notifications] == 'true'
|
|
35
|
-
notifications = 'NO' if params[:notifications] == 'false'
|
|
36
|
-
end
|
|
37
|
-
when TrueClass
|
|
38
|
-
notifications = 'YES'
|
|
39
|
-
when FalseClass
|
|
40
|
-
notifications = 'NO'
|
|
41
|
-
else
|
|
42
|
-
notifications = nil
|
|
43
|
-
end
|
|
10
|
+
if params[:notes]
|
|
11
|
+
# We need to store it in a file, because the crashlytics CLI says so
|
|
12
|
+
Helper.log.error "Overwriting :notes_path, because you specified :notes" if params[:notes_path]
|
|
44
13
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
# Access all values, to do the verify
|
|
49
|
-
return params[:crashlytics_path], params[:api_token], params[:build_secret], params[:ipa_path], params[:build_secret], params[:ipa_path], params[:notes_path], params[:emails], groups, notifications
|
|
14
|
+
notes_path = File.join("/tmp", "#{Time.now.to_i}_changelog.txt")
|
|
15
|
+
File.write(notes_path, params[:notes])
|
|
16
|
+
params[:notes_path] = notes_path # we can only set it *after* writing the file there
|
|
50
17
|
end
|
|
51
18
|
|
|
52
|
-
|
|
19
|
+
command = []
|
|
20
|
+
command << File.join(params[:crashlytics_path], 'submit')
|
|
21
|
+
command << params[:api_token]
|
|
22
|
+
command << params[:build_secret]
|
|
23
|
+
command << "-ipaPath '#{params[:ipa_path]}'"
|
|
24
|
+
command << "-emails '#{params[:emails]}'" if params[:emails]
|
|
25
|
+
command << "-notesPath '#{params[:notes_path]}'" if params[:notes_path]
|
|
26
|
+
command << "-groupAliases '#{params[:groups]}'" if params[:groups]
|
|
27
|
+
command << "-notifications #{(params[:notifications] ? 'YES' : 'NO')}"
|
|
53
28
|
|
|
54
|
-
|
|
29
|
+
Helper.log.debug command.join(" ") if $verbose
|
|
30
|
+
Actions.sh command.join(" ")
|
|
55
31
|
|
|
56
|
-
if
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Helper.log.fatal 'Error uploading to Crashlytics.'
|
|
60
|
-
raise 'Error when trying to upload ipa to Crashlytics'.red
|
|
61
|
-
end
|
|
32
|
+
return command if Helper.test?
|
|
33
|
+
|
|
34
|
+
Helper.log.info 'Build successfully uploaded to Crashlytics Beta 🌷'.green
|
|
62
35
|
end
|
|
63
36
|
|
|
64
37
|
def self.description
|
|
@@ -70,6 +43,7 @@ module Fastlane
|
|
|
70
43
|
FastlaneCore::ConfigItem.new(key: :crashlytics_path,
|
|
71
44
|
env_name: "CRASHLYTICS_FRAMEWORK_PATH",
|
|
72
45
|
description: "Path to the submit binary in the Crashlytics bundle",
|
|
46
|
+
default_value: Dir["./Pods/Crashlytics/Crashlytics.framework"].last,
|
|
73
47
|
verify_block: proc do |value|
|
|
74
48
|
raise "No Crashlytics path given or found, pass using `crashlytics_path: 'path'`".red unless File.exist?(value)
|
|
75
49
|
end),
|
|
@@ -88,7 +62,7 @@ module Fastlane
|
|
|
88
62
|
FastlaneCore::ConfigItem.new(key: :ipa_path,
|
|
89
63
|
env_name: "CRASHLYTICS_IPA_PATH",
|
|
90
64
|
description: "Path to your IPA file. Optional if you use the `ipa` or `xcodebuild` action",
|
|
91
|
-
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
|
65
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH] || Dir["*.ipa"].last,
|
|
92
66
|
verify_block: proc do |value|
|
|
93
67
|
raise "Couldn't find ipa file at path '#{value}'".red unless File.exist?(value)
|
|
94
68
|
end),
|
|
@@ -99,28 +73,35 @@ module Fastlane
|
|
|
99
73
|
verify_block: proc do |value|
|
|
100
74
|
raise "Path '#{value}' not found".red unless File.exist?(value)
|
|
101
75
|
end),
|
|
76
|
+
FastlaneCore::ConfigItem.new(key: :notes,
|
|
77
|
+
env_name: "CRASHLYTICS_NOTES",
|
|
78
|
+
description: "The release notes as string - uses :notes_path under the hood",
|
|
79
|
+
optional: true,
|
|
80
|
+
is_string: true),
|
|
102
81
|
FastlaneCore::ConfigItem.new(key: :groups,
|
|
103
82
|
env_name: "CRASHLYTICS_GROUPS",
|
|
104
|
-
description: "The groups used for distribution",
|
|
83
|
+
description: "The groups used for distribution, separated by commas",
|
|
105
84
|
optional: true,
|
|
106
85
|
is_string: false),
|
|
107
86
|
FastlaneCore::ConfigItem.new(key: :emails,
|
|
108
87
|
env_name: "CRASHLYTICS_EMAILS",
|
|
109
|
-
description: "Pass email addresses, separated by commas",
|
|
110
|
-
optional: true
|
|
88
|
+
description: "Pass email addresses of testers, separated by commas",
|
|
89
|
+
optional: true,
|
|
90
|
+
is_string: false),
|
|
111
91
|
FastlaneCore::ConfigItem.new(key: :notifications,
|
|
112
92
|
env_name: "CRASHLYTICS_NOTIFICATIONS",
|
|
113
93
|
description: "Crashlytics notification option (true/false)",
|
|
114
|
-
|
|
115
|
-
is_string: false
|
|
116
|
-
verify_block: proc do |value|
|
|
117
|
-
raise "Crashlytics supported notifications options: TrueClass, FalseClass, 'true', 'false', 'YES', 'NO'".red unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass) || value.kind_of?(String)
|
|
118
|
-
end)
|
|
94
|
+
default_value: true,
|
|
95
|
+
is_string: false)
|
|
119
96
|
]
|
|
120
97
|
end
|
|
121
98
|
|
|
99
|
+
def self.is_supported?(platform)
|
|
100
|
+
[:ios, :mac].include?(platform)
|
|
101
|
+
end
|
|
102
|
+
|
|
122
103
|
def self.author
|
|
123
|
-
"pedrogimenez"
|
|
104
|
+
["KrauseFx", "pedrogimenez"]
|
|
124
105
|
end
|
|
125
106
|
end
|
|
126
107
|
end
|
|
@@ -14,7 +14,7 @@ module Fastlane
|
|
|
14
14
|
user_input = STDIN.gets(end_tag).chomp.gsub(end_tag, "").strip
|
|
15
15
|
else
|
|
16
16
|
# Standard one line input
|
|
17
|
-
user_input = STDIN.gets.chomp.strip
|
|
17
|
+
user_input = STDIN.gets.chomp.strip while (user_input || "").length == 0
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
user_input = (user_input.downcase == 'y') if params[:boolean]
|
|
@@ -18,8 +18,8 @@ module Fastlane
|
|
|
18
18
|
'tag_name' => params[:tag_name],
|
|
19
19
|
'name' => params[:name],
|
|
20
20
|
'body' => params[:description],
|
|
21
|
-
'draft' => params[:is_draft],
|
|
22
|
-
'prerelease' => params[:is_prerelease]
|
|
21
|
+
'draft' => !!params[:is_draft],
|
|
22
|
+
'prerelease' => !!params[:is_prerelease]
|
|
23
23
|
}
|
|
24
24
|
body_obj['target_commitish'] = params[:commitish] if params[:commitish]
|
|
25
25
|
body = body_obj.to_json
|
|
@@ -43,7 +43,6 @@ module Fastlane
|
|
|
43
43
|
|
|
44
44
|
assets = params[:upload_assets]
|
|
45
45
|
if assets && assets.count > 0
|
|
46
|
-
|
|
47
46
|
# upload assets
|
|
48
47
|
self.upload_assets(assets, body['upload_url'], api_token)
|
|
49
48
|
|
|
@@ -62,10 +61,13 @@ module Fastlane
|
|
|
62
61
|
return body
|
|
63
62
|
end
|
|
64
63
|
when 422
|
|
64
|
+
Helper.log.error response.body
|
|
65
65
|
Helper.log.error "Release on tag #{params[:tag_name]} already exists!".red
|
|
66
66
|
when 404
|
|
67
|
+
Helper.log.error response.body
|
|
67
68
|
raise "Repository #{params[:repository_name]} cannot be found, please double check its name and that you provided a valid API token (if it's a private repository).".red
|
|
68
69
|
when 401
|
|
70
|
+
Helper.log.error response.body
|
|
69
71
|
raise "You are not authorized to access #{params[:repository_name]}, please make sure you provided a valid API token.".red
|
|
70
72
|
else
|
|
71
73
|
if response[:status] != 200
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
module Fastlane
|
|
2
|
+
module Actions
|
|
3
|
+
module SharedValues
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class VerifyXcodeAction < Action
|
|
7
|
+
def self.run(params)
|
|
8
|
+
Helper.log.info "Verifying your Xcode installation at path '#{params[:xcode_path]}'...".green
|
|
9
|
+
|
|
10
|
+
# Check 1/2
|
|
11
|
+
|
|
12
|
+
Helper.log.info "Verifying Xcode was signed by Apple Inc.".green
|
|
13
|
+
command = "codesign --display --verbose=4 '#{params[:xcode_path]}'"
|
|
14
|
+
|
|
15
|
+
must_includes = [
|
|
16
|
+
"Identifier=com.apple.dt.Xcode",
|
|
17
|
+
"Authority=Apple Mac OS Application Signing",
|
|
18
|
+
"Authority=Apple Worldwide Developer Relations Certification Authority",
|
|
19
|
+
"Authority=Apple Root CA",
|
|
20
|
+
"TeamIdentifier=59GAB85EFG"
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
verify(command: command, must_includes: must_includes, params: params)
|
|
24
|
+
|
|
25
|
+
Helper.log.info "Successfully verified the code signature".green
|
|
26
|
+
|
|
27
|
+
# Check 2/2
|
|
28
|
+
|
|
29
|
+
Helper.log.info "Verifying the signature of Xcode...".green
|
|
30
|
+
Helper.log.info "This will take up to a few minutes, now is a great time to go for a coffee ☕...".green
|
|
31
|
+
command = "codesign --verify --deep --verbose '#{params[:xcode_path]}'"
|
|
32
|
+
|
|
33
|
+
must_includes = [
|
|
34
|
+
"valid on disk",
|
|
35
|
+
"satisfies its Designated Requirement"
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
verify(command: command, must_includes: must_includes, params: params)
|
|
39
|
+
|
|
40
|
+
Helper.log.info "Successfully verified Xcode installation at path '#{params[:xcode_path]}' 🎧".green
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def self.verify(command: nil, must_includes: nil, params: nil)
|
|
44
|
+
output = Actions.sh(command)
|
|
45
|
+
|
|
46
|
+
errors = []
|
|
47
|
+
must_includes.each do |current|
|
|
48
|
+
next if output.include?(current)
|
|
49
|
+
errors << current
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if errors.count > 0
|
|
53
|
+
Helper.log.fatal "Attention: Your Xcode Installation might be hacked.".red
|
|
54
|
+
Helper.log.fatal "This might be a false alarm, if so, please submit an issue on GitHub".red
|
|
55
|
+
Helper.log.fatal "The following information couldn't be found:".red
|
|
56
|
+
Helper.log.fatal errors.join("\n").yellow
|
|
57
|
+
raise "The Xcode installation at path '#{params[:xcode_path]}' might be compromised."
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
#####################################################
|
|
62
|
+
# @!group Documentation
|
|
63
|
+
#####################################################
|
|
64
|
+
|
|
65
|
+
def self.description
|
|
66
|
+
"Verifies that the Xcode installation is properly signed by Apple"
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def self.details
|
|
70
|
+
[
|
|
71
|
+
"This action was implemented after the recent Xcode attacked to make sure",
|
|
72
|
+
"you're not using a hacked Xcode installation.",
|
|
73
|
+
"http://researchcenter.paloaltonetworks.com/2015/09/novel-malware-xcodeghost-modifies-xcode-infects-apple-ios-apps-and-hits-app-store/"
|
|
74
|
+
].join("\n")
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def self.available_options
|
|
78
|
+
[
|
|
79
|
+
FastlaneCore::ConfigItem.new(key: :xcode_path,
|
|
80
|
+
env_name: "FL_VERIFY_XCODE_XCODE_PATH",
|
|
81
|
+
description: "The path to the Xcode installation to test",
|
|
82
|
+
default_value: File.expand_path('../../', FastlaneCore::Helper.xcode_path),
|
|
83
|
+
verify_block: proc do |value|
|
|
84
|
+
raise "Couldn't find Xcode at path '#{value}'".red unless File.exist?(value)
|
|
85
|
+
end)
|
|
86
|
+
]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def self.authors
|
|
90
|
+
["KrauseFx"]
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def self.is_supported?(platform)
|
|
94
|
+
[:ios, :mac].include?(platform)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
data/lib/fastlane/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fastlane
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.28.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Felix Krause
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-09-
|
|
11
|
+
date: 2015-09-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|
|
@@ -190,7 +190,7 @@ dependencies:
|
|
|
190
190
|
requirements:
|
|
191
191
|
- - ">="
|
|
192
192
|
- !ruby/object:Gem::Version
|
|
193
|
-
version: 0.
|
|
193
|
+
version: 0.17.1
|
|
194
194
|
- - "<"
|
|
195
195
|
- !ruby/object:Gem::Version
|
|
196
196
|
version: 1.0.0
|
|
@@ -200,7 +200,7 @@ dependencies:
|
|
|
200
200
|
requirements:
|
|
201
201
|
- - ">="
|
|
202
202
|
- !ruby/object:Gem::Version
|
|
203
|
-
version: 0.
|
|
203
|
+
version: 0.17.1
|
|
204
204
|
- - "<"
|
|
205
205
|
- !ruby/object:Gem::Version
|
|
206
206
|
version: 1.0.0
|
|
@@ -270,7 +270,7 @@ dependencies:
|
|
|
270
270
|
requirements:
|
|
271
271
|
- - ">="
|
|
272
272
|
- !ruby/object:Gem::Version
|
|
273
|
-
version: 0.
|
|
273
|
+
version: 0.10.0
|
|
274
274
|
- - "<"
|
|
275
275
|
- !ruby/object:Gem::Version
|
|
276
276
|
version: 1.0.0
|
|
@@ -280,7 +280,7 @@ dependencies:
|
|
|
280
280
|
requirements:
|
|
281
281
|
- - ">="
|
|
282
282
|
- !ruby/object:Gem::Version
|
|
283
|
-
version: 0.
|
|
283
|
+
version: 0.10.0
|
|
284
284
|
- - "<"
|
|
285
285
|
- !ruby/object:Gem::Version
|
|
286
286
|
version: 1.0.0
|
|
@@ -290,7 +290,7 @@ dependencies:
|
|
|
290
290
|
requirements:
|
|
291
291
|
- - ">="
|
|
292
292
|
- !ruby/object:Gem::Version
|
|
293
|
-
version: 2.2.
|
|
293
|
+
version: 2.2.1
|
|
294
294
|
- - "<"
|
|
295
295
|
- !ruby/object:Gem::Version
|
|
296
296
|
version: 3.0.0
|
|
@@ -300,7 +300,7 @@ dependencies:
|
|
|
300
300
|
requirements:
|
|
301
301
|
- - ">="
|
|
302
302
|
- !ruby/object:Gem::Version
|
|
303
|
-
version: 2.2.
|
|
303
|
+
version: 2.2.1
|
|
304
304
|
- - "<"
|
|
305
305
|
- !ruby/object:Gem::Version
|
|
306
306
|
version: 3.0.0
|
|
@@ -390,7 +390,7 @@ dependencies:
|
|
|
390
390
|
requirements:
|
|
391
391
|
- - ">="
|
|
392
392
|
- !ruby/object:Gem::Version
|
|
393
|
-
version: 0.
|
|
393
|
+
version: 0.7.2
|
|
394
394
|
- - "<"
|
|
395
395
|
- !ruby/object:Gem::Version
|
|
396
396
|
version: 1.0.0
|
|
@@ -400,7 +400,7 @@ dependencies:
|
|
|
400
400
|
requirements:
|
|
401
401
|
- - ">="
|
|
402
402
|
- !ruby/object:Gem::Version
|
|
403
|
-
version: 0.
|
|
403
|
+
version: 0.7.2
|
|
404
404
|
- - "<"
|
|
405
405
|
- !ruby/object:Gem::Version
|
|
406
406
|
version: 1.0.0
|
|
@@ -410,7 +410,7 @@ dependencies:
|
|
|
410
410
|
requirements:
|
|
411
411
|
- - ">="
|
|
412
412
|
- !ruby/object:Gem::Version
|
|
413
|
-
version: 0.
|
|
413
|
+
version: 0.2.0
|
|
414
414
|
- - "<"
|
|
415
415
|
- !ruby/object:Gem::Version
|
|
416
416
|
version: 1.0.0
|
|
@@ -420,7 +420,7 @@ dependencies:
|
|
|
420
420
|
requirements:
|
|
421
421
|
- - ">="
|
|
422
422
|
- !ruby/object:Gem::Version
|
|
423
|
-
version: 0.
|
|
423
|
+
version: 0.2.0
|
|
424
424
|
- - "<"
|
|
425
425
|
- !ruby/object:Gem::Version
|
|
426
426
|
version: 1.0.0
|
|
@@ -690,6 +690,7 @@ files:
|
|
|
690
690
|
- lib/fastlane/actions/update_info_plist.rb
|
|
691
691
|
- lib/fastlane/actions/update_project_code_signing.rb
|
|
692
692
|
- lib/fastlane/actions/update_project_provisioning.rb
|
|
693
|
+
- lib/fastlane/actions/verify_xcode.rb
|
|
693
694
|
- lib/fastlane/actions/version_bump_podspec.rb
|
|
694
695
|
- lib/fastlane/actions/version_get_podspec.rb
|
|
695
696
|
- lib/fastlane/actions/xcode_select.rb
|