From d2daa965eb770f5f84410cec482f0f92cdff649f Mon Sep 17 00:00:00 2001 From: Jimmy Date: Sun, 4 Sep 2022 21:13:56 +0800 Subject: [PATCH] add xtasks to generate man page and autocomplete files (#22) * add xtasks to generate manpage and autocomplete files * add alias for main pkg * git ingore assets/gen --- .cargo/config | 3 ++ .gitignore | 1 + Cargo.lock | 35 +++++++++++++++ Cargo.toml | 34 +++----------- clock-tui/.gitignore | 1 + clock-tui/Cargo.toml | 29 ++++++++++++ README.md => clock-tui/README.md | 0 {src => clock-tui/src}/app.rs | 0 {src => clock-tui/src}/app/modes.rs | 0 {src => clock-tui/src}/app/modes/clock.rs | 0 {src => clock-tui/src}/app/modes/countdown.rs | 0 {src => clock-tui/src}/app/modes/stopwatch.rs | 0 {src => clock-tui/src}/app/modes/timer.rs | 0 {src => clock-tui/src}/bin/main.rs | 0 {src => clock-tui/src}/bricks_text.rs | 0 {src => clock-tui/src}/bricks_text/chars.rs | 0 {src => clock-tui/src}/lib.rs | 0 xtask/Cargo.toml | 12 +++++ xtask/src/main.rs | 44 +++++++++++++++++++ 19 files changed, 130 insertions(+), 29 deletions(-) create mode 100644 .cargo/config create mode 100644 clock-tui/.gitignore create mode 100644 clock-tui/Cargo.toml rename README.md => clock-tui/README.md (100%) rename {src => clock-tui/src}/app.rs (100%) rename {src => clock-tui/src}/app/modes.rs (100%) rename {src => clock-tui/src}/app/modes/clock.rs (100%) rename {src => clock-tui/src}/app/modes/countdown.rs (100%) rename {src => clock-tui/src}/app/modes/stopwatch.rs (100%) rename {src => clock-tui/src}/app/modes/timer.rs (100%) rename {src => clock-tui/src}/bin/main.rs (100%) rename {src => clock-tui/src}/bricks_text.rs (100%) rename {src => clock-tui/src}/bricks_text/chars.rs (100%) rename {src => clock-tui/src}/lib.rs (100%) create mode 100644 xtask/Cargo.toml create mode 100644 xtask/src/main.rs diff --git a/.cargo/config b/.cargo/config new file mode 100644 index 0000000..e2e195c --- /dev/null +++ b/.cargo/config @@ -0,0 +1,3 @@ +[alias] +xtask = "run --package xtask --" +main = "run --package clock-tui --" diff --git a/.gitignore b/.gitignore index ea8c4bf..01f8f04 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/assets/gen diff --git a/Cargo.lock b/Cargo.lock index eabe0f3..e53ad26 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,6 +116,15 @@ dependencies = [ "textwrap", ] +[[package]] +name = "clap_complete" +version = "3.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4179da71abd56c26b54dd0c248cc081c1f43b0a1a7e8448e28e57a29baa993d" +dependencies = [ + "clap", +] + [[package]] name = "clap_derive" version = "3.2.7" @@ -138,6 +147,16 @@ dependencies = [ "os_str_bytes", ] +[[package]] +name = "clap_mangen" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "105180c05a72388d5f5e4e4f6c79eecb92497bda749fa8f963a16647c5d5377f" +dependencies = [ + "clap", + "roff", +] + [[package]] name = "clock-tui" version = "0.4.0" @@ -478,6 +497,12 @@ version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" +[[package]] +name = "roff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" + [[package]] name = "scopeguard" version = "1.1.0" @@ -760,3 +785,13 @@ name = "windows_x86_64_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" + +[[package]] +name = "xtask" +version = "0.1.0" +dependencies = [ + "clap", + "clap_complete", + "clap_mangen", + "clock-tui", +] diff --git a/Cargo.toml b/Cargo.toml index ca31a6f..9934c73 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,29 +1,5 @@ -[package] -name = "clock-tui" -version = "0.4.0" -edition = "2021" -license = "MIT" -description = "A clock app in terminal" -homepage = "https://github.com/race604/clock-tui" -repository = "https://github.com/race604/clock-tui" -readme = "README.md" -authors = ["Race604 "] - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -tui = "0.18.0" -crossterm = "0.24" -chrono = "0.4" -clap = { version = "3.2.12", features = ["derive"] } -regex = "1.6.0" -chrono-tz = { version = "0.6.3", features = ["serde"] } - -[lib] -name = "clock_tui" -path = "src/lib.rs" - -[[bin]] -name = "tclock" -path = "src/bin/main.rs" -bench = false +[workspace] +members = [ + "clock-tui", + "xtask", +] diff --git a/clock-tui/.gitignore b/clock-tui/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/clock-tui/.gitignore @@ -0,0 +1 @@ +/target diff --git a/clock-tui/Cargo.toml b/clock-tui/Cargo.toml new file mode 100644 index 0000000..ca31a6f --- /dev/null +++ b/clock-tui/Cargo.toml @@ -0,0 +1,29 @@ +[package] +name = "clock-tui" +version = "0.4.0" +edition = "2021" +license = "MIT" +description = "A clock app in terminal" +homepage = "https://github.com/race604/clock-tui" +repository = "https://github.com/race604/clock-tui" +readme = "README.md" +authors = ["Race604 "] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +tui = "0.18.0" +crossterm = "0.24" +chrono = "0.4" +clap = { version = "3.2.12", features = ["derive"] } +regex = "1.6.0" +chrono-tz = { version = "0.6.3", features = ["serde"] } + +[lib] +name = "clock_tui" +path = "src/lib.rs" + +[[bin]] +name = "tclock" +path = "src/bin/main.rs" +bench = false diff --git a/README.md b/clock-tui/README.md similarity index 100% rename from README.md rename to clock-tui/README.md diff --git a/src/app.rs b/clock-tui/src/app.rs similarity index 100% rename from src/app.rs rename to clock-tui/src/app.rs diff --git a/src/app/modes.rs b/clock-tui/src/app/modes.rs similarity index 100% rename from src/app/modes.rs rename to clock-tui/src/app/modes.rs diff --git a/src/app/modes/clock.rs b/clock-tui/src/app/modes/clock.rs similarity index 100% rename from src/app/modes/clock.rs rename to clock-tui/src/app/modes/clock.rs diff --git a/src/app/modes/countdown.rs b/clock-tui/src/app/modes/countdown.rs similarity index 100% rename from src/app/modes/countdown.rs rename to clock-tui/src/app/modes/countdown.rs diff --git a/src/app/modes/stopwatch.rs b/clock-tui/src/app/modes/stopwatch.rs similarity index 100% rename from src/app/modes/stopwatch.rs rename to clock-tui/src/app/modes/stopwatch.rs diff --git a/src/app/modes/timer.rs b/clock-tui/src/app/modes/timer.rs similarity index 100% rename from src/app/modes/timer.rs rename to clock-tui/src/app/modes/timer.rs diff --git a/src/bin/main.rs b/clock-tui/src/bin/main.rs similarity index 100% rename from src/bin/main.rs rename to clock-tui/src/bin/main.rs diff --git a/src/bricks_text.rs b/clock-tui/src/bricks_text.rs similarity index 100% rename from src/bricks_text.rs rename to clock-tui/src/bricks_text.rs diff --git a/src/bricks_text/chars.rs b/clock-tui/src/bricks_text/chars.rs similarity index 100% rename from src/bricks_text/chars.rs rename to clock-tui/src/bricks_text/chars.rs diff --git a/src/lib.rs b/clock-tui/src/lib.rs similarity index 100% rename from src/lib.rs rename to clock-tui/src/lib.rs diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml new file mode 100644 index 0000000..b5bc272 --- /dev/null +++ b/xtask/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "xtask" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +clap = { version = "3.2.12", features = ["derive"] } +clap_mangen = "0.1" +clap_complete = "3.2.4" +clock-tui = { path = "../clock-tui" } diff --git a/xtask/src/main.rs b/xtask/src/main.rs new file mode 100644 index 0000000..01284f2 --- /dev/null +++ b/xtask/src/main.rs @@ -0,0 +1,44 @@ +use clap::{IntoApp, ArgEnum}; +use clap_complete::{Shell, generate_to}; +use clap_mangen::Man; +use clock_tui::app::App; +use std::fs::File; +use std::io::Result; +use std::path::{PathBuf, Path}; +use std::{env, fs}; + +const BIN_NAME: &str = "tclock"; + +fn build_shell_completion(outdir: &Path) -> Result<()> { + let mut app = App::into_app(); + let shells = Shell::value_variants(); + + for shell in shells { + generate_to(*shell, &mut app, BIN_NAME, &outdir)?; + } + + Ok(()) +} + +fn build_manpages(outdir: &Path) -> Result<()> { + let app = App::into_app(); + + let file = Path::new(&outdir).join(format!("{}.1", BIN_NAME)); + let mut file = File::create(&file)?; + + Man::new(app).render(&mut file)?; + + Ok(()) +} + +fn main() -> Result<()> { + let out_dir = env!("CARGO_MANIFEST_DIR"); + + let out_path = PathBuf::from(out_dir).join("../assets/gen"); + fs::create_dir_all(&out_path).unwrap(); + + build_shell_completion(&out_path)?; + build_manpages(&out_path)?; + + Ok(()) +}