fastlane 1.49.0 → 1.50.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 +2 -2
- data/bin/fastlane +1 -1
- data/lib/assets/AppfileTemplate +1 -1
- data/lib/assets/FastfileTemplate +4 -4
- data/lib/assets/FastfileTemplateAndroid +4 -4
- data/lib/assets/custom_action_template.rb +1 -1
- data/lib/fastlane/actions/actions_helper.rb +2 -2
- data/lib/fastlane/actions/changelog_from_git_commits.rb +7 -1
- data/lib/fastlane/actions/get_github_release.rb +2 -2
- data/lib/fastlane/actions/get_ipa_info_plist_value.rb +67 -0
- data/lib/fastlane/actions/install_xcode_plugin.rb +5 -1
- data/lib/fastlane/actions/mailgun.rb +1 -0
- data/lib/fastlane/actions/s3.rb +11 -28
- data/lib/fastlane/actions/set_github_release.rb +3 -3
- data/lib/fastlane/actions/swiftlint.rb +6 -0
- data/lib/fastlane/actions/testfairy.rb +89 -0
- data/lib/fastlane/actions/unlock_keychain.rb +31 -12
- data/lib/fastlane/actions/update_project_code_signing.rb +1 -1
- data/lib/fastlane/actions/update_project_provisioning.rb +1 -1
- data/lib/fastlane/actions/xcode_server_get_assets.rb +1 -1
- data/lib/fastlane/actions/xcodebuild.rb +1 -1
- data/lib/fastlane/actions/xctool.rb +1 -1
- data/lib/fastlane/documentation/actions_list.rb +1 -1
- data/lib/fastlane/documentation/docs_generator.rb +1 -1
- data/lib/fastlane/helper/gem_helper.rb +2 -0
- data/lib/fastlane/helper/git_helper.rb +6 -3
- data/lib/fastlane/runner.rb +1 -1
- data/lib/fastlane/version.rb +1 -1
- metadata +25 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b69af193f8f343d463084053f99cf7033fe950af
|
4
|
+
data.tar.gz: a7cdc51b53c41cc4417ae6ed04e109da631b9302
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e0d1526fe9adbc0613d598579dd90649d3464174f45b81789ee9a0f4823329f107239b8949fcf8cc4e375b505e69a865d8fd6019f1a89f995126195ea520fac
|
7
|
+
data.tar.gz: ea78c80e80f86407e82bc20abb3af414346bd4955537f0d229368be82776b781cfc7d4e3910b2918b2b94637158ff1b1d8c5d3cfd2178ace5fe1df22d933a6e2
|
data/README.md
CHANGED
@@ -21,14 +21,14 @@
|
|
21
21
|
fastlane
|
22
22
|
============
|
23
23
|
|
24
|
-
[![Twitter: @KauseFx](https://img.shields.io/badge/contact-@
|
24
|
+
[![Twitter: @KauseFx](https://img.shields.io/badge/contact-@FastlaneTools-blue.svg?style=flat)](https://twitter.com/FastlaneTools)
|
25
25
|
[![License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/fastlane/fastlane/blob/master/LICENSE)
|
26
26
|
[![Gem](https://img.shields.io/gem/v/fastlane.svg?style=flat)](http://rubygems.org/gems/fastlane)
|
27
27
|
[![Build Status](https://img.shields.io/travis/fastlane/fastlane/master.svg?style=flat)](https://travis-ci.org/fastlane/fastlane)
|
28
28
|
|
29
29
|
######*fastlane* lets you define and run your deployment pipelines for different environments. It helps you unify your apps release process and automate the whole process. fastlane connects all fastlane tools and third party tools, like [CocoaPods](https://cocoapods.org/) and [Slack](https://slack.com).
|
30
30
|
|
31
|
-
Get in contact with the developer on Twitter: [@
|
31
|
+
Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.com/FastlaneTools)
|
32
32
|
|
33
33
|
-------
|
34
34
|
<p align="center">
|
data/bin/fastlane
CHANGED
@@ -20,7 +20,7 @@ class FastlaneApplication
|
|
20
20
|
"\tTo pass values to the lanes use `fastlane [platform] [lane_name] key:value key2:value2`"].join("\n")
|
21
21
|
program :help, 'Author', 'Felix Krause <fastlane@krausefx.com>'
|
22
22
|
program :help, 'Website', 'https://fastlane.tools'
|
23
|
-
program :help, 'GitHub', 'https://github.com/
|
23
|
+
program :help, 'GitHub', 'https://github.com/fastlane/fastlane'
|
24
24
|
program :help_formatter, :compact
|
25
25
|
|
26
26
|
global_option('--verbose') { $verbose = true }
|
data/lib/assets/AppfileTemplate
CHANGED
@@ -11,4 +11,4 @@ apple_id "[[APPLE_ID]]" # Your Apple email address
|
|
11
11
|
# itc_team_id "18742801
|
12
12
|
|
13
13
|
# you can even provide different app identifiers, Apple IDs and team names per lane:
|
14
|
-
# https://github.com/
|
14
|
+
# https://github.com/fastlane/fastlane/blob/master/docs/Appfile.md
|
data/lib/assets/FastfileTemplate
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Customise this file, documentation can be found here:
|
2
|
-
# https://github.com/
|
3
|
-
# All available actions: https://github.com/
|
2
|
+
# https://github.com/fastlane/fastlane/tree/master/docs
|
3
|
+
# All available actions: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md
|
4
4
|
# can also be listed using the `fastlane actions` command
|
5
5
|
|
6
6
|
# Change the syntax highlighting to Ruby
|
@@ -76,5 +76,5 @@ end
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
# More information about multiple platforms in fastlane: https://github.com/
|
80
|
-
# All available actions: https://github.com/
|
79
|
+
# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/docs/Platforms.md
|
80
|
+
# All available actions: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# Customise this file, documentation can be found here:
|
2
|
-
# https://github.com/
|
3
|
-
# All available actions: https://github.com/
|
2
|
+
# https://github.com/fastlane/fastlane/tree/master/docs
|
3
|
+
# All available actions: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md
|
4
4
|
# can also be listed using the `fastlane actions` command
|
5
5
|
|
6
6
|
# Change the syntax highlighting to Ruby
|
@@ -64,5 +64,5 @@ platform :android do
|
|
64
64
|
end
|
65
65
|
|
66
66
|
|
67
|
-
# More information about multiple platforms in fastlane: https://github.com/
|
68
|
-
# All available actions: https://github.com/
|
67
|
+
# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/docs/Platforms.md
|
68
|
+
# All available actions: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md
|
@@ -5,7 +5,7 @@ module Fastlane
|
|
5
5
|
end
|
6
6
|
|
7
7
|
# To share this integration with the other fastlane users:
|
8
|
-
# - Fork https://github.com/
|
8
|
+
# - Fork https://github.com/fastlane/fastlane
|
9
9
|
# - Clone the forked repository
|
10
10
|
# - Move this integration into lib/fastlane/actions
|
11
11
|
# - Commit, push and submit the pull request
|
@@ -92,13 +92,13 @@ module Fastlane
|
|
92
92
|
Helper.log.info "Successfully loaded custom action '#{file}'.".green
|
93
93
|
else
|
94
94
|
Helper.log.error "Could not find method 'run' in class #{class_name}.".red
|
95
|
-
Helper.log.error 'For more information, check out the docs: https://github.com/
|
95
|
+
Helper.log.error 'For more information, check out the docs: https://github.com/fastlane/fastlane'
|
96
96
|
raise "Plugin '#{file_name}' is damaged!"
|
97
97
|
end
|
98
98
|
rescue NameError
|
99
99
|
# Action not found
|
100
100
|
Helper.log.error "Could not find '#{class_name}' class defined.".red
|
101
|
-
Helper.log.error 'For more information, check out the docs: https://github.com/
|
101
|
+
Helper.log.error 'For more information, check out the docs: https://github.com/fastlane/fastlane'
|
102
102
|
raise "Plugin '#{file_name}' is damaged!"
|
103
103
|
end
|
104
104
|
end
|
@@ -16,7 +16,7 @@ module Fastlane
|
|
16
16
|
|
17
17
|
Helper.log.info "Collecting Git commits between #{from} and #{to}".green
|
18
18
|
|
19
|
-
changelog = Actions.git_log_between(params[:pretty], from, to)
|
19
|
+
changelog = Actions.git_log_between(params[:pretty], from, to, params[:include_merges])
|
20
20
|
changelog = changelog.gsub("\n\n", "\n") if changelog # as there are duplicate newlines
|
21
21
|
Actions.lane_context[SharedValues::FL_CHANGELOG] = changelog
|
22
22
|
|
@@ -61,6 +61,12 @@ module Fastlane
|
|
61
61
|
description: 'Whether or not to match a lightweight tag when searching for the last one',
|
62
62
|
optional: true,
|
63
63
|
default_value: true,
|
64
|
+
is_string: false),
|
65
|
+
FastlaneCore::ConfigItem.new(key: :include_merges,
|
66
|
+
env_name: 'FL_CHANGELOG_FROM_GIT_COMMITS_INCLUDE_MERGES',
|
67
|
+
description: 'Whether or not to include any commits that are merges',
|
68
|
+
optional: true,
|
69
|
+
default_value: true,
|
64
70
|
is_string: false)
|
65
71
|
]
|
66
72
|
end
|
@@ -54,7 +54,7 @@ module Fastlane
|
|
54
54
|
{"url"=>"https://api.github.com/repos/KrauseFx/fastlane/releases/1537713",
|
55
55
|
"assets_url"=>"https://api.github.com/repos/KrauseFx/fastlane/releases/1537713/assets",
|
56
56
|
"upload_url"=>"https://uploads.github.com/repos/KrauseFx/fastlane/releases/1537713/assets{?name}",
|
57
|
-
"html_url"=>"https://github.com/
|
57
|
+
"html_url"=>"https://github.com/fastlane/fastlane/releases/tag/1.8.0",
|
58
58
|
"id"=>1537713,
|
59
59
|
"tag_name"=>"1.8.0",
|
60
60
|
"target_commitish"=>"master",
|
@@ -66,7 +66,7 @@ module Fastlane
|
|
66
66
|
"avatar_url"=>"https://avatars.githubusercontent.com/u/869950?v=3",
|
67
67
|
"gravatar_id"=>"",
|
68
68
|
"url"=>"https://api.github.com/users/KrauseFx",
|
69
|
-
"html_url"=>"https://github.com/
|
69
|
+
"html_url"=>"https://github.com/fastlane",
|
70
70
|
"followers_url"=>"https://api.github.com/users/KrauseFx/followers",
|
71
71
|
"following_url"=>"https://api.github.com/users/KrauseFx/following{/other_user}",
|
72
72
|
"gists_url"=>"https://api.github.com/users/KrauseFx/gists{/gist_id}",
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
GET_IPA_INFO_PLIST_VALUE_CUSTOM_VALUE = :GET_IPA_INFO_PLIST_VALUE_CUSTOM_VALUE
|
5
|
+
end
|
6
|
+
|
7
|
+
class GetIpaInfoPlistValueAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
ipa = File.expand_path(params[:ipa])
|
10
|
+
key = params[:key]
|
11
|
+
plist = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(ipa)
|
12
|
+
value = plist[key]
|
13
|
+
|
14
|
+
Actions.lane_context[SharedValues::GET_IPA_INFO_PLIST_VALUE_CUSTOM_VALUE] = value
|
15
|
+
|
16
|
+
return value
|
17
|
+
rescue => ex
|
18
|
+
Helper.log.error ex
|
19
|
+
Helper.log.error "Unable to find plist file at '#{ipa}'".red
|
20
|
+
end
|
21
|
+
|
22
|
+
#####################################################
|
23
|
+
# @!group Documentation
|
24
|
+
#####################################################
|
25
|
+
|
26
|
+
def self.description
|
27
|
+
"Returns a value from Info.plist inside a .ipa file"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.details
|
31
|
+
"This is useful for introspecting Info.plist files for .ipa files that have already been built."
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.available_options
|
35
|
+
[
|
36
|
+
FastlaneCore::ConfigItem.new(key: :key,
|
37
|
+
env_name: "FL_GET_IPA_INFO_PLIST_VALUE_KEY",
|
38
|
+
description: "Name of parameter",
|
39
|
+
optional: false),
|
40
|
+
FastlaneCore::ConfigItem.new(key: :ipa,
|
41
|
+
env_name: "FL_GET_IPA_INFO_PLIST_VALUE_IPA",
|
42
|
+
description: "Path to IPA",
|
43
|
+
is_string: true,
|
44
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH])
|
45
|
+
]
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.output
|
49
|
+
[
|
50
|
+
['GET_IPA_INFO_PLIST_VALUE_CUSTOM_VALUE', 'The value of the last plist file that was parsed']
|
51
|
+
]
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.return_value
|
55
|
+
"Returns the value in the .ipa's Info.plist corresponding to the passed in Key"
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.authors
|
59
|
+
["johnboiles"]
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.is_supported?(platform)
|
63
|
+
[:ios, :mac].include?(platform)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -2,9 +2,13 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class InstallXcodePluginAction < Action
|
4
4
|
def self.run(params)
|
5
|
+
require 'fileutils'
|
6
|
+
|
5
7
|
zip_path = File.join(Dir.tmpdir, 'plugin.zip')
|
6
8
|
sh "curl -Lso #{zip_path} #{params[:url]}"
|
7
|
-
|
9
|
+
plugins_path = "#{ENV['HOME']}/Library/Application Support/Developer/Shared/Xcode/Plug-ins"
|
10
|
+
FileUtils.mkdir_p(plugins_path)
|
11
|
+
Action.sh "unzip -qo '#{zip_path}' -d '#{plugins_path}'"
|
8
12
|
|
9
13
|
Helper.log.info("Plugin #{File.basename(params[:url], '.zip')} installed successfully".green)
|
10
14
|
Helper.log.info("Please restart Xcode to use the newly installed plugin")
|
data/lib/fastlane/actions/s3.rb
CHANGED
@@ -107,7 +107,12 @@ module Fastlane
|
|
107
107
|
#####################################
|
108
108
|
|
109
109
|
# Gets info used for the plist
|
110
|
-
|
110
|
+
info = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(ipa_file)
|
111
|
+
|
112
|
+
bundle_id = info['CFBundleIdentifier']
|
113
|
+
bundle_version = info['CFBundleShortVersionString']
|
114
|
+
title = info['CFBundleName']
|
115
|
+
full_version = "#{bundle_version}.#{info['CFBundleVersion']}"
|
111
116
|
|
112
117
|
# Creating plist and html names
|
113
118
|
plist_file_name = "#{url_part}#{title.delete(' ')}.plist"
|
@@ -240,39 +245,17 @@ module Fastlane
|
|
240
245
|
def self.expand_path_with_substitutions_from_ipa_plist(ipa, path)
|
241
246
|
substitutions = path.scan(/\{CFBundle[^}]+\}/)
|
242
247
|
return path if substitutions.empty?
|
248
|
+
info = FastlaneCore::IpaFileAnalyser.fetch_info_plist_file(ipa) or return path
|
243
249
|
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
substitutions.uniq.each do |substitution|
|
250
|
-
key = substitution[1...-1]
|
251
|
-
value = Shenzhen::PlistBuddy.print(plist, key)
|
252
|
-
|
253
|
-
path.gsub!(Regexp.new(substitution), value) if value
|
254
|
-
end
|
250
|
+
substitutions.uniq.each do |substitution|
|
251
|
+
key = substitution[1...-1]
|
252
|
+
value = info[key]
|
253
|
+
path.gsub!(Regexp.new(substitution), value) if value
|
255
254
|
end
|
256
255
|
|
257
256
|
return path
|
258
257
|
end
|
259
258
|
|
260
|
-
def self.get_ipa_info(ipa_file)
|
261
|
-
bundle_id, bundle_version, title, full_version = nil
|
262
|
-
Dir.mktmpdir do |dir|
|
263
|
-
system "unzip -q #{ipa_file} -d #{dir} 2> /dev/null"
|
264
|
-
plist = Dir["#{dir}/**/*.app/Info.plist"].last
|
265
|
-
|
266
|
-
bundle_id = Shenzhen::PlistBuddy.print(plist, 'CFBundleIdentifier')
|
267
|
-
bundle_version = Shenzhen::PlistBuddy.print(plist, 'CFBundleShortVersionString')
|
268
|
-
title = Shenzhen::PlistBuddy.print(plist, 'CFBundleName')
|
269
|
-
|
270
|
-
# This is the string: {CFBundleShortVersionString}.{CFBundleVersion}
|
271
|
-
full_version = bundle_version + '.' + Shenzhen::PlistBuddy.print(plist, 'CFBundleVersion')
|
272
|
-
end
|
273
|
-
return bundle_id, bundle_version, title, full_version
|
274
|
-
end
|
275
|
-
|
276
259
|
def self.description
|
277
260
|
"Generates a plist file and uploads all to AWS S3"
|
278
261
|
end
|
@@ -171,10 +171,10 @@ module Fastlane
|
|
171
171
|
[
|
172
172
|
FastlaneCore::ConfigItem.new(key: :repository_name,
|
173
173
|
env_name: "FL_SET_GITHUB_RELEASE_REPOSITORY_NAME",
|
174
|
-
description: "The path to your repo, e.g. '
|
174
|
+
description: "The path to your repo, e.g. 'fastlane/fastlane'",
|
175
175
|
verify_block: proc do |value|
|
176
|
-
raise "Please only pass the path, e.g. '
|
177
|
-
raise "Please only pass the path, e.g. '
|
176
|
+
raise "Please only pass the path, e.g. 'fastlane/fastlane'".red if value.include? "github.com"
|
177
|
+
raise "Please only pass the path, e.g. 'fastlane/fastlane'".red if value.split('/').count != 2
|
178
178
|
end),
|
179
179
|
FastlaneCore::ConfigItem.new(key: :api_token,
|
180
180
|
env_name: "FL_GITHUB_RELEASE_API_TOKEN",
|
@@ -7,6 +7,7 @@ module Fastlane
|
|
7
7
|
end
|
8
8
|
|
9
9
|
command = 'swiftlint lint'
|
10
|
+
command << " --strict" if params[:strict]
|
10
11
|
command << " --config #{params[:config_file]}" if params[:config_file]
|
11
12
|
command << " > #{params[:output_file]}" if params[:output_file]
|
12
13
|
Actions.sh(command)
|
@@ -30,6 +31,11 @@ module Fastlane
|
|
30
31
|
optional: true),
|
31
32
|
FastlaneCore::ConfigItem.new(key: :config_file,
|
32
33
|
description: 'Custom configuration file of SwiftLint',
|
34
|
+
optional: true),
|
35
|
+
FastlaneCore::ConfigItem.new(key: :strict,
|
36
|
+
description: 'Fail on warnings? (true/false)',
|
37
|
+
default_value: false,
|
38
|
+
is_string: false,
|
33
39
|
optional: true)
|
34
40
|
]
|
35
41
|
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Actions
|
3
|
+
module SharedValues
|
4
|
+
TESTFAIRY_BUILD_URL = :TESTFAIRY_BUILD_URL
|
5
|
+
end
|
6
|
+
|
7
|
+
class TestfairyAction < Action
|
8
|
+
def self.run(params)
|
9
|
+
require 'shenzhen'
|
10
|
+
require 'shenzhen/plugins/testfairy'
|
11
|
+
|
12
|
+
Helper.log.info 'Starting with ipa upload to TestFairy...'.green
|
13
|
+
|
14
|
+
client = Shenzhen::Plugins::TestFairy::Client.new(
|
15
|
+
params[:api_key]
|
16
|
+
)
|
17
|
+
|
18
|
+
return params[:ipa] if Helper.test?
|
19
|
+
|
20
|
+
response = client.upload_build(params[:ipa], params.values)
|
21
|
+
if parse_response(response)
|
22
|
+
Helper.log.info "Build URL: #{Actions.lane_context[SharedValues::TESTFAIRY_BUILD_URL]}".green
|
23
|
+
Helper.log.info "Build successfully uploaded to TestFairy.".green
|
24
|
+
else
|
25
|
+
raise 'Error when trying to upload ipa to TestFairy'.red
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#####################################################
|
30
|
+
# @!group Documentation
|
31
|
+
#####################################################
|
32
|
+
|
33
|
+
def self.parse_response(response)
|
34
|
+
if response.body && response.body.key?('status') && response.body['status'] == 'ok'
|
35
|
+
build_url = response.body['build_url']
|
36
|
+
|
37
|
+
Actions.lane_context[SharedValues::TESTFAIRY_BUILD_URL] = build_url
|
38
|
+
|
39
|
+
return true
|
40
|
+
else
|
41
|
+
Helper.log.fatal "Error uploading to TestFairy: #{response.body}".red
|
42
|
+
|
43
|
+
return false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
private_class_method :parse_response
|
47
|
+
|
48
|
+
def self.description
|
49
|
+
'Upload a new build to TestFairy'
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.available_options
|
53
|
+
[
|
54
|
+
FastlaneCore::ConfigItem.new(key: :api_key,
|
55
|
+
env_name: "FL_TESTFAIRY_API_KEY", # The name of the environment variable
|
56
|
+
description: "API Key for TestFairy", # a short description of this parameter
|
57
|
+
verify_block: proc do |value|
|
58
|
+
raise "No API key for TestFairy given, pass using `api_key: 'key'`".red unless value.to_s.length > 0
|
59
|
+
end),
|
60
|
+
FastlaneCore::ConfigItem.new(key: :ipa,
|
61
|
+
env_name: 'TESTFAIRY_IPA_PATH',
|
62
|
+
description: 'Path to your IPA file. Optional if you use the `gym` or `xcodebuild` action',
|
63
|
+
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
64
|
+
verify_block: proc do |value|
|
65
|
+
raise "Couldn't find ipa file at path '#{value}'".red unless File.exist?(value)
|
66
|
+
end),
|
67
|
+
FastlaneCore::ConfigItem.new(key: :comment,
|
68
|
+
env_name: "FL_TESTFAIRY_COMMENT",
|
69
|
+
description: "Additional release notes for this upload. This text will be added to email notifications",
|
70
|
+
default_value: 'No comment provided') # the default value if the user didn't provide one
|
71
|
+
]
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.output
|
75
|
+
[
|
76
|
+
['TESTFAIRY_BUILD_URL', 'URL of the newly uploaded build']
|
77
|
+
]
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.authors
|
81
|
+
["taka0125"]
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.is_supported?(platform)
|
85
|
+
platform == :ios
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -4,20 +4,24 @@ module Fastlane
|
|
4
4
|
def self.run(params)
|
5
5
|
keychain_path = self.expand_keychain_path(params[:path])
|
6
6
|
add_to_search_list = params[:add_to_search_list]
|
7
|
+
set_default = params[:set_default]
|
8
|
+
commands = []
|
7
9
|
|
8
|
-
if
|
9
|
-
|
10
|
+
# add to search list if not already added
|
11
|
+
if add_to_search_list == true || add_to_search_list == :add
|
12
|
+
commands << add_keychain_to_search_list(keychain_path)
|
13
|
+
elsif add_to_search_list == :replace
|
14
|
+
commands << replace_keychain_in_search_list(keychain_path)
|
10
15
|
end
|
11
16
|
|
12
|
-
#
|
13
|
-
if
|
14
|
-
|
17
|
+
# set default keychain
|
18
|
+
if set_default
|
19
|
+
commands << default_keychain(keychain_path)
|
15
20
|
end
|
16
21
|
|
17
22
|
escaped_path = keychain_path.shellescape
|
18
23
|
escaped_password = params[:password].shellescape
|
19
24
|
|
20
|
-
commands = []
|
21
25
|
# unlock given keychain and disable lock and timeout
|
22
26
|
commands << Fastlane::Actions.sh("security unlock-keychain -p #{escaped_password} #{escaped_path}", log: false)
|
23
27
|
commands << Fastlane::Actions.sh("security set-keychain-settings #{escaped_path}", log: false)
|
@@ -31,12 +35,21 @@ module Fastlane
|
|
31
35
|
unless keychains.include?(keychain_path)
|
32
36
|
keychains << keychain_path
|
33
37
|
|
34
|
-
|
35
|
-
commands << Fastlane::Actions.sh("security list-keychains -s #{keychains.shelljoin}", log: false)
|
36
|
-
commands
|
38
|
+
Fastlane::Actions.sh("security list-keychains -s #{keychains.shelljoin}", log: false)
|
37
39
|
end
|
38
40
|
end
|
39
41
|
|
42
|
+
def self.replace_keychain_in_search_list(keychain_path)
|
43
|
+
Actions.lane_context[Actions::SharedValues::ORIGINAL_DEFAULT_KEYCHAIN] = Fastlane::Actions.sh("security default-keychain", log: false).strip
|
44
|
+
escaped_path = keychain_path.shellescape
|
45
|
+
Fastlane::Actions.sh("security list-keychains -s #{escaped_path}", log: false)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.default_keychain(keychain_path)
|
49
|
+
escaped_path = keychain_path.shellescape
|
50
|
+
Fastlane::Actions.sh("security default-keychain -s #{escaped_path}", log: false)
|
51
|
+
end
|
52
|
+
|
40
53
|
def self.expand_keychain_path(keychain_path)
|
41
54
|
possible_locations = []
|
42
55
|
possible_locations << keychain_path
|
@@ -50,7 +63,7 @@ module Fastlane
|
|
50
63
|
end
|
51
64
|
end
|
52
65
|
|
53
|
-
|
66
|
+
raise "Could not find the keychain file in: #{possible_locations}".red
|
54
67
|
end
|
55
68
|
|
56
69
|
#####################################################
|
@@ -62,7 +75,8 @@ module Fastlane
|
|
62
75
|
end
|
63
76
|
|
64
77
|
def self.details
|
65
|
-
"Unlocks the give keychain file and adds it to the keychain search list"
|
78
|
+
"Unlocks the give keychain file and adds it to the keychain search list\n" \
|
79
|
+
"Keychains can be replaced with `add_to_search_list: :replace`"
|
66
80
|
end
|
67
81
|
|
68
82
|
def self.available_options
|
@@ -79,7 +93,12 @@ module Fastlane
|
|
79
93
|
env_name: "FL_UNLOCK_KEYCHAIN_ADD_TO_SEARCH_LIST",
|
80
94
|
description: "Add to keychain search list",
|
81
95
|
is_string: false,
|
82
|
-
default_value: true)
|
96
|
+
default_value: true),
|
97
|
+
FastlaneCore::ConfigItem.new(key: :set_default,
|
98
|
+
env_name: "FL_UNLOCK_KEYCHAIN_SET_DEFAULT",
|
99
|
+
description: "Set as default keychain",
|
100
|
+
is_string: false,
|
101
|
+
default_value: false)
|
83
102
|
|
84
103
|
]
|
85
104
|
end
|
@@ -7,7 +7,7 @@ module Fastlane
|
|
7
7
|
def self.run(params)
|
8
8
|
Helper.log.info "You shouldn't use update_project_code_signing"
|
9
9
|
Helper.log.info "Have you considered using the recommended way to do code sining?"
|
10
|
-
Helper.log.info "https://github.com/
|
10
|
+
Helper.log.info "https://github.com/fastlane/fastlane/blob/master/docs/CodeSigning.md"
|
11
11
|
|
12
12
|
path = params[:path]
|
13
13
|
path = File.join(path, "project.pbxproj")
|
@@ -8,7 +8,7 @@ module Fastlane
|
|
8
8
|
ROOT_CERTIFICATE_URL = "http://www.apple.com/appleca/AppleIncRootCertificate.cer"
|
9
9
|
def self.run(params)
|
10
10
|
Helper.log.info "You’re updating provisioning profiles directly in your project, but have you considered easier ways to do code signing?"
|
11
|
-
Helper.log.info "https://github.com/
|
11
|
+
Helper.log.info "https://github.com/fastlane/fastlane/blob/master/docs/CodeSigning.md"
|
12
12
|
|
13
13
|
# assign folder from parameter or search for xcodeproj file
|
14
14
|
folder = params[:xcodeproj] || Dir["*.xcodeproj"].first
|
@@ -123,7 +123,7 @@ module Fastlane
|
|
123
123
|
end
|
124
124
|
|
125
125
|
def fetch_integrations(bot_id)
|
126
|
-
response = get_endpoint("/bots/#{bot_id}/integrations?
|
126
|
+
response = get_endpoint("/bots/#{bot_id}/integrations?last=10")
|
127
127
|
raise "Failed to fetch Integrations for Bot #{bot_id} from Xcode Server at #{@host}, response: #{response.status}: #{response.body}".red if response.status != 200
|
128
128
|
JSON.parse(response.body)['results']
|
129
129
|
end
|
@@ -312,7 +312,7 @@ module Fastlane
|
|
312
312
|
end
|
313
313
|
|
314
314
|
def self.details
|
315
|
-
"More information on GitHub: https://github.com/
|
315
|
+
"More information on GitHub: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md#xcodebuild"
|
316
316
|
end
|
317
317
|
|
318
318
|
def self.author
|
@@ -19,7 +19,7 @@ module Fastlane
|
|
19
19
|
def self.details
|
20
20
|
[
|
21
21
|
"It is recommended to store the build configuration in the `.xctool-args` file.",
|
22
|
-
"More information available on GitHub: https://github.com/
|
22
|
+
"More information available on GitHub: https://github.com/fastlane/fastlane/blob/master/docs/Actions.md#xctool"
|
23
23
|
].join(' ')
|
24
24
|
end
|
25
25
|
|
@@ -114,7 +114,7 @@ module Fastlane
|
|
114
114
|
puts ""
|
115
115
|
end
|
116
116
|
|
117
|
-
puts "More information can be found on https://github.com/
|
117
|
+
puts "More information can be found on https://github.com/fastlane/fastlane/blob/master/docs/Actions.md"
|
118
118
|
puts "\n"
|
119
119
|
|
120
120
|
return # our job is done here
|
@@ -32,7 +32,7 @@ module Fastlane
|
|
32
32
|
|
33
33
|
output << "Generate this documentation by running `fastlane docs`"
|
34
34
|
output << "More information about fastlane can be found on [https://fastlane.tools](https://fastlane.tools)."
|
35
|
-
output << "The documentation of fastlane can be found on [GitHub](https://github.com/
|
35
|
+
output << "The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane)"
|
36
36
|
|
37
37
|
File.write(output_path, output.join("\n"))
|
38
38
|
Helper.log.info "Successfully generated documentation to path '#{File.expand_path(output_path)}'".green
|
@@ -5,6 +5,8 @@ module Fastlane
|
|
5
5
|
def self.verify_gem!(gem_name)
|
6
6
|
begin
|
7
7
|
Gem::Specification.find_by_name(gem_name)
|
8
|
+
# We don't import this by default, as it's not always the same
|
9
|
+
# also e.g. cocoapods is just required and not imported
|
8
10
|
rescue Gem::LoadError
|
9
11
|
print_gem_error "Could not find gem '#{gem_name}'"
|
10
12
|
print_gem_error ""
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module Fastlane
|
2
2
|
module Actions
|
3
|
-
def self.git_log_between(pretty_format, from, to)
|
4
|
-
|
3
|
+
def self.git_log_between(pretty_format, from, to, include_merges)
|
4
|
+
command = 'git log'
|
5
|
+
command << " --pretty=\"#{pretty_format}\" #{from.shellescape}...#{to.shellescape}"
|
6
|
+
command << " --no-merges" unless include_merges
|
7
|
+
Actions.sh(command, log: false).chomp
|
5
8
|
rescue
|
6
9
|
nil
|
7
10
|
end
|
@@ -9,7 +12,7 @@ module Fastlane
|
|
9
12
|
def self.last_git_tag_name(match_lightweight = true)
|
10
13
|
command = ['git describe']
|
11
14
|
command << '--tags' if match_lightweight
|
12
|
-
command << '--
|
15
|
+
command << '`git rev-list --tags --max-count=1`'
|
13
16
|
Actions.sh(command.join(' '), log: false).chomp
|
14
17
|
rescue
|
15
18
|
nil
|
data/lib/fastlane/runner.rb
CHANGED
@@ -114,7 +114,7 @@ module Fastlane
|
|
114
114
|
else
|
115
115
|
# No action and no lane, raising an exception now
|
116
116
|
Helper.log.error caller.join("\n")
|
117
|
-
raise "Could not find action or lane '#{new_lane}'. Check out the README for more details: https://github.com/
|
117
|
+
raise "Could not find action or lane '#{new_lane}'. Check out the README for more details: https://github.com/fastlane/fastlane".red
|
118
118
|
end
|
119
119
|
end
|
120
120
|
|
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.50.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:
|
11
|
+
date: 2016-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: krausefx-shenzhen
|
@@ -148,7 +148,7 @@ dependencies:
|
|
148
148
|
requirements:
|
149
149
|
- - ">="
|
150
150
|
- !ruby/object:Gem::Version
|
151
|
-
version: 0.
|
151
|
+
version: 0.32.1
|
152
152
|
- - "<"
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: 1.0.0
|
@@ -158,7 +158,7 @@ dependencies:
|
|
158
158
|
requirements:
|
159
159
|
- - ">="
|
160
160
|
- !ruby/object:Gem::Version
|
161
|
-
version: 0.
|
161
|
+
version: 0.32.1
|
162
162
|
- - "<"
|
163
163
|
- !ruby/object:Gem::Version
|
164
164
|
version: 1.0.0
|
@@ -168,7 +168,7 @@ dependencies:
|
|
168
168
|
requirements:
|
169
169
|
- - ">="
|
170
170
|
- !ruby/object:Gem::Version
|
171
|
-
version: 0.
|
171
|
+
version: 0.14.0
|
172
172
|
- - "<"
|
173
173
|
- !ruby/object:Gem::Version
|
174
174
|
version: 1.0.0
|
@@ -178,7 +178,7 @@ dependencies:
|
|
178
178
|
requirements:
|
179
179
|
- - ">="
|
180
180
|
- !ruby/object:Gem::Version
|
181
|
-
version: 0.
|
181
|
+
version: 0.14.0
|
182
182
|
- - "<"
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: 1.0.0
|
@@ -188,7 +188,7 @@ dependencies:
|
|
188
188
|
requirements:
|
189
189
|
- - ">="
|
190
190
|
- !ruby/object:Gem::Version
|
191
|
-
version: 0.
|
191
|
+
version: 0.19.0
|
192
192
|
- - "<"
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: 1.0.0
|
@@ -198,7 +198,7 @@ dependencies:
|
|
198
198
|
requirements:
|
199
199
|
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
|
-
version: 0.
|
201
|
+
version: 0.19.0
|
202
202
|
- - "<"
|
203
203
|
- !ruby/object:Gem::Version
|
204
204
|
version: 1.0.0
|
@@ -208,7 +208,7 @@ dependencies:
|
|
208
208
|
requirements:
|
209
209
|
- - ">="
|
210
210
|
- !ruby/object:Gem::Version
|
211
|
-
version: 1.
|
211
|
+
version: 1.7.0
|
212
212
|
- - "<"
|
213
213
|
- !ruby/object:Gem::Version
|
214
214
|
version: 2.0.0
|
@@ -218,7 +218,7 @@ dependencies:
|
|
218
218
|
requirements:
|
219
219
|
- - ">="
|
220
220
|
- !ruby/object:Gem::Version
|
221
|
-
version: 1.
|
221
|
+
version: 1.7.0
|
222
222
|
- - "<"
|
223
223
|
- !ruby/object:Gem::Version
|
224
224
|
version: 2.0.0
|
@@ -228,7 +228,7 @@ dependencies:
|
|
228
228
|
requirements:
|
229
229
|
- - ">="
|
230
230
|
- !ruby/object:Gem::Version
|
231
|
-
version: 1.4.
|
231
|
+
version: 1.4.4
|
232
232
|
- - "<"
|
233
233
|
- !ruby/object:Gem::Version
|
234
234
|
version: 2.0.0
|
@@ -238,7 +238,7 @@ dependencies:
|
|
238
238
|
requirements:
|
239
239
|
- - ">="
|
240
240
|
- !ruby/object:Gem::Version
|
241
|
-
version: 1.4.
|
241
|
+
version: 1.4.4
|
242
242
|
- - "<"
|
243
243
|
- !ruby/object:Gem::Version
|
244
244
|
version: 2.0.0
|
@@ -308,7 +308,7 @@ dependencies:
|
|
308
308
|
requirements:
|
309
309
|
- - ">="
|
310
310
|
- !ruby/object:Gem::Version
|
311
|
-
version: 1.2.
|
311
|
+
version: 1.2.2
|
312
312
|
- - "<"
|
313
313
|
- !ruby/object:Gem::Version
|
314
314
|
version: 2.0.0
|
@@ -318,7 +318,7 @@ dependencies:
|
|
318
318
|
requirements:
|
319
319
|
- - ">="
|
320
320
|
- !ruby/object:Gem::Version
|
321
|
-
version: 1.2.
|
321
|
+
version: 1.2.2
|
322
322
|
- - "<"
|
323
323
|
- !ruby/object:Gem::Version
|
324
324
|
version: 2.0.0
|
@@ -348,7 +348,7 @@ dependencies:
|
|
348
348
|
requirements:
|
349
349
|
- - ">="
|
350
350
|
- !ruby/object:Gem::Version
|
351
|
-
version: 1.
|
351
|
+
version: 1.4.0
|
352
352
|
- - "<"
|
353
353
|
- !ruby/object:Gem::Version
|
354
354
|
version: 2.0.0
|
@@ -358,7 +358,7 @@ dependencies:
|
|
358
358
|
requirements:
|
359
359
|
- - ">="
|
360
360
|
- !ruby/object:Gem::Version
|
361
|
-
version: 1.
|
361
|
+
version: 1.4.0
|
362
362
|
- - "<"
|
363
363
|
- !ruby/object:Gem::Version
|
364
364
|
version: 2.0.0
|
@@ -388,7 +388,7 @@ dependencies:
|
|
388
388
|
requirements:
|
389
389
|
- - ">="
|
390
390
|
- !ruby/object:Gem::Version
|
391
|
-
version: 0.
|
391
|
+
version: 0.3.0
|
392
392
|
- - "<"
|
393
393
|
- !ruby/object:Gem::Version
|
394
394
|
version: 1.0.0
|
@@ -398,7 +398,7 @@ dependencies:
|
|
398
398
|
requirements:
|
399
399
|
- - ">="
|
400
400
|
- !ruby/object:Gem::Version
|
401
|
-
version: 0.
|
401
|
+
version: 0.3.0
|
402
402
|
- - "<"
|
403
403
|
- !ruby/object:Gem::Version
|
404
404
|
version: 1.0.0
|
@@ -408,7 +408,7 @@ dependencies:
|
|
408
408
|
requirements:
|
409
409
|
- - ">="
|
410
410
|
- !ruby/object:Gem::Version
|
411
|
-
version: 0.
|
411
|
+
version: 0.4.1
|
412
412
|
- - "<"
|
413
413
|
- !ruby/object:Gem::Version
|
414
414
|
version: 1.0.0
|
@@ -418,7 +418,7 @@ dependencies:
|
|
418
418
|
requirements:
|
419
419
|
- - ">="
|
420
420
|
- !ruby/object:Gem::Version
|
421
|
-
version: 0.
|
421
|
+
version: 0.4.1
|
422
422
|
- - "<"
|
423
423
|
- !ruby/object:Gem::Version
|
424
424
|
version: 1.0.0
|
@@ -428,7 +428,7 @@ dependencies:
|
|
428
428
|
requirements:
|
429
429
|
- - ">="
|
430
430
|
- !ruby/object:Gem::Version
|
431
|
-
version: 0.2.
|
431
|
+
version: 0.2.4
|
432
432
|
- - "<"
|
433
433
|
- !ruby/object:Gem::Version
|
434
434
|
version: 1.0.0
|
@@ -438,7 +438,7 @@ dependencies:
|
|
438
438
|
requirements:
|
439
439
|
- - ">="
|
440
440
|
- !ruby/object:Gem::Version
|
441
|
-
version: 0.2.
|
441
|
+
version: 0.2.4
|
442
442
|
- - "<"
|
443
443
|
- !ruby/object:Gem::Version
|
444
444
|
version: 1.0.0
|
@@ -635,6 +635,7 @@ files:
|
|
635
635
|
- lib/fastlane/actions/get_build_number.rb
|
636
636
|
- lib/fastlane/actions/get_github_release.rb
|
637
637
|
- lib/fastlane/actions/get_info_plist_value.rb
|
638
|
+
- lib/fastlane/actions/get_ipa_info_plist_value.rb
|
638
639
|
- lib/fastlane/actions/get_version_number.rb
|
639
640
|
- lib/fastlane/actions/git_branch.rb
|
640
641
|
- lib/fastlane/actions/git_commit.rb
|
@@ -701,6 +702,7 @@ files:
|
|
701
702
|
- lib/fastlane/actions/swiftlint.rb
|
702
703
|
- lib/fastlane/actions/team_id.rb
|
703
704
|
- lib/fastlane/actions/team_name.rb
|
705
|
+
- lib/fastlane/actions/testfairy.rb
|
704
706
|
- lib/fastlane/actions/testflight.rb
|
705
707
|
- lib/fastlane/actions/testmunk.rb
|
706
708
|
- lib/fastlane/actions/tryouts.rb
|
@@ -772,7 +774,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
772
774
|
version: '0'
|
773
775
|
requirements: []
|
774
776
|
rubyforge_project:
|
775
|
-
rubygems_version: 2.4.
|
777
|
+
rubygems_version: 2.4.0
|
776
778
|
signing_key:
|
777
779
|
specification_version: 4
|
778
780
|
summary: Connect all iOS deployment tools into one streamlined workflow
|