Class: Fastlane::LaneManager
- Inherits:
-
LaneManagerBase
- Object
- LaneManagerBase
- Fastlane::LaneManager
- Defined in:
- fastlane/lib/fastlane/lane_manager.rb
Class Method Summary collapse
-
.choose_lane(ff, platform) ⇒ Object
Lane chooser if user didn’t provide a lane.
-
.cruise_lane(platform, lane, parameters = nil, env = nil, fastfile_path = nil) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity.
-
.skip_docs? ⇒ Boolean
rubocop:enable Metrics/PerceivedComplexity.
Methods inherited from LaneManagerBase
finish_fastlane, print_error_line, print_lane_context, print_table
Class Method Details
.choose_lane(ff, platform) ⇒ Object
Lane chooser if user didn’t provide a lane
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 88 def self.choose_lane(ff, platform) available = [] # nil is the key for lanes that are not under a specific platform lane_platforms = [nil] + Fastlane::SupportedPlatforms.all lane_platforms.each do |p| available += ff.runner.lanes[p].to_a.reject { |lane| lane.last.is_private } end if available.empty? UI.user_error!("It looks like you don't have any lanes to run just yet. Check out how to get started here: https://github.com/fastlane/fastlane 🚀") end rows = [] available.each_with_index do |lane, index| rows << [index + 1, lane.last.pretty_name, lane.last.description.join("\n")] end rows << [0, "cancel", "No selection, exit fastlane!"] require 'terminal-table' table = Terminal::Table.new( title: "Available lanes to run", headings: ['Number', 'Lane Name', 'Description'], rows: FastlaneCore::PrintTable.transform_output(rows) ) UI.("Welcome to fastlane! Here's what your app is set up to do:") puts(table) i = UI.input("Which number would you like run?") i = i.to_i - 1 if i >= 0 && available[i] selection = available[i].last.pretty_name UI.important("Running lane `#{selection}`. Next time you can do this by directly typing `fastlane #{selection}` 🚀.") platform = selection.split(' ')[0] lane_name = selection.split(' ')[1] unless lane_name # no specific platform, just a root lane lane_name = platform platform = nil end return platform, lane_name # yeah else UI.user_error!("Run `fastlane` the next time you need to build, test or release your app 🚀") end end |
.cruise_lane(platform, lane, parameters = nil, env = nil, fastfile_path = nil) ⇒ Object
rubocop:disable Metrics/PerceivedComplexity
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 11 def self.cruise_lane(platform, lane, parameters = nil, env = nil, fastfile_path = nil) UI.user_error!("lane must be a string") unless lane.kind_of?(String) || lane.nil? UI.user_error!("platform must be a string") unless platform.kind_of?(String) || platform.nil? UI.user_error!("parameters must be a hash") unless parameters.kind_of?(Hash) || parameters.nil? ff = Fastlane::FastFile.new(fastfile_path || FastlaneCore::FastlaneFolder.fastfile_path) is_platform = false begin is_platform = ff.is_platform_block?(lane) rescue # rescue, because this raises an exception if it can't be found at all end unless is_platform # maybe the user specified a default platform # We'll only do this, if the lane specified isn't a platform, as we want to list all platforms then # Make sure that's not a lane without a platform unless ff.runner.available_lanes.include?(lane) platform ||= Actions.lane_context[Actions::SharedValues::DEFAULT_PLATFORM] end end if !platform && lane # Either, the user runs a specific lane in root or want to auto complete the available lanes for a platform # e.g. `fastlane ios` should list all available iOS actions if ff.is_platform_block?(lane) platform = lane lane = nil end end platform, lane = choose_lane(ff, platform) unless lane # xcodeproj has a bug in certain versions that causes it to change directories # and not return to the original working directory # https://github.com/CocoaPods/Xcodeproj/issues/426 # Setting this environment variable causes xcodeproj to work around the problem ENV["FORK_XCODE_WRITING"] = "true" unless platform == 'android' Fastlane::Helper::DotenvHelper.load_dot_env(env) started = Time.now e = nil begin ff.runner.execute(lane, platform, parameters) rescue NameError => ex print_lane_context print_error_line(ex) e = ex rescue Exception => ex # rubocop:disable Lint/RescueException # We also catch Exception, since the implemented action might send a SystemExit signal # (or similar). We still want to catch that, since we want properly finish running fastlane # Tested with `xcake`, which throws a `Xcake::Informative` object print_lane_context print_error_line(ex) UI.error(ex.to_s) if ex.kind_of?(StandardError) # we don't want to print things like 'system exit' e = ex end # After running the lanes, since skip_docs might be somewhere in-between Fastlane::DocsGenerator.run(ff) unless skip_docs? duration = ((Time.now - started) / 60.0).round finish_fastlane(ff, duration, e) return ff end |
.skip_docs? ⇒ Boolean
rubocop:enable Metrics/PerceivedComplexity
82 83 84 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 82 def self.skip_docs? Helper.test? || FastlaneCore::Env.truthy?("FASTLANE_SKIP_DOCS") end |