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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9de4b8a9cd1171343c95b4df23237219d6463836
4
- data.tar.gz: 9d27352a495f2c000cd49d3e03f45acbc817e8af
3
+ metadata.gz: b38f8789384c96fbbf2a8135629f4ac47326912a
4
+ data.tar.gz: 6d57b912e744ee6d4eeccab52a0c3bbaec11cada
5
5
  SHA512:
6
- metadata.gz: 657e03bd83261d4ee1417d05a9fa1b8867cbcecdb08130a3ba6b6459fb53cc0f5cad9a208b715db3f01f94f1caf22ef253a2938f36e3930805ea1cc7e27037a2
7
- data.tar.gz: 5ca0349f5e0f03e117cc444243c16a077050e92b115f1ee157b72fae5add22cbfc658f75d4087241b5148b84eb741480dd4a71c0746073cb5488d3164e5f6b9d
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
- sigh
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 and Mac OS apps
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) and is available publicly.
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 improving fastlane. [More information](https://github.com/fastlane/fastlane/releases/tag/1.33.3)
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
- Helper.log.info "Compressing #{xcarchive}"
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
- xcarchive_folder = File.expand_path(File.dirname(xcarchive))
34
- xcarchive_file = File.basename(xcarchive)
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
- # Create zip
38
- Actions.sh(%(cd "#{xcarchive_folder}" && zip -r -X "#{zip_file}" "#{xcarchive_file}" > /dev/null))
40
+ # Moved to its final destination
41
+ FileUtils.mv(zip_file, full_destination)
39
42
 
40
- # Moved to its final destination
41
- FileUtils.mv(zip_file, full_destination)
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 bootstrap"]
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
@@ -41,7 +41,7 @@ module Fastlane
41
41
  env_name: "FL_ENSURE_XCODE_VERSION",
42
42
  description: "Xcode version to verify that is selected",
43
43
  is_string: true,
44
- default_value: false)
44
+ optional: false)
45
45
  ]
46
46
  end
47
47
 
@@ -2,14 +2,15 @@ module Fastlane
2
2
  module Actions
3
3
  class GitPullAction < Action
4
4
  def self.run(params)
5
- command = [
6
- 'git',
7
- 'pull',
8
- '--tags'
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(command.join(' '))
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.author
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
- Actions.verify_gem!('nokogiri')
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/xml\?wrapper\=changes\&xpath\=//changeSet//comment")
14
- doc = Nokogiri.XML(Net::HTTP.get(jenkins_xml_url))
15
- doc.css('comment').each do |comment|
16
- changelog << comment.text.strip + "\n"
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
- print_gem_error "Could not find gem '#{gem_name}'"
12
- print_gem_error ""
13
- print_gem_error "If you installed fastlane using `sudo gem install fastlane` run"
14
- print_gem_error "`sudo gem install #{gem_name}` to install the missing gem"
15
- print_gem_error ""
16
- print_gem_error "If you use a Gemfile add this to your Gemfile:"
17
- print_gem_error "gem '#{gem_name}'"
18
- print_gem_error "and run `bundle install`"
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
- raise "You have to install the `#{gem_name}`".red unless Helper.is_test?
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
- exit_status = nil
26
- IO.popen(command, err: [:child, :out]) do |io|
27
- io.sync = true
28
- io.each do |line|
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
@@ -1,3 +1,3 @@
1
1
  module Fastlane
2
- VERSION = '1.61.0'
2
+ VERSION = '1.62.0'
3
3
  end
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.61.0
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-18 00:00:00.000000000 Z
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