Module: FastlaneCore::Helper

Defined in:
lib/fastlane_core/helper.rb

Overview

rubocop:disable Metrics/ModuleLength

Class Method Summary collapse

Class Method Details

.backticks(command, print: true) ⇒ Object

Runs a given command using backticks (‘) and prints them out using the UI.command method



16
17
18
19
20
21
# File 'lib/fastlane_core/helper.rb', line 16

def self.backticks(command, print: true)
  UI.command(command) if print
  result = `#{command}`
  UI.command_output(result) if print
  return result
end

.buildlog_pathObject

Logs base directory



116
117
118
# File 'lib/fastlane_core/helper.rb', line 116

def self.buildlog_path
  return ENV["FL_BUILDLOG_PATH"] || "~/Library/Logs"
end

.bundler?boolean

Returns true if executing with bundler (like ‘bundle exec fastlane [action]’).

Returns:

  • (boolean)

    true if executing with bundler (like ‘bundle exec fastlane [action]’)



34
35
36
37
38
39
40
# File 'lib/fastlane_core/helper.rb', line 34

def self.bundler?
  # Bundler environment variable
  ['BUNDLE_BIN_PATH', 'BUNDLE_GEMFILE'].each do |current|
    return true if ENV.key?(current)
  end
  return false
end

.ci?boolean

Returns true if building in a known CI environment.

Returns:

  • (boolean)

    true if building in a known CI environment



65
66
67
68
69
70
71
# File 'lib/fastlane_core/helper.rb', line 65

def self.ci?
  # Check for Jenkins, Travis CI, ... environment variables
  ['JENKINS_HOME', 'JENKINS_URL', 'TRAVIS', 'CIRCLECI', 'CI', 'TEAMCITY_VERSION', 'GO_PIPELINE_NAME', 'bamboo_buildKey', 'GITLAB_CI', 'XCS'].each do |current|
    return true if ENV.key?(current)
  end
  return false
end

.colors_disabled?Boolean

Do we want to disable the colored output?

Returns:

  • (Boolean)


101
102
103
# File 'lib/fastlane_core/helper.rb', line 101

def self.colors_disabled?
  ENV["FASTLANE_DISABLE_COLORS"]
end

.contained_fastlane?Boolean

Do we run from a bundled fastlane, which contains Ruby and OpenSSL? Usually this means the fastlane directory is ~/.fastlane/bin/ We set this value via the environment variable ‘FASTLANE_SELF_CONTAINED`

Returns:

  • (Boolean)


45
46
47
# File 'lib/fastlane_core/helper.rb', line 45

def self.contained_fastlane?
  ENV["FASTLANE_SELF_CONTAINED"].to_s == "true" && !self.homebrew?
end

.fastlane_enabled?Boolean

Returns:

  • (Boolean)


220
221
222
223
# File 'lib/fastlane_core/helper.rb', line 220

def self.fastlane_enabled?
  # This is called from the root context on the first start
  @enabled ||= (File.directory?("./fastlane") || File.directory?("./.fastlane"))
end

.gem_path(gem_name) ⇒ Object

DEPRECATED: Use the ‘ROOT` constant from the appropriate tool module instead e.g. File.join(Sigh::ROOT, ’lib’, ‘assets’, ‘resign.sh’)

Path to the installed gem to load resources (e.g. resign.sh)



229
230
231
232
233
234
235
236
237
# File 'lib/fastlane_core/helper.rb', line 229

def self.gem_path(gem_name)
  UI.deprecated('`Helper.gem_path` is deprecated. Use the `ROOT` constant from the appropriate tool module instead.')

  if !Helper.is_test? and Gem::Specification.find_all_by_name(gem_name).any?
    return Gem::Specification.find_by_name(gem_name).gem_dir
  else
    return './'
  end
end

.homebrew?Boolean

returns true if fastlane was installed via Homebrew

Returns:

  • (Boolean)


55
56
57
# File 'lib/fastlane_core/helper.rb', line 55

def self.homebrew?
  ENV["FASTLANE_INSTALLED_VIA_HOMEBREW"].to_s == "true"
end

.is_ci?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/fastlane_core/helper.rb', line 92

def self.is_ci?
  ci?
end

.is_mac?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/fastlane_core/helper.rb', line 96

def self.is_mac?
  self.mac?
end

.is_test?Boolean

Use Helper.test? and Helper.ci? instead (legacy calls)

Returns:

  • (Boolean)


88
89
90
# File 'lib/fastlane_core/helper.rb', line 88

def self.is_test?
  self.test?
end

.iterm?Boolean

Does the user use iTerm?

Returns:

  • (Boolean)


111
112
113
# File 'lib/fastlane_core/helper.rb', line 111

def self.iterm?
  !!ENV["ITERM_SESSION_ID"]
end

.itms_pathObject

Returns the full path to the iTMSTransporter executable.

Returns:

  • the full path to the iTMSTransporter executable



206
207
208
209
210
211
212
213
214
215
216
217
218
# File 'lib/fastlane_core/helper.rb', line 206

def self.itms_path
  return ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"] if ENV["FASTLANE_ITUNES_TRANSPORTER_PATH"]
  return '' unless self.is_mac? # so tests work on Linx too

  [
    "../Applications/Application Loader.app/Contents/MacOS/itms",
    "../Applications/Application Loader.app/Contents/itms"
  ].each do |path|
    result = File.expand_path(File.join(self.xcode_path, path))
    return result if File.exist?(result)
  end
  UI.user_error!("Could not find transporter at #{self.xcode_path}. Please make sure you set the correct path to your Xcode installation.")
end

.keychain_path(name) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
# File 'lib/fastlane_core/helper.rb', line 169

def self.keychain_path(name)
  # Existing code expects that a keychain name will be expanded into a default path to Libary/Keychains
  # in the user's home directory. However, this will not allow the user to pass an absolute path
  # for the keychain value
  #
  # So, if the passed value can't be resolved as a file in Library/Keychains, just use it as-is
  # as the keychain path.
  #
  # We need to expand each path because File.exist? won't handle directories including ~ properly
  #
  # We also try to append `-db` at the end of the file path, as with Sierra the default Keychain name
  # has changed for some users: https://github.com/fastlane/fastlane/issues/5649
  #

  # Remove the ".keychain" at the end of the name
  name.sub!(/\.keychain$/, "")

  possible_locations = [
    File.join(Dir.home, 'Library', 'Keychains', name),
    name
  ].map { |path| File.expand_path(path) }

  # Transforms ["thing"] to ["thing", "thing-db", "thing.keychain", "thing.keychain-db"]
  keychain_paths = []
  possible_locations.each do |location|
    keychain_paths << location
    keychain_paths << "#{location}-db"
    keychain_paths << "#{location}.keychain"
    keychain_paths << "#{location}.keychain-db"
  end

  keychain_path = keychain_paths.find { |path| File.exist?(path) }
  UI.user_error!("Could not locate the provided keychain. Tried:\n\t#{keychain_paths.join("\n\t")}") unless keychain_path
  keychain_path
end

.linux?Boolean

Returns:

  • (Boolean)


78
79
80
# File 'lib/fastlane_core/helper.rb', line 78

def self.linux?
  (/linux/ =~ RUBY_PLATFORM) != nil
end

.logObject

This method is deprecated, use the ‘UI` class github.com/fastlane/fastlane/blob/master/fastlane/docs/UI.md



9
10
11
12
# File 'lib/fastlane_core/helper.rb', line 9

def self.log
  UI.deprecated "Helper.log is deprecated. Use `UI` class instead"
  UI.current.log
end

.mac?Boolean

Is the currently running computer a Mac?

Returns:

  • (Boolean)


83
84
85
# File 'lib/fastlane_core/helper.rb', line 83

def self.mac?
  (/darwin/ =~ RUBY_PLATFORM) != nil
end

.mac_app?Boolean

returns true if fastlane was installed from the Fabric Mac app

Returns:

  • (Boolean)


50
51
52
# File 'lib/fastlane_core/helper.rb', line 50

def self.mac_app?
  ENV["FASTLANE_SELF_CONTAINED"].to_s == "false"
end

.mac_stock_terminal?Boolean

Does the user use the Mac stock terminal

Returns:

  • (Boolean)


106
107
108
# File 'lib/fastlane_core/helper.rb', line 106

def self.mac_stock_terminal?
  !!ENV["TERM_PROGRAM_VERSION"]
end

.rubygems?Boolean

returns true if fastlane was installed via RubyGems

Returns:

  • (Boolean)


60
61
62
# File 'lib/fastlane_core/helper.rb', line 60

def self.rubygems?
  !self.bundler? && !self.contained_fastlane? && !self.homebrew? && !self.mac_app?
end

.strip_ansi_colors(str) ⇒ Object

removes ANSI colors from string



29
30
31
# File 'lib/fastlane_core/helper.rb', line 29

def self.strip_ansi_colors(str)
  str.gsub(/\e\[([;\d]+)?m/, '')
end

.test?Boolean

Returns true if the currently running program is a unit test.

Returns:

  • (Boolean)

    true if the currently running program is a unit test



24
25
26
# File 'lib/fastlane_core/helper.rb', line 24

def self.test?
  defined? SpecHelper
end

.transporter_java_executable_pathObject



144
145
146
# File 'lib/fastlane_core/helper.rb', line 144

def self.transporter_java_executable_path
  return File.join(self.transporter_java_path, 'bin', 'java')
end

.transporter_java_ext_dirObject



148
149
150
# File 'lib/fastlane_core/helper.rb', line 148

def self.transporter_java_ext_dir
  return File.join(self.transporter_java_path, 'lib', 'ext')
end

.transporter_java_jar_pathObject



152
153
154
# File 'lib/fastlane_core/helper.rb', line 152

def self.transporter_java_jar_path
  return File.join(self.itms_path, 'lib', 'itmstransporter-launcher.jar')
end

.transporter_java_pathObject



160
161
162
# File 'lib/fastlane_core/helper.rb', line 160

def self.transporter_java_path
  return File.join(self.itms_path, 'java')
end

.transporter_pathObject

Returns the full path to the iTMSTransporter executable.

Returns:

  • the full path to the iTMSTransporter executable



165
166
167
# File 'lib/fastlane_core/helper.rb', line 165

def self.transporter_path
  return File.join(self.itms_path, 'bin', 'iTMSTransporter')
end

.transporter_user_dirObject



156
157
158
# File 'lib/fastlane_core/helper.rb', line 156

def self.transporter_user_dir
  return File.join(self.itms_path, 'bin')
end

.windows?Boolean

Returns:

  • (Boolean)


73
74
75
76
# File 'lib/fastlane_core/helper.rb', line 73

def self.windows?
  # taken from: http://stackoverflow.com/a/171011/1945875
  (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
end

.xcode_pathObject

Returns the full path to the Xcode developer tools of the currently running system.

Returns:

  • the full path to the Xcode developer tools of the currently running system



125
126
127
128
# File 'lib/fastlane_core/helper.rb', line 125

def self.xcode_path
  return "" if self.is_test? and !self.is_mac?
  `xcode-select -p`.delete("\n") + "/"
end

.xcode_versionObject

Returns The version of the currently used Xcode installation (e.g. “7.0”).

Returns:

  • The version of the currently used Xcode installation (e.g. “7.0”)



131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/fastlane_core/helper.rb', line 131

def self.xcode_version
  return @xcode_version if @xcode_version

  begin
    output = `DEVELOPER_DIR='' "#{xcode_path}/usr/bin/xcodebuild" -version`
    @xcode_version = output.split("\n").first.split(' ')[1]
  rescue => ex
    UI.error(ex)
    UI.error("Error detecting currently used Xcode installation")
  end
  @xcode_version
end