Add support for creating and reusing site.toml for init.
This commit is contained in:
parent
a37e33993a
commit
dc3ce055d8
|
@ -98,6 +98,13 @@ dependencies = ["build-js", "prepare-plugins-packaging"]
|
||||||
[tasks.init-sample-site]
|
[tasks.init-sample-site]
|
||||||
category = "Rookeries"
|
category = "Rookeries"
|
||||||
describe = "Initialize the sample site to test the static site generator."
|
describe = "Initialize the sample site to test the static site generator."
|
||||||
|
command = "cargo"
|
||||||
|
args = ["run", "--", "init", "docs"]
|
||||||
|
|
||||||
|
# TODO: Remove this after init command works
|
||||||
|
[tasks.init-sample-site-temp]
|
||||||
|
category = "Rookeries"
|
||||||
|
describe = "Initialize the sample site to test the static site generator."
|
||||||
script = [
|
script = [
|
||||||
"mkdir -p docs/template",
|
"mkdir -p docs/template",
|
||||||
"cp -vR template/*.html docs/template/",
|
"cp -vR template/*.html docs/template/",
|
||||||
|
|
34
src/main.rs
34
src/main.rs
|
@ -1,5 +1,6 @@
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_derive;
|
extern crate serde_derive;
|
||||||
|
extern crate chrono;
|
||||||
extern crate copy_dir;
|
extern crate copy_dir;
|
||||||
extern crate docopt;
|
extern crate docopt;
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
|
@ -17,6 +18,7 @@ extern crate rookeries;
|
||||||
|
|
||||||
use actix_web::{App, HttpServer};
|
use actix_web::{App, HttpServer};
|
||||||
use actix_web::middleware::Logger;
|
use actix_web::middleware::Logger;
|
||||||
|
use chrono::prelude::*;
|
||||||
use colored::Colorize;
|
use colored::Colorize;
|
||||||
use docopt::Docopt;
|
use docopt::Docopt;
|
||||||
use env_logger::{Builder, Env};
|
use env_logger::{Builder, Env};
|
||||||
|
@ -133,7 +135,6 @@ fn main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if args.cmd_build {
|
if args.cmd_build {
|
||||||
// TODO: Make more robust against errors and absences of files.
|
|
||||||
let project_directory = get_project_directory(&args);
|
let project_directory = get_project_directory(&args);
|
||||||
|
|
||||||
// Check if project manifest is available.
|
// Check if project manifest is available.
|
||||||
|
@ -212,7 +213,7 @@ fn main() {
|
||||||
info!("Preparing build directory...");
|
info!("Preparing build directory...");
|
||||||
let build_directory = project_directory.clone().join("build");
|
let build_directory = project_directory.clone().join("build");
|
||||||
if build_directory.exists() && build_directory.is_dir() {
|
if build_directory.exists() && build_directory.is_dir() {
|
||||||
info!("{} Recreating build directory...", "◉".yellow());
|
info!("{} Recreating build directory...", "♼".yellow());
|
||||||
remove_dir_all(&build_directory).expect("Failure!");
|
remove_dir_all(&build_directory).expect("Failure!");
|
||||||
create_dir(&build_directory).expect("Failure!");
|
create_dir(&build_directory).expect("Failure!");
|
||||||
info!("{} Created a build directory.", "✔".green());
|
info!("{} Created a build directory.", "✔".green());
|
||||||
|
@ -345,6 +346,8 @@ fn main() {
|
||||||
// TODO: Remove the copied over base_index.html
|
// TODO: Remove the copied over base_index.html
|
||||||
|
|
||||||
// Copy over plugins too!
|
// Copy over plugins too!
|
||||||
|
info!("");
|
||||||
|
info!("Activate plugins...");
|
||||||
// TODO: Copy over only active and available markdown plugins.
|
// TODO: Copy over only active and available markdown plugins.
|
||||||
let plugin_list = vec!["hello-world", "dark-mode-switch"];
|
let plugin_list = vec!["hello-world", "dark-mode-switch"];
|
||||||
let plugins_install_path = Path::new(&project_directory)
|
let plugins_install_path = Path::new(&project_directory)
|
||||||
|
@ -385,6 +388,33 @@ fn main() {
|
||||||
if args.cmd_init {
|
if args.cmd_init {
|
||||||
info!("");
|
info!("");
|
||||||
info!("Initializing a new site...");
|
info!("Initializing a new site...");
|
||||||
|
|
||||||
|
// Create a site toml if one is missing.
|
||||||
|
let project_directory = get_project_directory(&args);
|
||||||
|
let project_manifest = project_directory.clone().join("site.toml");
|
||||||
|
|
||||||
|
match &project_manifest.exists() {
|
||||||
|
true => {
|
||||||
|
info!("{} Found existing site.toml. Skipping.", "♼".yellow());
|
||||||
|
},
|
||||||
|
false => {
|
||||||
|
// TODO: Support an interactive setup of the Rookeries site.
|
||||||
|
let mut site = Site::default();
|
||||||
|
site.name = "New Rookeries Site".to_string();
|
||||||
|
let site_toml_content = toml::to_string(&site).unwrap();
|
||||||
|
|
||||||
|
// TODO: Consider a more complex template for the site.
|
||||||
|
let rookeries_version = env!("CARGO_PKG_VERSION");
|
||||||
|
let generation_timestamp: DateTime<Local> = Local::now();
|
||||||
|
let generation_timestamp = generation_timestamp.format("%B %e, %Y @ %R").to_string();
|
||||||
|
let site_toml_header = format!("# Site generated by Rookeries v{} on {}", rookeries_version, generation_timestamp);
|
||||||
|
|
||||||
|
let site_toml = format!("{}\n\n{}", site_toml_header, site_toml_content);
|
||||||
|
|
||||||
|
write(&project_manifest, site_toml).expect("Failed to write site.toml");
|
||||||
|
info!("{} Created a site.toml!", "✔".green());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue