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) ⇒ Object
- .skip_docs? ⇒ Boolean
Methods inherited from LaneManagerBase
finish_fastlane, print_lane_context, print_table
Class Method Details
.choose_lane(ff, platform) ⇒ Object
Lane chooser if user didn’t provide a lane
83 84 85 86 87 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 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 83 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!"] 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 setup 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) ⇒ Object
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 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 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 9 def self.cruise_lane(platform, lane, parameters = nil, env = 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(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 # https://github.com/fastlane/fastlane/issues/11913 # FastlaneCore.session.is_fastfile = true # 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 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 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
77 78 79 |
# File 'fastlane/lib/fastlane/lane_manager.rb', line 77 def self.skip_docs? Helper.test? || FastlaneCore::Env.truthy?("FASTLANE_SKIP_DOCS") end |