diff options
author | Clement Tsang <34804052+ClementTsang@users.noreply.github.com> | 2022-03-11 06:45:05 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-11 06:45:05 -0500 |
commit | f2b8b4e8427996407b484c4a4ed9432519c9d3a5 (patch) | |
tree | 02dc3866ce71afeab52fe268459d9af5531779e3 | |
parent | 8087f0b636b94ff5763a3a5637dea9a343784bd7 (diff) |
other: add manpage file to cargo deb config, move back to build script (#693)
Adds the asset for the manpage to cargo deb config. Also moves the generated manpage file to a .1.gz file. Also, moves back to a build script since that was causing some issues for the automatic Cargo.toml fields detection for manpage and completion generation.
To prevent compilation from happening every time, and only in CI, we use an env var to avoid generation steps.
-rw-r--r-- | .github/workflows/deployment.yml | 16 | ||||
-rw-r--r-- | .github/workflows/nightly.yml | 16 | ||||
-rw-r--r-- | Cargo.lock | 27 | ||||
-rw-r--r-- | Cargo.toml | 10 | ||||
-rw-r--r-- | build.rs | 55 | ||||
-rw-r--r-- | src/clap.rs | 2 | ||||
-rw-r--r-- | xtask/.gitignore | 37 | ||||
-rw-r--r-- | xtask/Cargo.lock | 194 | ||||
-rw-r--r-- | xtask/Cargo.toml | 9 | ||||
-rw-r--r-- | xtask/src/main.rs | 55 |
10 files changed, 106 insertions, 315 deletions
diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index e5dcb4fe..2dd1c9b2 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -148,15 +148,10 @@ jobs: args: --release --verbose --target=${{ matrix.triple.target }} --features "battery" use-cross: ${{ matrix.triple.cross }} - - name: Build autocompletion + - name: Build autocompletion and manpage shell: bash run: | - cargo run --manifest-path ./xtask/Cargo.toml -- completion completion - - - name: Build manpage - shell: bash - run: | - cargo run --manifest-path ./xtask/Cargo.toml -- manpage manpage + GENERATE=true cargo build - name: Bundle release and completion (Windows) if: matrix.triple.os == 'windows-2019' @@ -192,6 +187,7 @@ jobs: if: matrix.triple.target == 'x86_64-unknown-linux-gnu' && matrix.triple.container == '' shell: bash run: | + gzip ./manpage/btm.1 tar -C ./manpage -czvf manpage.tar.gz . mv manpage.tar.gz release/ @@ -319,11 +315,11 @@ jobs: command: build args: --release --verbose --features "battery" - - name: Move autocomplete to working directory + - name: Build autocompletion and manpage shell: bash run: | - mkdir completion - cp -r ./target/release/build/bottom-*/out/. completion + GENERATE=true cargo build + gzip ./manpage/btm.1 - name: Build Debian release run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2db1942f..564c053e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -144,15 +144,10 @@ jobs: args: --release --verbose --target=${{ matrix.triple.target }} --features "battery" use-cross: ${{ matrix.triple.cross }} - - name: Build autocompletion + - name: Build autocompletion and manpage shell: bash run: | - cargo run --manifest-path ./xtask/Cargo.toml -- completion completion - - - name: Build manpage - shell: bash - run: | - cargo run --manifest-path ./xtask/Cargo.toml -- manpage manpage + GENERATE=true cargo build - name: Bundle release and completion (Windows) if: matrix.triple.os == 'windows-2019' @@ -188,6 +183,7 @@ jobs: if: matrix.triple.target == 'x86_64-unknown-linux-gnu' && matrix.triple.container == '' shell: bash run: | + gzip ./manpage/btm.1 tar -C ./manpage -czvf manpage.tar.gz . mv manpage.tar.gz release/ @@ -313,11 +309,11 @@ jobs: command: build args: --release --verbose --features "battery" - - name: Move autocomplete to working directory + - name: Build autocompletion and manpage shell: bash run: | - mkdir completion - cp -r ./target/release/build/bottom-*/out/. completion + GENERATE=true cargo build + gzip ./manpage/btm.1 - name: Build Debian release run: | @@ -230,6 +230,8 @@ dependencies = [ "cargo-husky", "cfg-if", "clap", + "clap_complete", + "clap_mangen", "crossterm", "ctrlc", "dirs", @@ -325,6 +327,25 @@ dependencies = [ ] [[package]] +name = "clap_complete" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df6f3613c0a3cddfd78b41b10203eb322cb29b600cbdf808a7d3db95691b8e25" +dependencies = [ + "clap", +] + +[[package]] +name = "clap_mangen" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0649fb4156bbd7306896025005596033879a2051f9a3aa7416ab915df1f8fdac" +dependencies = [ + "clap", + "roff", +] + +[[package]] name = "concurrent-queue" version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1319,6 +1340,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" [[package]] +name = "roff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" + +[[package]] name = "rustc-demangle" version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -11,6 +11,7 @@ description = "A customizable cross-platform graphical process/system monitor fo documentation = "https://clementtsang.github.io/bottom/stable" readme = "README.md" default-run = "btm" +build = "build.rs" [[bin]] name = "btm" @@ -83,6 +84,10 @@ winapi = "0.3.9" assert_cmd = "2.0" predicates = "2.1" +[build-dependencies] +clap = { version = "3.1.6", features = ["default", "cargo", "wrap_help"] } +clap_complete = "3.1.1" +clap_mangen = "0.1.2" [package.metadata.deb] section = "utility" @@ -98,6 +103,11 @@ assets = [ "644", ], [ + "manpage/btm.1.gz", + "usr/share/man/man1/btm.1.gz", + "644", + ], + [ "completion/btm.bash", "usr/share/bash-completion/completions/btm", "644", diff --git a/build.rs b/build.rs new file mode 100644 index 00000000..fce34b48 --- /dev/null +++ b/build.rs @@ -0,0 +1,55 @@ +use clap_complete::{generate_to, shells::Shell}; +use std::{ + env, fs, + io::Result, + path::{Path, PathBuf}, +}; + +include!("src/clap.rs"); + +fn create_dir(dir: &Path) -> Result<()> { + let res = fs::create_dir_all(&dir); + match &res { + Ok(()) => {} + Err(err) => { + eprintln!( + "Failed to create a directory at location {:?}, encountered error {:?}. Aborting...", + dir, err + ); + } + } + + res +} + +fn main() -> Result<()> { + if env::var_os("GENERATE").is_some() { + // OUT_DIR is where extra build files are written to for Cargo. + let completion_out_dir = PathBuf::from("completion"); + let manpage_out_dir = PathBuf::from("manpage"); + + create_dir(&completion_out_dir)?; + create_dir(&manpage_out_dir)?; + + // Generate completions + let mut app = build_app(); + generate_to(Shell::Bash, &mut app, "btm", &completion_out_dir)?; + generate_to(Shell::Zsh, &mut app, "btm", &completion_out_dir)?; + generate_to(Shell::Fish, &mut app, "btm", &completion_out_dir)?; + generate_to(Shell::PowerShell, &mut app, "btm", &completion_out_dir)?; + generate_to(Shell::Elvish, &mut app, "btm", &completion_out_dir)?; + + // Generate manpage + let app = app.name("btm"); + let man = clap_mangen::Man::new(app); + let mut buffer: Vec<u8> = Default::default(); + man.render(&mut buffer)?; + std::fs::write(manpage_out_dir.join("btm.1"), buffer)?; + } + + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=./src/clap.rs"); + println!("cargo:rerun-if-env-changed=GENERATE"); + + Ok(()) +} diff --git a/src/clap.rs b/src/clap.rs index 282b79b2..d3c169d9 100644 --- a/src/clap.rs +++ b/src/clap.rs @@ -225,6 +225,7 @@ pub fn build_app() -> Command<'static> { If it doesn't exist, one is created.", ); + // TODO: Fix this, its broken in the manpage let color = Arg::new("color") .long("color") .takes_value(true) @@ -274,6 +275,7 @@ Defaults to \"default\". .help("Default time value for graphs in ms.") .long_help("Default time value for graphs in milliseconds. The minimum time is 30s (30000), and the default is 60s (60000)."); + // TODO: Fix this, its broken in the manpage let default_widget_count = Arg::new("default_widget_count") .long("default_widget_count") .takes_value(true) diff --git a/xtask/.gitignore b/xtask/.gitignore deleted file mode 100644 index 6558add1..00000000 --- a/xtask/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -# Generated by Cargo -# will have compiled files and executables -/target/ - -# These are backup files generated by rustfmt -**/*.rs.bk - -# Logging -*.log - -# Flamegraph stuff -rust-unmangle -*.svg -*.data -*.data.old - -# IntelliJ -.idea/ - -# Heaptrack files -*.zst - -# For testing -sample_configs/testing.toml - -# Wix -/wix/ - -# Cargo-deny -deny.toml - -# vscode -.vscode - -# mkdocs -site/ -docs/site
\ No newline at end of file diff --git a/xtask/Cargo.lock b/xtask/Cargo.lock deleted file mode 100644 index 5516c6e2..00000000 --- a/xtask/Cargo.lock +++ /dev/null @@ -1,194 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "atty" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" -dependencies = [ - "hermit-abi", - "libc", - "winapi", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "clap" -version = "3.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123" -dependencies = [ - "atty", - "bitflags", - "indexmap", - "lazy_static", - "os_str_bytes", - "strsim", - "termcolor", - "terminal_size", - "textwrap", -] - -[[package]] -name = "clap_complete" -version = "3.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6f3613c0a3cddfd78b41b10203eb322cb29b600cbdf808a7d3db95691b8e25" -dependencies = [ - "clap", -] - -[[package]] -name = "clap_mangen" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0649fb4156bbd7306896025005596033879a2051f9a3aa7416ab915df1f8fdac" -dependencies = [ - "clap", - "roff", -] - -[[package]] -name = "hashbrown" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" - -[[package]] -name = "hermit-abi" -version = "0.1.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" -dependencies = [ - "libc", -] - -[[package]] -name = "indexmap" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" -dependencies = [ - "autocfg", - "hashbrown", -] - -[[package]] -name = "lazy_static" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" - -[[package]] -name = "libc" -version = "0.2.119" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4" - -[[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "os_str_bytes" -version = "6.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64" -dependencies = [ - "memchr", -] - -[[package]] -name = "roff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b833d8d034ea094b1ea68aa6d5c740e0d04bad9d16568d08ba6f76823a114316" - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "termcolor" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" -dependencies = [ - "winapi-util", -] - -[[package]] -name = "terminal_size" -version = "0.1.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "633c1a546cee861a1a6d0dc69ebeca693bf4296661ba7852b9d21d159e0506df" -dependencies = [ - "libc", - "winapi", -] - -[[package]] -name = "textwrap" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb" -dependencies = [ - "terminal_size", -] - -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" -dependencies = [ - "winapi", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "xtask" -version = "0.1.0" -dependencies = [ - "clap", - "clap_complete", - "clap_mangen", -] diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml deleted file mode 100644 index ebc0b8d5..00000000 --- a/xtask/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "xtask" -version = "0.1.0" -edition = "2021" - -[dependencies] -clap = { version = "3.1.6", features = ["default", "cargo", "wrap_help"] } -clap_complete = "3.1.1" -clap_mangen = "0.1.2" diff --git a/xtask/src/main.rs b/xtask/src/main.rs deleted file mode 100644 index 1d56e17c..00000000 --- a/xtask/src/main.rs +++ /dev/null @@ -1,55 +0,0 @@ -use clap_complete::{generate_to, shells::Shell}; -use std::{env, fs, io::Result, path::PathBuf, process}; - -include!("../../src/clap.rs"); - -fn main() -> Result<()> { - let command = if let Some(command) = env::args().nth(1) { - command - } else { - eprintln!("A command was not given!"); - process::exit(1) - }; - - let out_dir = if let Some(out_dir) = env::args().nth(2) { - PathBuf::from(out_dir) - } else { - eprintln!("An output directory was not set!"); - process::exit(1) - }; - - if let Err(err) = fs::create_dir_all(&out_dir) { - eprintln!( - "Failed to create a directory at the output director location {:?}, encountered error {:?}. Aborting...", - out_dir, err - ); - process::exit(1) - } - - match command.as_str() { - "completion" => { - // Generate completions - let mut app = build_app(); - generate_to(Shell::Bash, &mut app, "btm", &out_dir)?; - generate_to(Shell::Zsh, &mut app, "btm", &out_dir)?; - generate_to(Shell::Fish, &mut app, "btm", &out_dir)?; - generate_to(Shell::PowerShell, &mut app, "btm", &out_dir)?; - generate_to(Shell::Elvish, &mut app, "btm", &out_dir)?; - } - "manpage" => { - // Generate manpage - let app = build_app(); - let man = clap_mangen::Man::new(app); - let mut buffer: Vec<u8> = Default::default(); - man.render(&mut buffer).unwrap(); - - std::fs::write(out_dir.join("btm.1"), buffer)?; - } - _ => { - eprintln!("Invalid command given: `{}`", command); - process::exit(1) - } - } - - Ok(()) -} |