diff --git a/Makefile b/Makefile index 23e991f..ef8ad47 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,10 @@ publish: blog @echo ./bin/publish --delete -publish_beta: blog +publish_beta: @echo + ./bin/build-sitegen + ./bin/compile . www "https://beta.samhuri.net" ./bin/publish --beta --delete sitegen: diff --git a/SiteGenerator/Sources/SiteGenerator/Generator/Generator.swift b/SiteGenerator/Sources/SiteGenerator/Generator/Generator.swift index be6647b..1e5e5e8 100644 --- a/SiteGenerator/Sources/SiteGenerator/Generator/Generator.swift +++ b/SiteGenerator/Sources/SiteGenerator/Generator/Generator.swift @@ -20,9 +20,13 @@ public final class Generator { let ignoredFilenames = [".DS_Store", ".gitkeep"] - public init(sourceURL: URL, renderers: [Renderer]) throws { + public init(sourceURL: URL, siteURLOverride: URL? = nil, renderers: [Renderer]) throws { let siteURL = sourceURL.appendingPathComponent("site.json") - let site = try Site.decode(from: siteURL) + var site = try Site.decode(from: siteURL) + if let url = siteURLOverride { + print("Overriding site URL \(site.url) with \(url)") + site.url = url + } let templatesURL = sourceURL.appendingPathComponent("templates") self.templateRenderer = SiteTemplateRenderer(site: site, templatesURL: templatesURL) diff --git a/SiteGenerator/Sources/SiteGenerator/Generator/Site.swift b/SiteGenerator/Sources/SiteGenerator/Generator/Site.swift index 19ecf7d..f610b09 100644 --- a/SiteGenerator/Sources/SiteGenerator/Generator/Site.swift +++ b/SiteGenerator/Sources/SiteGenerator/Generator/Site.swift @@ -12,7 +12,7 @@ public struct Site { public let email: String? public let title: String public let description: String? - public let url: URL + public var url: URL public let template: String public let styles: [String] public let scripts: [String] diff --git a/SiteGenerator/Sources/SiteGenerator/main.swift b/SiteGenerator/Sources/SiteGenerator/main.swift index 9dc5d61..b481806 100644 --- a/SiteGenerator/Sources/SiteGenerator/main.swift +++ b/SiteGenerator/Sources/SiteGenerator/main.swift @@ -8,12 +8,12 @@ import Darwin import Foundation -func main(sourcePath: String, targetPath: String) throws { +func main(sourcePath: String, targetPath: String, siteURLOverride: URL?) throws { let sourceURL = URL(fileURLWithPath: sourcePath) let targetURL = URL(fileURLWithPath: targetPath) let generator = try Generator( sourceURL: sourceURL, - plugins: [ProjectsPlugin(), PostsPlugin(), RSSFeedPlugin(), JSONFeedPlugin()], + siteURLOverride: siteURLOverride, renderers: [LessRenderer(), MarkdownRenderer()] ) try generator.generate(targetURL: targetURL) @@ -37,11 +37,24 @@ let targetPath = CommandLine.arguments[2] let targetExists = FileManager.default.fileExists(atPath: targetPath) guard !targetExists else { print("error: Refusing to clobber existing target \(targetPath)") - exit(2) + exit(3) +} + +let siteURLOverride: URL? +if CommandLine.argc > 3, CommandLine.arguments[3].isEmpty == false { + let urlString = CommandLine.arguments[3] + guard let url = URL(string: urlString) else { + print("error: invalid site URL \(urlString)") + exit(4) + } + siteURLOverride = url +} +else { + siteURLOverride = nil } do { - try main(sourcePath: sourcePath, targetPath: targetPath) + try main(sourcePath: sourcePath, targetPath: targetPath, siteURLOverride: siteURLOverride) exit(0) } catch { diff --git a/bin/compile b/bin/compile index b9c291b..e0db938 100755 --- a/bin/compile +++ b/bin/compile @@ -6,12 +6,13 @@ set -e THIS_DIR=$(dirname "$0") SOURCE_DIR="$1" TARGET_DIR="$2" +URL_OVERRIDE="$3" function main() { rm -rf "$TARGET_DIR" echo "* generate site from $SOURCE_DIR into $TARGET_DIR" - "$THIS_DIR/sitegen" "$SOURCE_DIR" "$TARGET_DIR" + "$THIS_DIR/sitegen" "$SOURCE_DIR" "$TARGET_DIR" "$URL_OVERRIDE" # echo "* inline CSS" # ruby -w $THIS_DIR/inline-css "$TARGET_DIR"