90 lines
3.0 KiB
Swift
90 lines
3.0 KiB
Swift
// ArgumentProcessor.swift
|
|
// Copyright (c) 2024 FastlaneTools
|
|
|
|
//
|
|
// ** NOTE **
|
|
// This file is provided by fastlane and WILL be overwritten in future updates
|
|
// If you want to add extra functionality to this project, create a new file in a
|
|
// new group so that it won't be marked for upgrade
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct ArgumentProcessor {
|
|
let args: [RunnerArgument]
|
|
let currentLane: String
|
|
let commandTimeout: Int
|
|
let port: UInt32
|
|
|
|
init(args: [String]) {
|
|
// Dump the first arg which is the program name
|
|
let fastlaneArgs = stride(from: 1, to: args.count - 1, by: 2).map {
|
|
RunnerArgument(name: args[$0], value: args[$0 + 1])
|
|
}
|
|
self.args = fastlaneArgs
|
|
|
|
let fastlaneArgsMinusLanes = fastlaneArgs.filter { arg in
|
|
arg.name.lowercased() != "lane"
|
|
}
|
|
|
|
let potentialLogMode = fastlaneArgsMinusLanes.filter { arg in
|
|
arg.name.lowercased() == "logmode"
|
|
}
|
|
|
|
port = UInt32(fastlaneArgsMinusLanes.first(where: { $0.name == "swiftServerPort" })?.value ?? "") ?? 2000
|
|
|
|
// Configure logMode since we might need to use it before we finish parsing
|
|
if let logModeArg = potentialLogMode.first {
|
|
let logModeString = logModeArg.value
|
|
Logger.logMode = Logger.LogMode(logMode: logModeString)
|
|
}
|
|
|
|
let lanes = self.args.filter { arg in
|
|
arg.name.lowercased() == "lane"
|
|
}
|
|
verbose(message: lanes.description)
|
|
|
|
guard lanes.count == 1 else {
|
|
let message = "You must have exactly one lane specified as an arg, here's what I got: \(lanes)"
|
|
log(message: message)
|
|
fatalError(message)
|
|
}
|
|
|
|
let lane = lanes.first!
|
|
currentLane = lane.value
|
|
|
|
// User might have configured a timeout for the socket connection
|
|
let potentialTimeout = fastlaneArgsMinusLanes.filter { arg in
|
|
arg.name.lowercased() == "timeoutseconds"
|
|
}
|
|
|
|
if let logModeArg = potentialLogMode.first {
|
|
let logModeString = logModeArg.value
|
|
Logger.logMode = Logger.LogMode(logMode: logModeString)
|
|
}
|
|
|
|
if let timeoutArg = potentialTimeout.first {
|
|
let timeoutString = timeoutArg.value
|
|
commandTimeout = (timeoutString as NSString).integerValue
|
|
} else {
|
|
commandTimeout = SocketClient.defaultCommandTimeoutSeconds
|
|
}
|
|
}
|
|
|
|
func laneParameters() -> [String: String] {
|
|
let laneParametersArgs = args.filter { arg in
|
|
let lowercasedName = arg.name.lowercased()
|
|
return lowercasedName != "timeoutseconds" && lowercasedName != "lane" && lowercasedName != "logmode"
|
|
}
|
|
var laneParameters = [String: String]()
|
|
for arg in laneParametersArgs {
|
|
laneParameters[arg.name] = arg.value
|
|
}
|
|
return laneParameters
|
|
}
|
|
}
|
|
|
|
// Please don't remove the lines below
|
|
// They are used to detect outdated files
|
|
// FastlaneRunnerAPIVersion [0.9.2]
|