gemini-commit-message

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 80268d3bc0c186940811460835705ac2577a6bb9
parent 125c873f0c48319b10fd88b339ce102b487e8448
Author: Minerva_juppiter <94231606+minerva-jupiter@users.noreply.github.com>
Date:   Sun,  7 Dec 2025 13:21:28 +0900

Fix no env panic (#3)

* chore: Update Rust dependencies and refactor main script

* refactor(api): Pass API key via X-Goog-Api-Key header instead of query parameter

* feat(config): Allow flexible API key provision via env or CLI arguments

* refactor(config)!: Remove dotenv and command-line API key parsing
Diffstat:
Msrc/main.rs | 42+++++++++++++++++++++++++++++++++++-------
1 file changed, 35 insertions(+), 7 deletions(-)

diff --git a/src/main.rs b/src/main.rs @@ -27,7 +27,7 @@ fn get_git_diff() -> Result<String, Box<dyn std::error::Error>> { #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { - let _ = dotenv().expect(".env file not fount"); + let _ = dotenv().ok(); let diff: String = match get_git_diff() { Ok(message) => message, Err(e) => { @@ -41,14 +41,42 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> { } let args: Vec<String> = env::args().collect(); - let api_key: String = if args.len() > 1 { - args[1].clone() + let mut api_key_arg: Option<String> = None; + let mut i = 1; + while i < args.len() { + let a = &args[i]; + if a == "--help" || a == "-h" { + println!("Usage:"); + println!(" Provide Gemini API key via one of:"); + println!(" - As first positional argument: <program> <API_KEY>"); + println!(" - Using --api-key=<KEY>"); + println!(" - Using -k <KEY>"); + println!(" Or set GEMINI_API_KEY in environment (or in a .env file)."); + return Ok(()); + } else if let Some(rest) = a.strip_prefix("--api-key=") { + api_key_arg = Some(rest.to_string()); + break; + } else if a == "-k" { + if i + 1 < args.len() { + api_key_arg = Some(args[i + 1].clone()); + } + break; + } else if !a.starts_with('-') { + api_key_arg = Some(a.clone()); + break; + } + i += 1; + } + + let api_key: String = if let Some(key) = api_key_arg { + key } else { match env::var("GEMINI_API_KEY") { Ok(api_key) => api_key, - Err(e) => { - println!("make sure setting api key {}", e); - + Err(_) => { + println!( + "No API key provided. Provide it via --api-key, -k, positional arg, or set GEMINI_API_KEY in environment (.env is optional)." + ); return Ok(()); } } @@ -144,7 +172,7 @@ async fn generate_commit_message( let response = client .post(url) - .header("X-Goog-Api-Key", api_key) // ここでヘッダとしてAPIキーを追加 + .header("X-Goog-Api-Key", api_key) .json(&payload) .send() .await?