import ArgumentParser import CliClient import Dependencies struct GenerateConfigurationCommand: AsyncParsableCommand { static let commandName = "generate-config" static let configuration = CommandConfiguration( commandName: commandName, abstract: "\("Generate a local configuration file.".blue)", discussion: """ \("NOTE:".yellow) If a directory is not supplied then a configuration file will be created at \("'~/.config/hpa-playbook/config'".yellow). \("Example:".yellow) \("Create a directory and generate the configuration file.".green) $ mkdir -p ~/.config/hpa-playbook $ hpa generate-config --path ~/.config/hpa-playbook """ ) @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() } 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" } try cliClient.createConfiguration(actualPath, json) } } }