Use argument parser
This commit is contained in:
@ -1,50 +0,0 @@
|
||||
import Foundation
|
||||
|
||||
#warning("TODO: Add markdown box command: ")
|
||||
#warning("TODO: Add pretty link to other page in page content: ")
|
||||
#warning("TODO: Improve display of processed image list and warnings")
|
||||
|
||||
let args = CommandLine.arguments
|
||||
|
||||
guard args.count == 2 else {
|
||||
print("Invalid argument list")
|
||||
print("Usage: generator config-path")
|
||||
exit(1)
|
||||
}
|
||||
|
||||
let configuration: Configuration
|
||||
do {
|
||||
let configUrl = URL(fileURLWithPath: args[1])
|
||||
let data = try Data(contentsOf: configUrl)
|
||||
configuration = try JSONDecoder().decode(from: data)
|
||||
} catch {
|
||||
print("Failed to read configuration: \(error)")
|
||||
exit(1)
|
||||
}
|
||||
|
||||
let log = ValidationLog()
|
||||
let files = FileSystem(
|
||||
in: configuration.contentDirectory,
|
||||
to: configuration.outputDirectory)
|
||||
|
||||
guard let siteData = Element(atRoot: configuration.contentDirectory) else {
|
||||
exit(0)
|
||||
}
|
||||
|
||||
do {
|
||||
let siteGenerator = try SiteGenerator()
|
||||
siteGenerator.generate(site: siteData)
|
||||
} catch {
|
||||
print("Failed to generate website: \(error)")
|
||||
exit(2)
|
||||
}
|
||||
|
||||
files.printGeneratedPages()
|
||||
files.printEmptyPages()
|
||||
files.printDraftPages()
|
||||
|
||||
files.createImages()
|
||||
print("Images generated")
|
||||
files.copyRequiredFiles()
|
||||
files.printExternalFiles()
|
||||
files.writeHashes()
|
43
Sources/Generator/run.swift
Normal file
43
Sources/Generator/run.swift
Normal file
@ -0,0 +1,43 @@
|
||||
import Foundation
|
||||
import ArgumentParser
|
||||
|
||||
var configuration: Configuration!
|
||||
let log = ValidationLog()
|
||||
var files: FileSystem!
|
||||
|
||||
@main
|
||||
struct CHGenerator: ParsableCommand {
|
||||
|
||||
@Argument(help: "The path to the generator configuration file")
|
||||
var configPath: String
|
||||
|
||||
mutating func run() throws {
|
||||
try generate(configPath: configPath)
|
||||
}
|
||||
}
|
||||
|
||||
private func generate(configPath: String) throws {
|
||||
let configUrl = URL(fileURLWithPath: configPath)
|
||||
let data = try Data(contentsOf: configUrl)
|
||||
configuration = try JSONDecoder().decode(from: data)
|
||||
|
||||
files = .init(
|
||||
in: configuration.contentDirectory,
|
||||
to: configuration.outputDirectory)
|
||||
|
||||
guard let siteData = Element(atRoot: configuration.contentDirectory) else {
|
||||
return
|
||||
}
|
||||
let siteGenerator = try SiteGenerator()
|
||||
siteGenerator.generate(site: siteData)
|
||||
|
||||
files.printGeneratedPages()
|
||||
files.printEmptyPages()
|
||||
files.printDraftPages()
|
||||
|
||||
files.createImages()
|
||||
print("Images generated")
|
||||
files.copyRequiredFiles()
|
||||
files.printExternalFiles()
|
||||
files.writeHashes()
|
||||
}
|
Reference in New Issue
Block a user