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



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

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

.ci?boolean



62
63
64
65
66
67
68
# File 'lib/fastlane_core/helper.rb', line 62

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

.colors_disabled?Boolean

Do we want to disable the colored output?



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

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

.fastlane_enabled?Boolean



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

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

.gem_path(gem_name) ⇒ Object

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



149
150
151
152
153
154
155
# File 'lib/fastlane_core/helper.rb', line 149

def self.gem_path(gem_name)
  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

.is_ci?Boolean



81
82
83
# File 'lib/fastlane_core/helper.rb', line 81

def self.is_ci?
  ci?
end

.is_mac?Boolean



85
86
87
# File 'lib/fastlane_core/helper.rb', line 85

def self.is_mac?
  self.mac?
end

.is_test?Boolean

Use Helper.test? and Helper.ci? instead (legacy calls) rubocop:disable Style/PredicateName



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

def self.is_test?
  self.test?
end

.iterm?Boolean

Does the user use iTerm?



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

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

.logObject

Logging happens using this method



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fastlane_core/helper.rb', line 8

def self.log
  $stdout.sync = true

  if is_test?
    @log ||= Logger.new(nil) # don't show any logs when running tests
  else
    @log ||= Logger.new($stdout)
  end

  @log.formatter = proc do |severity, datetime, progname, msg|
    string = "#{severity} [#{datetime.strftime('%Y-%m-%d %H:%M:%S.%2N')}]: " if $verbose
    string = "[#{datetime.strftime('%H:%M:%S')}]: " unless $verbose
    second = "#{msg}\n"

    if severity == "DEBUG"
      string = string.magenta
    elsif severity == "INFO"
      string = string.white
    elsif severity == "WARN"
      string = string.yellow
    elsif severity == "ERROR"
      string = string.red
    elsif severity == "FATAL"
      string = string.red.bold
    end

    [string, second].join("")
  end

  @log
end

.log_alert(text) ⇒ Object

This method can be used to add nice lines around the actual log Use this to log more important things The logs will be green automatically



43
44
45
# File 'lib/fastlane_core/helper.rb', line 43

def self.log_alert(text)
  UI.header(text)
end

.mac?Boolean

Is the currently running computer a Mac?



71
72
73
# File 'lib/fastlane_core/helper.rb', line 71

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

.mac_stock_terminal?Boolean

Does the user use the Mac stock terminal



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

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

.test?Boolean



57
58
59
# File 'lib/fastlane_core/helper.rb', line 57

def self.test?
  defined?SpecHelper
end

.transporter_pathObject



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

def self.transporter_path
  return '' unless self.is_mac? # so tests work on Linx too

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

.xcode_pathObject



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

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

.xcode_versionObject



116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/fastlane_core/helper.rb', line 116

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
    Helper.log.error ex
    Helper.log.error "Error detecting currently used Xcode installation".red
  end
  @xcode_version
end