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:
| M | src/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?