From 5ab6977e99b312ee7ac7beed5ff79f273986c79b Mon Sep 17 00:00:00 2001 From: Priyansh Choudhary Date: Thu, 7 Mar 2024 02:04:36 +0530 Subject: [PATCH] chore: Use consatnts.rs instead of dotenv (#8) * Updated dotenv path * Removed dotenv * Added constants map * Added temporary functions for macos --- .env | 17 ---------- .github/workflows/build_and_release.yml | 2 -- Cargo.lock | 7 ----- Cargo.toml | 1 - src/commands/deactivate.rs | 10 ++++++ src/commands/install.rs | 5 +++ src/commands/uninstall.rs | 15 +++++++++ src/commands/usev.rs | 29 ++++++++++++++++- src/constants/mod.rs | 1 + src/constants/versions.rs | 41 +++++++++++++++++++++++++ src/main.rs | 2 +- src/utils/env_ops.rs | 30 ++++++++---------- 12 files changed, 113 insertions(+), 47 deletions(-) delete mode 100644 .env create mode 100644 src/constants/mod.rs create mode 100644 src/constants/versions.rs diff --git a/.env b/.env deleted file mode 100644 index 2442666..0000000 --- a/.env +++ /dev/null @@ -1,17 +0,0 @@ -AVAILABLE_VERSIONS=ZULU8,ZULU11,ZULU17,ZULU21 - -ZULU21_LINUX=https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz -ZULU21_WINDOWS=https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip?_gl=1*14dmzoc*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTExMi40NC4wLjA. -#ZULU21_MACOS= - -ZULU17_LINUX=https://cdn.azul.com/zulu/bin/zulu17.48.15-ca-jdk17.0.10-linux_x64.tar.gz -ZULU17_WINDOWS=https://cdn.azul.com/zulu/bin/zulu17.48.15-ca-jdk17.0.10-win_x64.zip?_gl=1*1nexba0*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTE0Ny45LjAuMA.. -#ZULU17_MACOS= - -ZULU11_LINUX=https://cdn.azul.com/zulu/bin/zulu11.70.15-ca-jdk11.0.22-linux_x64.tar.gz -ZULU11_WINDOWS=https://cdn.azul.com/zulu/bin/zulu11.70.15-ca-jdk11.0.22-win_x64.zip?_gl=1*2j7qzc*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTIwNS4yNS4wLjA. -#ZULU11_MACOS= - -ZULU8_LINUX=https://cdn.azul.com/zulu/bin/zulu8.76.0.17-ca-jdk8.0.402-linux_i686.tar.gz -ZULU8_WINDOWS=https://cdn.azul.com/zulu/bin/zulu8.76.0.17-ca-jdk8.0.402-win_x64.zip?_gl=1*i45ppb*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTIxMy4xNy4wLjA. -#ZULU8_MACOS= diff --git a/.github/workflows/build_and_release.yml b/.github/workflows/build_and_release.yml index fc85b11..2ec1e80 100644 --- a/.github/workflows/build_and_release.yml +++ b/.github/workflows/build_and_release.yml @@ -41,7 +41,6 @@ jobs: # make a release folder mkdir source - mv .env source/ mv target/release/jvem_amd64 source/ tar -czvf ${{ env.LINUX_ARTIFACT }} -C source/ . @@ -63,7 +62,6 @@ jobs: # make a release folder mkdir source - copy .env source/ copy target\release\jvem.exe source/ Compress-Archive -Path source\* -DestinationPath ${{ env.WINDOWS_ARTIFACT }} diff --git a/Cargo.lock b/Cargo.lock index ee6e648..6c44563 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -156,12 +156,6 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" -[[package]] -name = "dotenv" -version = "0.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" - [[package]] name = "gimli" version = "0.28.1" @@ -185,7 +179,6 @@ name = "jvem" version = "0.1.0" dependencies = [ "clap", - "dotenv", "lazy_static", "serde", "tokio", diff --git a/Cargo.toml b/Cargo.toml index 9288cfb..6f6b056 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,6 @@ edition = "2021" [dependencies] clap = { version = "4.5.1", features = ["derive"] } -dotenv = "0.15.0" lazy_static = "1.4.0" serde = { version = "1.0.197", features = ["serde_derive"] } tokio = { version = "1.36.0", features = ["full"] } diff --git a/src/commands/deactivate.rs b/src/commands/deactivate.rs index 9cede00..ad3d349 100644 --- a/src/commands/deactivate.rs +++ b/src/commands/deactivate.rs @@ -26,6 +26,16 @@ fn deactivate_util() { } } +#[cfg(target_os = "macos")] +fn deactivate_util() { + let output = run_command("rm", vec!["-rf", &format!("{}/.jvem/java", get_home_dir())]); + if output.status.success() { + println!("deactivation successful"); + } else { + println!("deactivation failed"); + } +} + pub fn deactivate() { let _ = deactivate_util(); } diff --git a/src/commands/install.rs b/src/commands/install.rs index 48e7ac5..5d0b46d 100644 --- a/src/commands/install.rs +++ b/src/commands/install.rs @@ -78,6 +78,11 @@ fn install_util(name: String, link: String) { } } +#[cfg(target_os = "macos")] +fn install_util(name: String, link: String) { + // Implement installation logic for macOS +} + pub fn install(name: String) { let res: Result> = get_download_link(name.clone(), std::env::consts::OS); match res { diff --git a/src/commands/uninstall.rs b/src/commands/uninstall.rs index 39da721..66c7159 100644 --- a/src/commands/uninstall.rs +++ b/src/commands/uninstall.rs @@ -29,6 +29,21 @@ fn uninstall_util(name: &str) { } } +#[cfg(target_os = "macos")] +fn uninstall_util(name: &str) { + // ToDo + + let output = run_command( + "rm", + vec!["-rf", &format!("{}", get_installation_dir(&name))], + ); + if output.status.success() { + println!("uninstall successful "); + } else { + println!("uninstall failed: maybe the mentioned jdk is not installed locally"); + } +} + pub fn uninstall(name: String) { let _ = uninstall_util(&name); } diff --git a/src/commands/usev.rs b/src/commands/usev.rs index 66b6b9a..7a95af4 100644 --- a/src/commands/usev.rs +++ b/src/commands/usev.rs @@ -32,7 +32,10 @@ async fn usev_util(name: String) { // remove the previously linked folder let _ = run_command( "powershell", - vec!["-Command", &format!("rm -r {}\\.jvem\\java", get_home_dir())], + vec![ + "-Command", + &format!("rm -r {}\\.jvem\\java", get_home_dir()), + ], ); let output = run_command( "powershell", @@ -81,6 +84,30 @@ pub async fn usev_util(name: String) { } } +#[cfg(target_os = "macos")] +pub async fn usev_util(name: String) { + // ToDo + let _ = run_command("rm", vec!["-rf", &format!("{}/.jvem/java", get_home_dir())]); + + let output = run_command( + "sh", + vec![ + "-c", + &format!( + "ln --symbolic {} {}/.jvem/java", + get_installation_dir(&name), + get_home_dir() + ), + ], + ); + + if output.status.success() { + println!("set jdk version successfully"); + } else { + println!("failed: {}", String::from_utf8_lossy(&output.stderr)) + } +} + pub async fn usev(name: String) { match check_jdk_exists(&name) { true => { diff --git a/src/constants/mod.rs b/src/constants/mod.rs new file mode 100644 index 0000000..36fa96e --- /dev/null +++ b/src/constants/mod.rs @@ -0,0 +1 @@ +pub mod versions; \ No newline at end of file diff --git a/src/constants/versions.rs b/src/constants/versions.rs new file mode 100644 index 0000000..efed3cc --- /dev/null +++ b/src/constants/versions.rs @@ -0,0 +1,41 @@ +pub mod constants { + pub const LINUX_ARTIFACT: &str = "jvem.tar.gz"; + pub const WINDOWS_ARTIFACT: &str = "jvem.zip"; + pub const AVAILABLE_VERSIONS: &str = "ZULU8,ZULU11,ZULU17,ZULU21"; + pub const ZULU21_LINUX: &str = + "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-linux_x64.tar.gz"; + pub const ZULU21_WINDOWS: &str = "https://cdn.azul.com/zulu/bin/zulu21.32.17-ca-jdk21.0.2-win_x64.zip?_gl=1*14dmzoc*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTExMi40NC4wLjA."; + // ZULU21_MACOS + + pub const ZULU17_LINUX: &str = + "https://cdn.azul.com/zulu/bin/zulu17.48.15-ca-jdk17.0.10-linux_x64.tar.gz"; + pub const ZULU17_WINDOWS: &str = "https://cdn.azul.com/zulu/bin/zulu17.48.15-ca-jdk17.0.10-win_x64.zip?_gl=1*1nexba0*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTE0Ny45LjAuMA.."; + // ZULU17_MACOS + + pub const ZULU11_LINUX: &str = + "https://cdn.azul.com/zulu/bin/zulu11.70.15-ca-jdk11.0.22-linux_x64.tar.gz"; + pub const ZULU11_WINDOWS: &str = "https://cdn.azul.com/zulu/bin/zulu11.70.15-ca-jdk11.0.22-win_x64.zip?_gl=1*2j7qzc*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTIwNS4yNS4wLjA."; + // ZULU11_MACOS + + pub const ZULU8_LINUX: &str = + "https://cdn.azul.com/zulu/bin/zulu8.76.0.17-ca-jdk8.0.402-linux_i686.tar.gz"; + pub const ZULU8_WINDOWS: &str ="https://cdn.azul.com/zulu/bin/zulu8.76.0.17-ca-jdk8.0.402-win_x64.zip?_gl=1*i45ppb*_ga*MTg0NTAyMjU0LjE3MDg3MDUwMzU.*_ga_42DEGWGYD5*MTcwODcwNTAzNS4xLjEuMTcwODcwNTIxMy4xNy4wLjA."; + // ZULU8_MACOS + + pub fn get_constant(key: &str) -> Option<&'static str> { + match key { + "LINUX_ARTIFACT" => Some(LINUX_ARTIFACT), + "WINDOWS_ARTIFACT" => Some(WINDOWS_ARTIFACT), + "AVAILABLE_VERSIONS" => Some(AVAILABLE_VERSIONS), + "ZULU21_LINUX" => Some(ZULU21_LINUX), + "ZULU21_WINDOWS" => Some(ZULU21_WINDOWS), + "ZULU17_LINUX" => Some(ZULU17_LINUX), + "ZULU17_WINDOWS" => Some(ZULU17_WINDOWS), + "ZULU11_LINUX" => Some(ZULU11_LINUX), + "ZULU11_WINDOWS" => Some(ZULU11_WINDOWS), + "ZULU8_LINUX" => Some(ZULU8_LINUX), + "ZULU8_WINDOWS" => Some(ZULU8_WINDOWS), + _ => None, + } + } +} diff --git a/src/main.rs b/src/main.rs index a6d6cf6..8800352 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,5 @@ pub mod commands; +pub mod constants; pub mod utils; use std::sync::{ @@ -73,7 +74,6 @@ async fn main() { // the below logic is used for ctrl+c handling // the idea here is to set a boolean atomic value, when program is running // on ctrl+c, the value is set to false and it stops the process - dotenv::dotenv().ok(); let running = Arc::new(AtomicBool::new(true)); let running_clone = Arc::clone(&running); diff --git a/src/utils/env_ops.rs b/src/utils/env_ops.rs index acf15b1..1610174 100644 --- a/src/utils/env_ops.rs +++ b/src/utils/env_ops.rs @@ -1,28 +1,22 @@ -use std::error::Error; +use crate::constants::versions::constants; pub fn read_versions() -> Result<(), Box> { - // Load environment variables from .env file - dotenv::dotenv().ok(); + let available_versions = constants::AVAILABLE_VERSIONS; + let versions: Vec<&str> = available_versions.split(',').collect(); - if let Ok(available_versions) = std::env::var("AVAILABLE_VERSIONS") { - let versions: Vec<&str> = available_versions.split(',').collect(); - - for version in versions { - println!("{}", version); - } + println!("Availaible Versions:"); + for version in versions { + println!("{}", version); } Ok(()) } -pub fn get_download_link(name: String, os: &str) -> Result> { - // Load environment variables from .env file - dotenv::dotenv().ok(); - - // Access the environment variable for the specified name +pub fn get_download_link(name: String, os: &str) -> Result> { let env_var_name = format!("{}_{}", name.to_uppercase(), os.to_uppercase()); - match std::env::var(&env_var_name) { - Ok(value) => Ok(value), - Err(_) => Err("Couldn't recognize OS or the specified JDK is not available".into()), + if let Some(value) = constants::get_constant(&env_var_name) { + Ok(value.to_string()) + } else { + Err("Couldn't recognize OS or the specified JDK is not available".into()) } -} \ No newline at end of file +}