From e2f5ec19f9f2c33106e817e7c3802d4d2645ede5 Mon Sep 17 00:00:00 2001 From: Mamun Date: Thu, 8 Feb 2024 06:10:50 +0600 Subject: [PATCH 1/4] Refactored and separated file format --- .env.example | 5 ++ Cargo.lock | 7 +++ Cargo.toml | 2 + lefthook.yml | 12 +++++ src/common.rs | 27 ++++++++++ src/{io_manager.rs => dotenv_handler.rs} | 63 +++++++++--------------- src/main.rs | 28 +++++++++-- src/utils.rs | 42 ++++++++++++++++ test.env | 2 + 9 files changed, 144 insertions(+), 44 deletions(-) create mode 100644 lefthook.yml create mode 100644 src/common.rs rename src/{io_manager.rs => dotenv_handler.rs} (74%) create mode 100644 src/utils.rs diff --git a/.env.example b/.env.example index e69de29..50d500b 100644 --- a/.env.example +++ b/.env.example @@ -0,0 +1,5 @@ +HELLO=string +TAYLOR=string +AGE=int +SCORE=float +ACTIVE=bool diff --git a/Cargo.lock b/Cargo.lock index 8eeb4d4..286d0b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -50,6 +50,12 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "anyhow" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" + [[package]] name = "clap" version = "4.4.14" @@ -110,6 +116,7 @@ dependencies = [ name = "envy" version = "0.3.0" dependencies = [ + "anyhow", "clap", "colored", "indexmap", diff --git a/Cargo.toml b/Cargo.toml index 196fb8f..52ec9a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] + clap = { version = "4.4.14", features = ["derive"] } colored = "2.1.0" indexmap = "2.1.0" +anyhow = "1.0.79" diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..1a89b3d --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,12 @@ +pre-commit: + commands: + format: + glob: "*.rs" + run: cargo fmt + + check: + run: "cargo check" + + test: + run: "cargo test" + diff --git a/src/common.rs b/src/common.rs new file mode 100644 index 0000000..ca6bb2d --- /dev/null +++ b/src/common.rs @@ -0,0 +1,27 @@ +#[derive(Debug, PartialEq)] +pub enum SupportedFormats { + ENV, + TOML, + YAML, + INVALID, +} + +impl SupportedFormats { + pub fn to_string(&self) -> String { + match self { + SupportedFormats::ENV => "env", + SupportedFormats::TOML => "toml", + SupportedFormats::YAML => "yaml", + _ => "invalid", + } + .to_string() + } + + pub fn supported_formats() -> Vec { + return vec![ + SupportedFormats::ENV.to_string(), + SupportedFormats::TOML.to_string(), + SupportedFormats::YAML.to_string(), + ]; + } +} diff --git a/src/io_manager.rs b/src/dotenv_handler.rs similarity index 74% rename from src/io_manager.rs rename to src/dotenv_handler.rs index f6915f0..7737c58 100644 --- a/src/io_manager.rs +++ b/src/dotenv_handler.rs @@ -1,32 +1,13 @@ -use colored::*; use indexmap::IndexMap; use std::fs::File; use std::io::prelude::*; use std::io::{BufRead, BufReader, Error}; -static SUPPORTED_FORMATS: [&str; 1] = ["env"]; +use anyhow::Result; #[allow(dead_code)] -fn read_dot_env(path: &str) -> Result, Error> { +fn read_dotenv(path: &str) -> Result, Error> { let mut env = IndexMap::new(); - if std::path::Path::new(path).exists() == false { - println!("{} {}", "❌ Error:".red(), "File not found".bold()); - std::process::exit(1); - } - let format = path.split('.').last().unwrap(); - if SUPPORTED_FORMATS.contains(&format) == false { - println!( - "{} {}", - "❌ Error:".red(), - "Unsupported file format".bold() - ); - println!( - "{} {}", - "Supported formats:".bold(), - SUPPORTED_FORMATS.join(", ").bold() - ); - std::process::exit(1); - } let file = File::open(path)?; let reader = BufReader::new(file); for line in reader.lines() { @@ -65,17 +46,6 @@ fn get_type(value: &str) -> &str { } } -#[allow(dead_code)] -fn generate_dot_env_string(env: IndexMap) -> String { - let mut env_string = String::new(); - for (key, val) in env { - let val_type = get_type(&val); - env_string.push_str(&format!("{}={}\n", key, val_type)); - } - env_string = env_string.strip_suffix("\n").unwrap().to_string(); - env_string -} - fn remove_comments(text: &str) -> String { let mut text = text.to_string(); // From: # This is a comment, To: "" @@ -86,9 +56,20 @@ fn remove_comments(text: &str) -> String { text } -pub fn generate_dot_env_file(dry_run: bool, path: &str) -> Result<(), Error> { - let env = read_dot_env(path)?; - let mut env_string = generate_dot_env_string(env); +#[allow(dead_code)] +fn generate_dotenv_string(env: IndexMap) -> Result { + let mut env_string = String::new(); + for (key, val) in env { + let val_type = get_type(&val); + env_string.push_str(&format!("{}={}\n", key, val_type)); + } + env_string = env_string.strip_suffix("\n").unwrap().to_string(); + Ok(env_string) +} + +pub fn generate_dotenv_file(dry_run: bool, path: &str) -> Result<()> { + let env = read_dotenv(path)?; + let mut env_string = generate_dotenv_string(env)?; env_string.push_str("\n"); let mut file = File::create(".env.example")?; if dry_run { @@ -105,7 +86,7 @@ mod tests { #[test] fn test_read_env() { - let env = read_dot_env("test.env").unwrap(); + let env = read_dotenv("test.env").unwrap(); assert_eq!(env.get("HELLO").unwrap(), "ADELE"); assert_eq!(env.get("TAYLOR").unwrap(), "SWIFT"); } @@ -123,11 +104,11 @@ mod tests { } #[test] - fn test_generate_dot_env_string() { + fn test_generate_dotenv_string() { let mut env = IndexMap::new(); env.insert("HELLO".to_string(), "ADELE".to_string()); env.insert("WORLD".to_string(), "21".to_string()); - let env_string = generate_dot_env_string(env); + let env_string = generate_dotenv_string(env).unwrap(); assert_eq!(env_string, "HELLO=string\nWORLD=int"); } @@ -145,14 +126,14 @@ mod tests { } #[test] - fn test_generate_dot_env_file() { - generate_dot_env_file(false, "test.env").unwrap(); + fn test_generate_dotenv_file() { + generate_dotenv_file(false, "test.env").unwrap(); let mut file = File::open(".env.example").unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); assert_eq!( contents, - "HELLO=string\nTAYLOR=string\nAGE=int\nSCORE=float\nACTIVE=bool" + "HELLO=string\nTAYLOR=string\nAGE=int\nSCORE=float\nACTIVE=bool\n" ); } } diff --git a/src/main.rs b/src/main.rs index c3d03dd..ce275c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,13 +1,35 @@ -mod io_manager; +mod common; +mod dotenv_handler; +mod utils; use clap::{ArgAction, Command}; use colored::*; -use io_manager::generate_dot_env_file; +use common::SupportedFormats; +use dotenv_handler::generate_dotenv_file; +use utils::validate_file; fn generate(val: &clap::ArgMatches) { let path = val.get_one::("path").unwrap(); + let format = validate_file(&path); let dry_run: bool = val.get_flag("dry-run"); - generate_dot_env_file(dry_run, &path).unwrap(); + match format { + SupportedFormats::ENV => { + let _ = generate_dotenv_file(dry_run, &path); + } + _ => { + println!( + "{} {}", + "❌ Error:".red(), + "Unsupported file format".bold() + ); + println!( + "{} {}", + "Supported formats:".bold(), + SupportedFormats::supported_formats().join(", ").bold() + ); + std::process::exit(1); + } + } if !dry_run { println!( "{} {}", diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..09cf27e --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,42 @@ +use crate::common::SupportedFormats; +use colored::*; + +fn _extract_file_format(path: &str) -> SupportedFormats { + let file_extension = path.split('.').last().unwrap(); + match file_extension { + "env" => SupportedFormats::ENV, + "toml" => SupportedFormats::TOML, + "yaml" => SupportedFormats::YAML, + _ => SupportedFormats::INVALID, + } +} + +fn _check_file_format(path: &str) -> SupportedFormats { + let format = _extract_file_format(path); + if format == SupportedFormats::INVALID { + println!( + "{} {}", + "❌ Error:".red(), + "Unsupported file format".bold() + ); + println!( + "{} {}", + "Supported formats:".bold(), + SupportedFormats::supported_formats().join(", ").bold() + ); + std::process::exit(1); + } + return format; +} + +fn _check_path_exists(path: &str) { + if std::path::Path::new(path).exists() == false { + println!("{} {}", "❌ Error:".red(), "File not found".bold()); + std::process::exit(1); + } +} + +pub fn validate_file(path: &str) -> SupportedFormats { + _check_path_exists(path); + _check_file_format(path) +} diff --git a/test.env b/test.env index 5667fe0..ea438dd 100644 --- a/test.env +++ b/test.env @@ -7,3 +7,5 @@ AGE=25 ACTIVE =true # + + \ No newline at end of file From afcb3654c6c9d2896787c9265cd45a8fcb509394 Mon Sep 17 00:00:00 2001 From: Mamun Date: Thu, 8 Feb 2024 06:49:44 +0600 Subject: [PATCH 2/4] Added CLI test and version --- Cargo.lock | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++- Cargo.toml | 2 +- src/main.rs | 7 ++- tests/cmd.rs | 24 ++++++++++ 4 files changed, 151 insertions(+), 5 deletions(-) create mode 100644 tests/cmd.rs diff --git a/Cargo.lock b/Cargo.lock index 286d0b4..83ac51d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", @@ -56,6 +56,32 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "assert_cmd" +version = "2.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00ad3f3a942eee60335ab4342358c161ee296829e0d16ff42fc1d6cb07815467" +dependencies = [ + "anstyle", + "bstr", + "doc-comment", + "predicates", + "predicates-core", + "predicates-tree", + "wait-timeout", +] + +[[package]] +name = "bstr" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "clap" version = "4.4.14" @@ -112,11 +138,24 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "difflib" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + [[package]] name = "envy" version = "0.3.0" dependencies = [ "anyhow", + "assert_cmd", "clap", "colored", "indexmap", @@ -156,6 +195,45 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "predicates" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b87bfd4605926cdfefc1c3b5f8fe560e3feca9d5552cf68c466d3d8236c7e8" +dependencies = [ + "anstyle", + "difflib", + "predicates-core", +] + +[[package]] +name = "predicates-core" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" + +[[package]] +name = "predicates-tree" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +dependencies = [ + "predicates-core", + "termtree", +] + [[package]] name = "proc-macro2" version = "1.0.76" @@ -174,6 +252,32 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "regex-automata" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" + +[[package]] +name = "serde" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.196" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "strsim" version = "0.10.0" @@ -191,6 +295,12 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "termtree" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" + [[package]] name = "unicode-ident" version = "1.0.12" @@ -203,6 +313,15 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" +[[package]] +name = "wait-timeout" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f200f5b12eb75f8c1ed65abd4b2db8a6e1b138a20de009dacee265a2498f3f6" +dependencies = [ + "libc", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/Cargo.toml b/Cargo.toml index 52ec9a5..3393056 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,6 @@ name = "envy" version = "0.3.0" edition = "2021" - # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] @@ -11,3 +10,4 @@ clap = { version = "4.4.14", features = ["derive"] } colored = "2.1.0" indexmap = "2.1.0" anyhow = "1.0.79" +assert_cmd = "2.0.13" diff --git a/src/main.rs b/src/main.rs index ce275c5..7f0068a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -40,9 +40,12 @@ fn generate(val: &clap::ArgMatches) { } fn main() { - let mut cmd = Command::new("envy").subcommand_required(true); + let version = env!("CARGO_PKG_VERSION"); + let mut cmd = Command::new("envy") + .version(version) + .arg_required_else_help(true); let sub_generate = Command::new("generate") - .about("Generate a new .env file") + .about("Generate a new masked config file") .arg( clap::Arg::new("path") .help("Path to the .env file to generate") diff --git a/tests/cmd.rs b/tests/cmd.rs new file mode 100644 index 0000000..1b920c7 --- /dev/null +++ b/tests/cmd.rs @@ -0,0 +1,24 @@ +use assert_cmd::Command; + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_generate() { + let mut cmd = Command::cargo_bin("envy").unwrap(); + cmd.arg("generate").arg("test.env").assert().success(); + } + + #[test] + fn test_help() { + let mut cmd = Command::cargo_bin("envy").unwrap(); + cmd.arg("--help").assert().success(); + } + + #[test] + fn test_args_required_else_help() { + let mut cmd = Command::cargo_bin("envy").unwrap(); + cmd.assert().failure(); + } +} From c0c394399644602c6f388164bd2597a8bc88ac6e Mon Sep 17 00:00:00 2001 From: Mamun Date: Thu, 8 Feb 2024 07:57:26 +0600 Subject: [PATCH 3/4] Added toml support --- Cargo.lock | 53 ++++++++++++++++++++ Cargo.toml | 1 + example.toml | 0 src/dotenv_handler.rs | 11 ++-- src/main.rs | 36 ++++++++++--- src/toml_handler.rs | 78 +++++++++++++++++++++++++++++ tests/cmd.rs | 15 +++++- test.env => tests/fixtures/test.env | 0 tests/fixtures/test.toml | 51 +++++++++++++++++++ 9 files changed, 231 insertions(+), 14 deletions(-) create mode 100644 example.toml create mode 100644 src/toml_handler.rs rename test.env => tests/fixtures/test.env (100%) create mode 100644 tests/fixtures/test.toml diff --git a/Cargo.lock b/Cargo.lock index 83ac51d..7b64d90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -159,6 +159,7 @@ dependencies = [ "clap", "colored", "indexmap", + "toml", ] [[package]] @@ -278,6 +279,15 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_spanned" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +dependencies = [ + "serde", +] + [[package]] name = "strsim" version = "0.10.0" @@ -301,6 +311,40 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +[[package]] +name = "toml" +version = "0.8.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a9aad4a3066010876e8dcf5a8a06e70a558751117a145c6ce2b82c2e2054290" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c9ffdf896f8daaabf9b66ba8e77ea1ed5ed0f72821b398aba62352e95062951" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + [[package]] name = "unicode-ident" version = "1.0.12" @@ -453,3 +497,12 @@ name = "windows_x86_64_msvc" version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5389a154b01683d28c77f8f68f49dea75f0a4da32557a58f68ee51ebba472d29" +dependencies = [ + "memchr", +] diff --git a/Cargo.toml b/Cargo.toml index 3393056..e873020 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,3 +11,4 @@ colored = "2.1.0" indexmap = "2.1.0" anyhow = "1.0.79" assert_cmd = "2.0.13" +toml = "0.8.10" diff --git a/example.toml b/example.toml new file mode 100644 index 0000000..e69de29 diff --git a/src/dotenv_handler.rs b/src/dotenv_handler.rs index 7737c58..43c79dc 100644 --- a/src/dotenv_handler.rs +++ b/src/dotenv_handler.rs @@ -48,7 +48,6 @@ fn get_type(value: &str) -> &str { fn remove_comments(text: &str) -> String { let mut text = text.to_string(); - // From: # This is a comment, To: "" let hash_index = text.find('#').unwrap_or(text.len()); let last_index = text.len(); text.replace_range(hash_index..last_index, ""); @@ -67,17 +66,17 @@ fn generate_dotenv_string(env: IndexMap) -> Result { Ok(env_string) } -pub fn generate_dotenv_file(dry_run: bool, path: &str) -> Result<()> { +pub fn generate_dotenv_file(dry_run: bool, path: &str) -> Result { let env = read_dotenv(path)?; let mut env_string = generate_dotenv_string(env)?; env_string.push_str("\n"); let mut file = File::create(".env.example")?; if dry_run { println!("{}", env_string.strip_suffix("\n").unwrap()); - return Ok(()); + return Ok(("").to_string()); } file.write_all(env_string.as_bytes())?; - Ok(()) + Ok(".env.example".to_string()) } #[cfg(test)] @@ -86,7 +85,7 @@ mod tests { #[test] fn test_read_env() { - let env = read_dotenv("test.env").unwrap(); + let env = read_dotenv("tests/fixtures/test.env").unwrap(); assert_eq!(env.get("HELLO").unwrap(), "ADELE"); assert_eq!(env.get("TAYLOR").unwrap(), "SWIFT"); } @@ -127,7 +126,7 @@ mod tests { #[test] fn test_generate_dotenv_file() { - generate_dotenv_file(false, "test.env").unwrap(); + generate_dotenv_file(false, "tests/fixtures/test.env").unwrap(); let mut file = File::open(".env.example").unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); diff --git a/src/main.rs b/src/main.rs index 7f0068a..a960545 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,20 +1,36 @@ mod common; mod dotenv_handler; +mod toml_handler; mod utils; use clap::{ArgAction, Command}; use colored::*; use common::SupportedFormats; use dotenv_handler::generate_dotenv_file; +use toml_handler::generate_toml_file; use utils::validate_file; -fn generate(val: &clap::ArgMatches) { +use anyhow::Result; + +fn generate(val: &clap::ArgMatches) -> Result<()> { let path = val.get_one::("path").unwrap(); - let format = validate_file(&path); + let file_format = validate_file(&path); let dry_run: bool = val.get_flag("dry-run"); - match format { + let output_name: String; + match file_format { SupportedFormats::ENV => { - let _ = generate_dotenv_file(dry_run, &path); + output_name = generate_dotenv_file(dry_run, &path)?; + } + SupportedFormats::TOML => { + output_name = generate_toml_file(dry_run, &path)?; + } + SupportedFormats::YAML => { + println!( + "{} {}", + "❌ Error:".red(), + "YAML file format is not supported yet".bold() + ); + std::process::exit(1); } _ => { println!( @@ -34,9 +50,10 @@ fn generate(val: &clap::ArgMatches) { println!( "{} {}", "✨ Successfully generated".green(), - ".env.example".bold() + format!("{} file", output_name).bold() ); } + Ok(()) } fn main() { @@ -48,7 +65,7 @@ fn main() { .about("Generate a new masked config file") .arg( clap::Arg::new("path") - .help("Path to the .env file to generate") + .help("Path to the config file") .required(true) .action(ArgAction::Set), ) @@ -60,7 +77,12 @@ fn main() { cmd = cmd.subcommand(sub_generate); let matches = cmd.get_matches(); match matches.subcommand() { - Some(("generate", val)) => generate(val), + Some(("generate", val)) => { + if let Err(e) = generate(val) { + println!("{} {}", "❌ Error:".red(), e); + std::process::exit(1); + } + } _ => println!("No subcommand"), } } diff --git a/src/toml_handler.rs b/src/toml_handler.rs new file mode 100644 index 0000000..cb9b1d1 --- /dev/null +++ b/src/toml_handler.rs @@ -0,0 +1,78 @@ +use anyhow::Result; +use std::fs::File; +use std::io::prelude::*; +use std::io::{BufRead, BufReader}; +use toml::Value; + +#[allow(dead_code)] +fn read_toml(path: &str) -> Result { + let file = File::open(path)?; + let reader = BufReader::new(file); + let value: Value = toml::from_str( + &reader + .lines() + .collect::, _>>()? + .join("\n"), + ) + .unwrap(); + return Ok(value); +} + +#[allow(dead_code)] +fn replace_leaves(value: &mut Value) { + match value { + Value::Table(table) => { + for (_, val) in table { + replace_leaves(val); + } + } + Value::Array(array) => { + for val in array { + replace_leaves(val); + } + } + Value::String(_) => { + *value = Value::String("string".to_string()); + } + Value::Integer(_) => { + *value = Value::Integer(0); + } + Value::Float(_) => { + *value = Value::Float(0.0); + } + Value::Boolean(_) => { + *value = Value::Boolean(false); + } + _ => {} + } +} + +#[allow(dead_code)] +pub fn generate_toml_file(dry_run: bool, path: &str) -> Result { + let value = read_toml(path)?; + let mut value = value.clone(); + replace_leaves(&mut value); + let mut file = File::create("example.toml")?; + if dry_run { + println!("{}", value); + return Ok(("").to_string()); + } + file.write_all(toml::to_string(&value)?.as_bytes())?; + + Ok("example.toml".to_string()) +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_read_toml() { + read_toml("tests/fixtures/test.toml").unwrap(); + } + + #[test] + fn test_generate_toml_file() { + generate_toml_file(false, "tests/fixtures/test.toml").unwrap(); + } +} diff --git a/tests/cmd.rs b/tests/cmd.rs index 1b920c7..ec19cab 100644 --- a/tests/cmd.rs +++ b/tests/cmd.rs @@ -7,7 +7,20 @@ mod tests { #[test] fn test_generate() { let mut cmd = Command::cargo_bin("envy").unwrap(); - cmd.arg("generate").arg("test.env").assert().success(); + cmd.arg("generate") + .arg("tests/fixtures/test.env") + .assert() + .success(); + } + + #[test] + fn test_generate_dry_run() { + let mut cmd = Command::cargo_bin("envy").unwrap(); + cmd.arg("generate") + .arg("tests/fixtures/test.toml") + .arg("--dry-run") + .assert() + .success(); } #[test] diff --git a/test.env b/tests/fixtures/test.env similarity index 100% rename from test.env rename to tests/fixtures/test.env diff --git a/tests/fixtures/test.toml b/tests/fixtures/test.toml new file mode 100644 index 0000000..bf2b1ef --- /dev/null +++ b/tests/fixtures/test.toml @@ -0,0 +1,51 @@ +# Example TOML configuration file for a web application + +title = "WebApp Configuration" + +[database] +# Database configuration +server = "192.168.1.1" +ports = [8001, 8001, 8002] +connection_max = 5000 +enabled = true +[database.credentials] +username = "dbuser" +password = "dbpassword" + +[server] +# Server configuration +ip = "192.168.1.2" +hostname = "example.com" +environment = "production" +[server.logging] +level = "info" +file = "logs/server.log" + +[application] +# Application specific configuration +version = "1.0.0" +services = ["web", "database", "cache"] +[data] +# Complex data example +clients = [{ id = 1, name = "Client A" }, { id = 2, name = "Client B" }] +[[products]] +name = "Product 1" +price = 10.0 +[[products]] +name = "Product 2" +price = 20.0 + +[features] +# Feature toggles +feature_x = true +feature_y = false +feature_z = false + +[metrics] +# Metrics for monitoring +[[metrics.histograms]] +name = "request_duration_ms" +buckets = [0.1, 0.3, 1.2, 5.0] +[[metrics.counters]] +name = "http_requests_total" +labels = ["method", "endpoint"] From 8011b3695309ee165bb693935c21141c93acb018 Mon Sep 17 00:00:00 2001 From: Mamun Date: Thu, 8 Feb 2024 08:31:19 +0600 Subject: [PATCH 4/4] Bumped version to 0.4.0 Changed package name Added CI pipeline successfully Added CD pipeline successfully --- .github/workflows/cd.yaml | 21 +++++++++++++++ .github/workflows/ci.yaml | 25 ++++++++++++++++++ Cargo.lock | 4 +-- Cargo.toml | 11 +++++--- README.md | 31 +++++++++++----------- docs/example.gif | Bin 0 -> 114798 bytes example.toml | 53 ++++++++++++++++++++++++++++++++++++++ src/toml_handler.rs | 2 +- 8 files changed, 126 insertions(+), 21 deletions(-) create mode 100644 .github/workflows/cd.yaml create mode 100644 .github/workflows/ci.yaml create mode 100644 docs/example.gif diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 0000000..7738884 --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,21 @@ +name: CD + +on: + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} + +jobs: + publish: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: katyo/publish-crates@v2 + with: + registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }} diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..31fcabb --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,25 @@ +name: CI + +on: + push: + branches: ["master"] + pull_request: + branches: ["master"] + workflow_dispatch: + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - uses: actions-rs/cargo@v1 + with: + command: build + args: --release --all-features diff --git a/Cargo.lock b/Cargo.lock index 7b64d90..e6cd278 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -151,8 +151,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "envy" -version = "0.3.0" +name = "envy-mask" +version = "0.4.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index e873020..ac197e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,8 +1,13 @@ [package] -name = "envy" -version = "0.3.0" +name = "envy-mask" +version = "0.4.0" edition = "2021" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +authors = ["Mamun "] + +[[bin]] +name = "envy" +path = "src/main.rs" + [dependencies] diff --git a/README.md b/README.md index 8ed00d3..0bce104 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,16 @@ -# envy - A `.env` Example Generator +# envy - A Config File Example Generator -This project is a Rust-based tool that generates `.env` example files from existing `.env` files. It's useful for creating template environment files without exposing sensitive information. +--- -## Features +![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/mdmmn378/envy-rs/ci.yaml) -- Reads `.env` files and generates `.env.example` files. -- Supports `.env` file format. -- Removes comments and cleans up the text in the `.env` files. +Envy is a tool that generates example configuration files from your existing `.env` or `.toml` files. It masks sensitive information and helps you maintain up-to-date example configuration files for your projects. + +![Example](./docs/example.gif) ## Installation -Install the binary with the following command - +Install the binary with the following command: ```sh cargo install --path . @@ -18,13 +18,19 @@ cargo install --path . ## Usage -The main command for the tool is `generate`, which requires the path to the `.env` file as an argument. +The main command for the tool is `generate`, which requires the path to the `.env` or `.toml` file as an argument. ```sh envy generate path/to/.env ``` -This will generate a `.env.example` file in the same directory as the `.env` file. +or + +```sh +envy generate path/to/config.toml +``` + +This will generate a `.env.example` or `example.toml` file in the current directory. ## Development @@ -48,9 +54,4 @@ Pull requests are welcome. For major changes, please open an issue first to disc ## License -[MIT](https://choosealicense.com/licenses/mit/) - -``` - -Please replace the license link with the actual link to your license file if you're not using the MIT license. -``` +[MIT](MIT-LICENSE.txt) diff --git a/docs/example.gif b/docs/example.gif new file mode 100644 index 0000000000000000000000000000000000000000..9164b876000b87a6b9accad2f9492e62062d776c GIT binary patch literal 114798 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

D8nI2TcM#OIcDXYimEb~Fr7)ggB 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 ba`L|eWJB%GWdXAP8D#wzUd8{ZQ~mbu@Ve>l literal 0 HcmV?d00001 diff --git a/example.toml b/example.toml index e69de29..51a45fc 100644 --- a/example.toml +++ b/example.toml @@ -0,0 +1,53 @@ +title = "string" + +[[products]] +name = "string" +price = 0.0 + +[[products]] +name = "string" +price = 0.0 + +[application] +services = ["string", "string", "string"] +version = "string" + +[[data.clients]] +id = 0 +name = "string" + +[[data.clients]] +id = 0 +name = "string" + +[database] +connection_max = 0 +enabled = false +ports = [0, 0, 0] +server = "string" + +[database.credentials] +password = "string" +username = "string" + +[features] +feature_x = false +feature_y = false +feature_z = false + +[[metrics.counters]] +labels = ["string", "string"] +name = "string" + +[[metrics.histograms]] +buckets = [0.0, 0.0, 0.0, 0.0] +name = "string" + +[server] +environment = "string" +hostname = "string" +ip = "string" + +[server.logging] +file = "string" +level = "string" diff --git a/src/toml_handler.rs b/src/toml_handler.rs index cb9b1d1..87e23f1 100644 --- a/src/toml_handler.rs +++ b/src/toml_handler.rs @@ -52,11 +52,11 @@ pub fn generate_toml_file(dry_run: bool, path: &str) -> Result { let value = read_toml(path)?; let mut value = value.clone(); replace_leaves(&mut value); - let mut file = File::create("example.toml")?; if dry_run { println!("{}", value); return Ok(("").to_string()); } + let mut file = File::create("example.toml")?; file.write_all(toml::to_string(&value)?.as_bytes())?; Ok("example.toml".to_string())