fastlane 1.61.0 → 1.62.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 +6 -6
- data/lib/fastlane/actions/backup_xcarchive.rb +11 -10
- data/lib/fastlane/actions/carthage.rb +19 -3
- data/lib/fastlane/actions/ensure_xcode_version.rb +1 -1
- data/lib/fastlane/actions/git_pull.rb +18 -9
- data/lib/fastlane/actions/hockey.rb +5 -0
- data/lib/fastlane/actions/make_changelog_from_jenkins.rb +12 -8
- data/lib/fastlane/actions/sonar.rb +15 -0
- data/lib/fastlane/actions/update_info_plist.rb +11 -1
- data/lib/fastlane/helper/gem_helper.rb +10 -13
- data/lib/fastlane/helper/sh_helper.rb +29 -9
- data/lib/fastlane/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b38f8789384c96fbbf2a8135629f4ac47326912a
|
4
|
+
data.tar.gz: 6d57b912e744ee6d4eeccab52a0c3bbaec11cada
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 831c8ab0c35ce8cdf8c289e973eee995653ff92268a31ffa58d8fa1e769f13a0a8d23825e47d098e328c7c1d5b5cec72dc0c2fcff5701419ae9da520eceb6d31
|
7
|
+
data.tar.gz: eeb059e37cb59f69d8c15e9e8480a09d6476ab15bab4f36610f74f76c7ef975c5da3d2d1ad9729359c78bbc5dfe1b0a31d7096a34b9e2f312f69e57f3509f397
|
data/README.md
CHANGED
@@ -60,7 +60,7 @@ lane :appstore do
|
|
60
60
|
cocoapods
|
61
61
|
scan
|
62
62
|
snapshot
|
63
|
-
|
63
|
+
match
|
64
64
|
deliver
|
65
65
|
sh "./customScript.sh"
|
66
66
|
|
@@ -76,7 +76,7 @@ fastlane appstore
|
|
76
76
|
|
77
77
|
| fastlane
|
78
78
|
--------------------------|------------------------------------------------------------
|
79
|
-
:sparkles: | Connect all iOS build tools into one workflow (both `fastlane` tools and third party tools)
|
79
|
+
:sparkles: | Connect all iOS and Android build tools into one workflow (both `fastlane` tools and third party tools)
|
80
80
|
:monorail: | Define different `deployment lanes` for App Store deployment, beta builds or testing
|
81
81
|
:ship: | Deploy from any computer, including a CI-server
|
82
82
|
:wrench: | Extend and customise the functionality
|
@@ -90,7 +90,7 @@ fastlane appstore
|
|
90
90
|
:ghost: | [Jenkins Integration](https://github.com/fastlane/fastlane/blob/master/docs/Jenkins.md): Show the output directly in the Jenkins test results
|
91
91
|
:book: | Automatically generate a markdown documentation of your lane config
|
92
92
|
:hatching_chick: | Over 140 built-in integrations available
|
93
|
-
:computer: | Support for both iOS
|
93
|
+
:computer: | Support for both iOS, Mac OS and Android apps
|
94
94
|
:octocat: | Full git and mercurial support
|
95
95
|
|
96
96
|
|
@@ -170,11 +170,11 @@ See how [Wikipedia](https://github.com/fastlane/examples#wikipedia-by-wikimedia-
|
|
170
170
|
|
171
171
|
## Statistics
|
172
172
|
|
173
|
-
`fastlane` tracks the number of errors for each action to detect integration issues. The data will be sent to [fastlane-enhancer](https://github.com/fastlane/enhancer)
|
173
|
+
`fastlane` tracks the number of errors for each action to detect integration issues. The data will be sent to [fastlane-enhancer](https://github.com/fastlane/enhancer).
|
174
174
|
|
175
175
|
You can easily opt-out by adding `opt_out_usage` to your `Fastfile` or by setting the environment variable `FASTLANE_OPT_OUT_USAGE`. To also disable update checks, set the `FASTLANE_SKIP_UPDATE_CHECK` variable.
|
176
176
|
|
177
|
-
You can optionally submit crash reports, run `fastlane enable_crash_reporting` to get started. This makes resolving issues much easier and helps
|
177
|
+
You can optionally submit crash reports, run `fastlane enable_crash_reporting` to get started. This makes resolving issues much easier and helps improve fastlane. [More information](https://github.com/fastlane/fastlane/releases/tag/1.33.3)
|
178
178
|
|
179
179
|
## Credentials
|
180
180
|
A detailed description about how `fastlane` stores your credentials is available on a [separate repo](https://github.com/fastlane/credentials_manager).
|
@@ -193,4 +193,4 @@ Help us keep `fastlane` open and inclusive. Please read and follow our [Code of
|
|
193
193
|
## License
|
194
194
|
This project is licensed under the terms of the MIT license. See the LICENSE file.
|
195
195
|
|
196
|
-
> This project and all fastlane tools are in no way affiliated with Apple Inc. This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. All fastlane tools run on your own computer or server, so your credentials or other sensitive information will never leave your own computer. You are responsible for how you use fastlane tools.
|
196
|
+
> This project and all fastlane tools are in no way affiliated with Apple Inc or Google. This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. All fastlane tools run on your own computer or server, so your credentials or other sensitive information will never leave your own computer. You are responsible for how you use fastlane tools.
|
@@ -28,19 +28,20 @@ module Fastlane
|
|
28
28
|
|
29
29
|
# Save archive to destination
|
30
30
|
if zipped
|
31
|
-
|
31
|
+
Dir.mktmpdir("backup_xcarchive") do |dir|
|
32
|
+
Helper.log.info "Compressing #{xcarchive}"
|
33
|
+
xcarchive_folder = File.expand_path(File.dirname(xcarchive))
|
34
|
+
xcarchive_file = File.basename(xcarchive)
|
35
|
+
zip_file = File.join(dir, "#{xcarchive_file}.zip")
|
32
36
|
|
33
|
-
|
34
|
-
|
35
|
-
zip_file = File.expand_path(File.join("#{xcarchive_file}.zip"))
|
37
|
+
# Create zip
|
38
|
+
Actions.sh(%(cd "#{xcarchive_folder}" && zip -r -X "#{zip_file}" "#{xcarchive_file}" > /dev/null))
|
36
39
|
|
37
|
-
|
38
|
-
|
40
|
+
# Moved to its final destination
|
41
|
+
FileUtils.mv(zip_file, full_destination)
|
39
42
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
Actions.lane_context[SharedValues::BACKUP_XCARCHIVE_FILE] = "#{full_destination}/#{File.basename(zip_file)}"
|
43
|
+
Actions.lane_context[SharedValues::BACKUP_XCARCHIVE_FILE] = "#{full_destination}/#{File.basename(zip_file)}"
|
44
|
+
end
|
44
45
|
else
|
45
46
|
# Copy xcarchive file
|
46
47
|
FileUtils.cp_r(xcarchive, full_destination)
|
@@ -2,7 +2,13 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class CarthageAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
cmd = ["carthage
|
5
|
+
cmd = ["carthage"]
|
6
|
+
|
7
|
+
if params[:update]
|
8
|
+
cmd << "update"
|
9
|
+
else
|
10
|
+
cmd << "bootstrap"
|
11
|
+
end
|
6
12
|
|
7
13
|
cmd << "--use-ssh" if params[:use_ssh]
|
8
14
|
cmd << "--use-submodules" if params[:use_submodules]
|
@@ -15,11 +21,21 @@ module Fastlane
|
|
15
21
|
end
|
16
22
|
|
17
23
|
def self.description
|
18
|
-
"Runs `carthage bootstrap` for your project"
|
24
|
+
"Runs `carthage bootstrap` or `carthage update` for your project"
|
19
25
|
end
|
20
26
|
|
21
27
|
def self.available_options
|
22
28
|
[
|
29
|
+
FastlaneCore::ConfigItem.new(key: :update,
|
30
|
+
env_name: "FL_CARTHAGE_UPDATE",
|
31
|
+
description: "Update the the project's dependencies",
|
32
|
+
is_string: false,
|
33
|
+
optional: true,
|
34
|
+
default_value: false,
|
35
|
+
verify_block: proc do |value|
|
36
|
+
raise "Please pass a valid value for update. Use one of the following: true, false" unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
|
37
|
+
end),
|
38
|
+
|
23
39
|
FastlaneCore::ConfigItem.new(key: :use_ssh,
|
24
40
|
env_name: "FL_CARTHAGE_USE_SSH",
|
25
41
|
description: "Use SSH for downloading GitHub repositories",
|
@@ -75,7 +91,7 @@ module Fastlane
|
|
75
91
|
end
|
76
92
|
|
77
93
|
def self.authors
|
78
|
-
["bassrock", "petester42", "jschmid"]
|
94
|
+
["bassrock", "petester42", "jschmid", "JaviSoto"]
|
79
95
|
end
|
80
96
|
end
|
81
97
|
end
|
@@ -2,14 +2,15 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class GitPullAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
commands = []
|
6
|
+
|
7
|
+
unless params[:only_tags]
|
8
|
+
commands += ["git pull &&"]
|
9
|
+
end
|
10
|
+
|
11
|
+
commands += ["git fetch --tags"]
|
10
12
|
|
11
|
-
Actions.sh(
|
12
|
-
Helper.log.info 'Sucesfully pulled from remote.'
|
13
|
+
Actions.sh(commands.join(' '))
|
13
14
|
end
|
14
15
|
|
15
16
|
def self.description
|
@@ -18,11 +19,19 @@ module Fastlane
|
|
18
19
|
|
19
20
|
def self.available_options
|
20
21
|
[
|
22
|
+
FastlaneCore::ConfigItem.new(key: :only_tags,
|
23
|
+
description: "Simply pull the tags, and not bring new commits to the current branch from the remote",
|
24
|
+
is_string: false,
|
25
|
+
optional: true,
|
26
|
+
default_value: false,
|
27
|
+
verify_block: proc do |value|
|
28
|
+
raise "Please pass a valid value for only_tags. Use one of the following: true, false" unless value.kind_of?(TrueClass) || value.kind_of?(FalseClass)
|
29
|
+
end)
|
21
30
|
]
|
22
31
|
end
|
23
32
|
|
24
|
-
def self.
|
25
|
-
"KrauseFx"
|
33
|
+
def self.authors
|
34
|
+
["KrauseFx", "JaviSoto"]
|
26
35
|
end
|
27
36
|
|
28
37
|
def self.is_supported?(platform)
|
@@ -19,6 +19,10 @@ module Fastlane
|
|
19
19
|
if options[:dsym]
|
20
20
|
dsym_filename = options[:dsym]
|
21
21
|
else
|
22
|
+
if options[:ipa].to_s.length == 0
|
23
|
+
UI.user_error!("You have to provide an ipa file")
|
24
|
+
end
|
25
|
+
|
22
26
|
dsym_path = options[:ipa].gsub('ipa', 'app.dSYM.zip')
|
23
27
|
if File.exist?(dsym_path)
|
24
28
|
dsym_filename = dsym_path
|
@@ -78,6 +82,7 @@ module Fastlane
|
|
78
82
|
env_name: "FL_HOCKEY_IPA",
|
79
83
|
description: "Path to your IPA file. Optional if you use the `gym` or `xcodebuild` action. For Mac zip the .app. For Android provide path to .apk file",
|
80
84
|
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
|
85
|
+
optional: true,
|
81
86
|
verify_block: proc do |value|
|
82
87
|
raise "Couldn't find ipa file at path '#{value}'".red unless File.exist?(value)
|
83
88
|
end),
|
@@ -2,18 +2,22 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class MakeChangelogFromJenkinsAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
|
6
|
-
require 'nokogiri'
|
5
|
+
require 'json'
|
7
6
|
require 'net/http'
|
8
7
|
|
9
8
|
changelog = ""
|
10
9
|
|
11
|
-
if Helper.is_ci?
|
10
|
+
if Helper.is_ci? || Helper.is_test?
|
12
11
|
# The "BUILD_URL" environment variable is set automatically by Jenkins in every build
|
13
|
-
jenkins_xml_url = URI(ENV["BUILD_URL"] + "api/
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
jenkins_xml_url = URI(ENV["BUILD_URL"] + "api/json\?wrapper\=changes\&xpath\=//changeSet//comment")
|
13
|
+
begin
|
14
|
+
json = JSON.parse(Net::HTTP.get(jenkins_xml_url))
|
15
|
+
json['changeSet']['items'].each do |item|
|
16
|
+
comment = item['comment']
|
17
|
+
changelog << comment.strip + "\n"
|
18
|
+
end
|
19
|
+
rescue => ex
|
20
|
+
UI.error("Unable to read/parse changelog from jenkins: #{ex.message}")
|
17
21
|
end
|
18
22
|
end
|
19
23
|
|
@@ -31,7 +35,7 @@ module Fastlane
|
|
31
35
|
def self.available_options
|
32
36
|
[
|
33
37
|
FastlaneCore::ConfigItem.new(key: :fallback_changelog,
|
34
|
-
description: "Fallback changelog if there is not one on Jenkins",
|
38
|
+
description: "Fallback changelog if there is not one on Jenkins, or it couldn't be read",
|
35
39
|
optional: true,
|
36
40
|
default_value: "")
|
37
41
|
]
|
@@ -16,6 +16,9 @@ module Fastlane
|
|
16
16
|
sonar_runner_args << "-Dsonar.projectName=\"#{params[:project_name]}\"" if params[:project_name]
|
17
17
|
sonar_runner_args << "-Dsonar.projectVersion=\"#{params[:project_version]}\"" if params[:project_version]
|
18
18
|
sonar_runner_args << "-Dsonar.sources=\"#{params[:sources_path]}\"" if params[:sources_path]
|
19
|
+
sonar_runner_args << "-Dsonar.language=\"#{params[:project_language]}\"" if params[:project_language]
|
20
|
+
sonar_runner_args << "-Dsonar.sourceEncoding=\"#{params[:source_encoding]}\"" if params[:source_encoding]
|
21
|
+
sonar_runner_args << params[:sonar_runner_args] if params[:sonar_runner_args]
|
19
22
|
|
20
23
|
command = [
|
21
24
|
command_prefix,
|
@@ -66,6 +69,18 @@ module Fastlane
|
|
66
69
|
FastlaneCore::ConfigItem.new(key: :sources_path,
|
67
70
|
env_name: "FL_SONAR_RUNNER_SOURCES_PATH",
|
68
71
|
description: "Comma-separated paths to directories containing source files. Must either be specified here or inside the sonar project configuration file",
|
72
|
+
optional: true),
|
73
|
+
FastlaneCore::ConfigItem.new(key: :project_language,
|
74
|
+
env_name: "FL_SONAR_RUNNER_PROJECT_LANGUAGE",
|
75
|
+
description: "Language key, e.g. objc",
|
76
|
+
optional: true),
|
77
|
+
FastlaneCore::ConfigItem.new(key: :source_encoding,
|
78
|
+
env_name: "FL_SONAR_RUNNER_SOURCE_ENCODING",
|
79
|
+
description: "Used encoding of source files, e.g., UTF-8",
|
80
|
+
optional: true),
|
81
|
+
FastlaneCore::ConfigItem.new(key: :sonar_runner_args,
|
82
|
+
env_name: "FL_SONAR_RUNNER_ARGS",
|
83
|
+
description: "Pass additional arguments to sonar-runner. Be sure to provide the arguments with a leading `-D` e.g. FL_SONAR_RUNNER_ARGS=\"-Dsonar.verbose=true\"",
|
69
84
|
optional: true)
|
70
85
|
]
|
71
86
|
end
|
@@ -8,7 +8,11 @@ module Fastlane
|
|
8
8
|
require 'plist'
|
9
9
|
|
10
10
|
# Check if parameters are set
|
11
|
-
if params[:app_identifier] or params[:display_name]
|
11
|
+
if params[:app_identifier] or params[:display_name] or params[:block]
|
12
|
+
if (params[:app_identifier] or params[:display_name]) and params[:block]
|
13
|
+
Helper.log.warn("block parameter can not be specified with app_identifier or display_name")
|
14
|
+
return false
|
15
|
+
end
|
12
16
|
|
13
17
|
# Assign folder from parameter or search for xcodeproj file
|
14
18
|
folder = params[:xcodeproj] || Dir["*.xcodeproj"].first
|
@@ -21,6 +25,7 @@ module Fastlane
|
|
21
25
|
# Update plist values
|
22
26
|
plist['CFBundleIdentifier'] = params[:app_identifier] if params[:app_identifier]
|
23
27
|
plist['CFBundleDisplayName'] = params[:display_name] if params[:display_name]
|
28
|
+
params[:block].call(plist) if params[:block]
|
24
29
|
|
25
30
|
# Write changes to file
|
26
31
|
plist_string = Plist::Emit.dump(plist)
|
@@ -71,7 +76,12 @@ module Fastlane
|
|
71
76
|
FastlaneCore::ConfigItem.new(key: :display_name,
|
72
77
|
env_name: 'FL_UPDATE_PLIST_DISPLAY_NAME',
|
73
78
|
description: 'The Display Name of your app',
|
79
|
+
optional: true),
|
80
|
+
FastlaneCore::ConfigItem.new(key: :block,
|
81
|
+
is_string: false,
|
82
|
+
description: 'A block to process plist with custom logic',
|
74
83
|
optional: true)
|
84
|
+
|
75
85
|
]
|
76
86
|
end
|
77
87
|
|
@@ -8,22 +8,19 @@ module Fastlane
|
|
8
8
|
# We don't import this by default, as it's not always the same
|
9
9
|
# also e.g. cocoapods is just required and not imported
|
10
10
|
rescue Gem::LoadError
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
11
|
+
UI.error("Could not find gem '#{gem_name}'")
|
12
|
+
UI.error("")
|
13
|
+
UI.error("If you installed fastlane using `sudo gem install fastlane` run")
|
14
|
+
UI.command("sudo gem install #{gem_name}")
|
15
|
+
UI.error("to install the missing gem")
|
16
|
+
UI.error("")
|
17
|
+
UI.error("If you use a Gemfile add this to your Gemfile:")
|
18
|
+
UI.important(" gem '#{gem_name}'")
|
19
|
+
UI.error("and run `bundle install`")
|
19
20
|
|
20
|
-
|
21
|
+
UI.user_error!("You have to install the `#{gem_name}` gem on this machine") unless Helper.is_test?
|
21
22
|
end
|
22
23
|
true
|
23
24
|
end
|
24
|
-
|
25
|
-
def self.print_gem_error(str)
|
26
|
-
Helper.log.error str.red
|
27
|
-
end
|
28
25
|
end
|
29
26
|
end
|
@@ -22,15 +22,10 @@ module Fastlane
|
|
22
22
|
if Helper.test?
|
23
23
|
result << command # only for the tests
|
24
24
|
else
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
UI.command_output(line.strip) if log
|
30
|
-
result << line
|
31
|
-
end
|
32
|
-
io.close
|
33
|
-
exit_status = $?.exitstatus
|
25
|
+
if ENV['USE_SIMPLE_POPEN'] == 'true'
|
26
|
+
exit_status = execute_with_simple_popen(command, log, result)
|
27
|
+
else
|
28
|
+
exit_status = execute_with_popen(command, log, result)
|
34
29
|
end
|
35
30
|
|
36
31
|
if exit_status != 0
|
@@ -52,5 +47,30 @@ module Fastlane
|
|
52
47
|
Encoding.default_external = previous_encoding.first
|
53
48
|
Encoding.default_internal = previous_encoding.last
|
54
49
|
end
|
50
|
+
|
51
|
+
def self.execute_with_popen(command, log, result)
|
52
|
+
exit_status = nil
|
53
|
+
IO.popen(command, err: [:child, :out]) do |io|
|
54
|
+
io.sync = true
|
55
|
+
io.each do |line|
|
56
|
+
UI.command_output(line.strip) if log
|
57
|
+
result << line
|
58
|
+
end
|
59
|
+
io.close
|
60
|
+
exit_status = $?.exitstatus
|
61
|
+
end
|
62
|
+
exit_status
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.execute_with_simple_popen(command, log, result)
|
66
|
+
puts 'Using simple popen'
|
67
|
+
IO.popen(command, err: [:child, :out]) do |io|
|
68
|
+
io.each do |line|
|
69
|
+
UI.command_output(line.strip) if log
|
70
|
+
result << line
|
71
|
+
end
|
72
|
+
end
|
73
|
+
$?.exitstatus
|
74
|
+
end
|
55
75
|
end
|
56
76
|
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.62.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: 2016-02-
|
11
|
+
date: 2016-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: krausefx-shenzhen
|
@@ -588,6 +588,20 @@ dependencies:
|
|
588
588
|
- - "~>"
|
589
589
|
- !ruby/object:Gem::Version
|
590
590
|
version: 4.1.0
|
591
|
+
- !ruby/object:Gem::Dependency
|
592
|
+
name: rest-client
|
593
|
+
requirement: !ruby/object:Gem::Requirement
|
594
|
+
requirements:
|
595
|
+
- - "~>"
|
596
|
+
- !ruby/object:Gem::Version
|
597
|
+
version: 1.6.7
|
598
|
+
type: :development
|
599
|
+
prerelease: false
|
600
|
+
version_requirements: !ruby/object:Gem::Requirement
|
601
|
+
requirements:
|
602
|
+
- - "~>"
|
603
|
+
- !ruby/object:Gem::Version
|
604
|
+
version: 1.6.7
|
591
605
|
description: Connect all iOS deployment tools into one streamlined workflow
|
592
606
|
email:
|
593
607
|
- fastlane@krausefx.com
|