Add --monorepo-config CLI mode for unified multi-package generation
This commit is contained in:
parent
944b7cf670
commit
58aef1a5d4
1 changed files with 50 additions and 0 deletions
|
|
@ -17,6 +17,51 @@ struct SwiftGtkGenCLI {
|
|||
return
|
||||
}
|
||||
|
||||
if !args.monorepoConfigTOML.isEmpty {
|
||||
guard FileManager.default.fileExists(atPath: args.monorepoConfigTOML) else {
|
||||
print("Error: monorepo config file not found: \(args.monorepoConfigTOML)")
|
||||
exit(1)
|
||||
}
|
||||
do {
|
||||
let tomlContent = try String(contentsOfFile: args.monorepoConfigTOML, encoding: .utf8)
|
||||
let toml = try TOMLReader.parse(tomlContent)
|
||||
let monorepoConfig = try MonorepoConfig.from(toml: toml, defaultOutputDir: args.output)
|
||||
let monorepoAnalyzer = MultiPackageAnalyzer(config: monorepoConfig)
|
||||
let analysis = try monorepoAnalyzer.analyze()
|
||||
|
||||
let generator = CodeGenerator(config: GenerationConfig(
|
||||
library: "", version: "", girsDirectories: [],
|
||||
targetDirectory: "", externalLibraries: [],
|
||||
generate: [], manual: [], ignore: [], objects: []
|
||||
))
|
||||
let outputs = try generator.generateMonorepo(analysis: analysis)
|
||||
|
||||
for (moduleName, sourceFiles) in outputs {
|
||||
let sourcesDir = URL(fileURLWithPath: monorepoConfig.outputDir)
|
||||
.appendingPathComponent("Sources/\(moduleName)/Generated")
|
||||
try FileManager.default.createDirectory(at: sourcesDir, withIntermediateDirectories: true)
|
||||
for (fileName, content) in sourceFiles.sorted(by: { $0.key < $1.key }) {
|
||||
let fileURL = sourcesDir.appendingPathComponent(fileName)
|
||||
try content.write(to: fileURL, atomically: true, encoding: .utf8)
|
||||
print("Generated \(fileURL.path)")
|
||||
}
|
||||
}
|
||||
|
||||
let scaffolding = CodeGenerator.generateMonorepoScaffolding(analysis: analysis)
|
||||
let outputRoot = URL(fileURLWithPath: monorepoConfig.outputDir)
|
||||
for (relativePath, content) in scaffolding.sorted(by: { $0.key < $1.key }) {
|
||||
let fileURL = outputRoot.appendingPathComponent(relativePath)
|
||||
try FileManager.default.createDirectory(at: fileURL.deletingLastPathComponent(), withIntermediateDirectories: true)
|
||||
try content.write(to: fileURL, atomically: true, encoding: .utf8)
|
||||
print("Generated \(fileURL.path)")
|
||||
}
|
||||
} catch {
|
||||
print("Error: \(error)")
|
||||
exit(1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
guard !args.girFile.isEmpty else {
|
||||
print("Error: --gir-file is required")
|
||||
exit(1)
|
||||
|
|
@ -133,6 +178,7 @@ struct SwiftGtkGenCLI {
|
|||
var generateAll: Bool = false
|
||||
var manual: [String] = []
|
||||
var ignore: [String] = []
|
||||
var monorepoConfigTOML: String = ""
|
||||
}
|
||||
|
||||
/// Parses command-line arguments.
|
||||
|
|
@ -191,6 +237,9 @@ struct SwiftGtkGenCLI {
|
|||
case "--ignore":
|
||||
guard let val = nextArg(&args, for: flag) else { return CLIArgs(showHelp: true, girFile: "") }
|
||||
cli.ignore = val.components(separatedBy: ",")
|
||||
case "--monorepo-config":
|
||||
guard let val = nextArg(&args, for: flag) else { return CLIArgs(showHelp: true, girFile: "") }
|
||||
cli.monorepoConfigTOML = val
|
||||
default:
|
||||
break
|
||||
}
|
||||
|
|
@ -292,6 +341,7 @@ struct SwiftGtkGenCLI {
|
|||
print(" --manual TYPES Comma-separated types to mark manual")
|
||||
print(" --ignore TYPES Comma-separated types to ignore")
|
||||
print(" --emit-single-file Emit a single file instead of per-type files")
|
||||
print(" --monorepo-config PATH Generate a monorepo using this TOML config")
|
||||
print(" --help, -h Show this help")
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue