import ArgumentParser import CliClient import CliDoc import Dependencies struct GenerateConfigurationCommand: AsyncParsableCommand { static let commandName = "generate-config" static let configuration = CommandConfiguration( commandName: commandName, abstract: createAbstract("Generate a local configuration file."), discussion: Discussion { VStack { Note { """ If a directory is not supplied then a configuration file will be created at \("'~/.config/hpa-playbook/config'".yellow). """ } VStack { "EXAMPLE:".yellow.bold "Create a directory and generate the configuration".green ShellCommand("mkdir -p ~/.config/hpa-playbook") ShellCommand("hpa generate-config --path ~/.config/hpa-playbook") } } .separator(.newLine(count: 2)) } ) @Option( name: .shortAndLong, help: "Directory to generate the configuration in.", completion: .directory ) var path: String? @Flag( name: .shortAndLong, help: "Generate a json file, instead of default env style" ) var json: Bool = false @OptionGroup var globals: BasicGlobalOptions mutating func run() async throws { try await _run() } // FIX: private func _run() async throws { try await withSetupLogger(commandName: Self.commandName, globals: globals) { @Dependency(\.cliClient) var cliClient let actualPath: String if let path { actualPath = "\(path)/config" } else { let path = "~/.config/hpa-playbook/" try await cliClient.runCommand( quiet: false, shell: globals.shellOrDefault, "mkdir", "-p", path ) actualPath = "\(path)/config" } fatalError() // try cliClient.createConfiguration(actualPath, json) } } }