add separate binary for Windows CLI
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "creddy", | ||||
|   "version": "0.2.1", | ||||
|   "version": "0.2.2", | ||||
|   "scripts": { | ||||
|     "dev": "vite", | ||||
|     "build": "vite build", | ||||
|   | ||||
							
								
								
									
										60
									
								
								src-tauri/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										60
									
								
								src-tauri/Cargo.lock
									
									
									
										generated
									
									
									
								
							| @@ -68,36 +68,6 @@ version = "1.0.71" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" | ||||
|  | ||||
| [[package]] | ||||
| name = "app" | ||||
| version = "0.2.1" | ||||
| dependencies = [ | ||||
|  "argon2", | ||||
|  "auto-launch", | ||||
|  "aws-config", | ||||
|  "aws-sdk-sts", | ||||
|  "aws-smithy-types", | ||||
|  "aws-types", | ||||
|  "chacha20poly1305", | ||||
|  "clap", | ||||
|  "dirs 5.0.1", | ||||
|  "is-terminal", | ||||
|  "netstat2", | ||||
|  "once_cell", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "sodiumoxide", | ||||
|  "sqlx", | ||||
|  "strum", | ||||
|  "strum_macros", | ||||
|  "sysinfo", | ||||
|  "tauri", | ||||
|  "tauri-build", | ||||
|  "tauri-plugin-single-instance", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "argon2" | ||||
| version = "0.5.0" | ||||
| @@ -975,6 +945,36 @@ dependencies = [ | ||||
|  "cfg-if", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "creddy" | ||||
| version = "0.2.2" | ||||
| dependencies = [ | ||||
|  "argon2", | ||||
|  "auto-launch", | ||||
|  "aws-config", | ||||
|  "aws-sdk-sts", | ||||
|  "aws-smithy-types", | ||||
|  "aws-types", | ||||
|  "chacha20poly1305", | ||||
|  "clap", | ||||
|  "dirs 5.0.1", | ||||
|  "is-terminal", | ||||
|  "netstat2", | ||||
|  "once_cell", | ||||
|  "serde", | ||||
|  "serde_json", | ||||
|  "sodiumoxide", | ||||
|  "sqlx", | ||||
|  "strum", | ||||
|  "strum_macros", | ||||
|  "sysinfo", | ||||
|  "tauri", | ||||
|  "tauri-build", | ||||
|  "tauri-plugin-single-instance", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
| ] | ||||
|  | ||||
| [[package]] | ||||
| name = "crossbeam-channel" | ||||
| version = "0.5.8" | ||||
|   | ||||
| @@ -1,14 +1,22 @@ | ||||
| [package] | ||||
| name = "app" | ||||
| version = "0.2.1" | ||||
| description = "A Tauri App" | ||||
| authors = ["you"] | ||||
| name = "creddy" | ||||
| version = "0.2.2" | ||||
| description = "A friendly AWS credentials manager" | ||||
| authors = ["Joseph Montanaro"] | ||||
| license = "" | ||||
| repository = "" | ||||
| default-run = "app" | ||||
| default-run = "creddy" | ||||
| edition = "2021" | ||||
| rust-version = "1.57" | ||||
|  | ||||
| [[bin]] | ||||
| name = "creddy_cli" | ||||
| path = "src/bin/creddy_cli.rs" | ||||
|  | ||||
| [[bin]] | ||||
| name = "creddy" | ||||
| path = "src/main.rs" | ||||
|  | ||||
| # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html | ||||
|  | ||||
| [build-dependencies] | ||||
|   | ||||
							
								
								
									
										22
									
								
								src-tauri/conf/cli.wxs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src-tauri/conf/cli.wxs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> | ||||
|     <Fragment> | ||||
|  | ||||
|         <DirectoryRef Id="INSTALLDIR"> | ||||
|             <!-- Create a subdirectory for the console binary so that we can add it to PATH --> | ||||
|             <Directory Id="BinDir" Name="bin"> | ||||
|                 <Component Id="CliBinary" Guid="b6358c8e-504f-41fd-b14b-38af821dcd04"> | ||||
|                     <!-- Same name as the main executable, so that it can be invoked as just "creddy" --> | ||||
|                     <File Id="Bin_Cli" Source="..\..\creddy_cli.exe" Name="creddy.exe" KeyPath="yes"/> | ||||
|                 </Component> | ||||
|             </Directory> | ||||
|         </DirectoryRef> | ||||
|  | ||||
|         <DirectoryRef Id="TARGETDIR"> | ||||
|             <Component Id="AddToPath" Guid="b5fdaf7e-94f2-4aad-9144-aa3a8edfa675"> | ||||
|                 <Environment Id="CreddyInstallDir" Action="set" Name="PATH" Part="last" Permanent="no" Value="[BinDir]" /> | ||||
|             </Component> | ||||
|         </DirectoryRef> | ||||
|  | ||||
|     </Fragment> | ||||
| </Wix> | ||||
							
								
								
									
										45
									
								
								src-tauri/src/bin/creddy_cli.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								src-tauri/src/bin/creddy_cli.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| // Windows isn't really amenable to having a single executable work as both a CLI and GUI app, | ||||
| // so we just have a second binary for CLI usage | ||||
| use creddy::{ | ||||
|     cli, | ||||
|     errors::CliError, | ||||
| }; | ||||
| use std::{ | ||||
|     env, | ||||
|     process::{self, Command}, | ||||
| }; | ||||
|  | ||||
|  | ||||
| fn main() { | ||||
|     let args = cli::parser().get_matches(); | ||||
|     if let Some(true) = args.get_one::<bool>("help") { | ||||
|         cli::parser().print_help().unwrap(); // if we can't print help we can't print an error | ||||
|         process::exit(0); | ||||
|     } | ||||
|  | ||||
|     let res = match args.subcommand() { | ||||
|         None | Some(("run", _)) => launch_gui(), | ||||
|         Some(("show", m)) => cli::show(m), | ||||
|         Some(("exec", m)) => cli::exec(m), | ||||
|         _ => unreachable!(), | ||||
|     }; | ||||
|  | ||||
|     if let Err(e) = res { | ||||
|         eprintln!("Error: {e}"); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| fn launch_gui() -> Result<(), CliError>  { | ||||
|     let mut path = env::current_exe()?; | ||||
|     path.pop(); // bin dir | ||||
|      | ||||
|     // binaries are colocated in dev, but not in production | ||||
|     #[cfg(not(debug_assertions))] | ||||
|     path.pop(); // install dir | ||||
|  | ||||
|     path.push("creddy.exe"); // exe in main install dir (aka gui exe) | ||||
|  | ||||
|     Command::new(path).spawn()?; | ||||
|     Ok(()) | ||||
| } | ||||
| @@ -228,6 +228,8 @@ pub enum CliError { | ||||
|     Request(#[from] RequestError), | ||||
|     #[error(transparent)] | ||||
|     Exec(#[from] ExecError), | ||||
|     #[error(transparent)] | ||||
|     Io(#[from] std::io::Error), | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
							
								
								
									
										10
									
								
								src-tauri/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src-tauri/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| pub mod app; | ||||
| pub mod cli; | ||||
| mod config; | ||||
| mod credentials; | ||||
| pub mod errors; | ||||
| mod clientinfo; | ||||
| mod ipc; | ||||
| mod state; | ||||
| mod server; | ||||
| mod tray; | ||||
| @@ -3,20 +3,11 @@ | ||||
|     windows_subsystem = "windows" | ||||
| )] | ||||
|  | ||||
|  | ||||
| mod app; | ||||
| mod cli; | ||||
| mod config; | ||||
| mod credentials; | ||||
| mod errors; | ||||
| mod clientinfo; | ||||
| mod ipc; | ||||
| mod state; | ||||
| mod server; | ||||
| mod tray; | ||||
|  | ||||
|  | ||||
| use crate::errors::ErrorPopup; | ||||
| use creddy::{ | ||||
|     app, | ||||
|     cli, | ||||
|     errors::ErrorPopup, | ||||
| }; | ||||
|  | ||||
|  | ||||
| fn main() { | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
|   }, | ||||
|   "package": { | ||||
|     "productName": "creddy", | ||||
|     "version": "0.2.1" | ||||
|     "version": "0.2.2" | ||||
|   }, | ||||
|   "tauri": { | ||||
|     "allowlist": { | ||||
| @@ -44,7 +44,11 @@ | ||||
|       "windows": { | ||||
|         "certificateThumbprint": null, | ||||
|         "digestAlgorithm": "sha256", | ||||
|         "timestampUrl": "" | ||||
|         "timestampUrl": "", | ||||
|         "wix": { | ||||
|           "fragmentPaths": ["conf/cli.wxs"], | ||||
|           "componentRefs": ["CliBinary", "AddToPath"] | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "security": { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user