feat: remove -o env from search command
Some checks failed
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 3s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 1m58s
Secrets CLI - Build & Release / Build (macOS aarch64 + x86_64) (push) Successful in 1m1s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 1m2s
Secrets CLI - Build & Release / 发布草稿 Release (push) Has been cancelled
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
Some checks failed
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 3s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 1m58s
Secrets CLI - Build & Release / Build (macOS aarch64 + x86_64) (push) Successful in 1m1s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 1m2s
Secrets CLI - Build & Release / 发布草稿 Release (push) Has been cancelled
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
- Remove OutputMode::Env from output.rs - Remove env output branch and shell_quote from search.rs - Update docs (AGENTS.md, README.md, main.rs help) Bump version to 0.7.5 Made-with: Cursor
This commit is contained in:
@@ -153,7 +153,6 @@ secrets init # 提示输入主密码,Argon2id 派生主密钥后存入 OS
|
|||||||
- TTY(终端直接运行)→ 默认 `text`
|
- TTY(终端直接运行)→ 默认 `text`
|
||||||
- 非 TTY(管道/重定向/AI 调用)→ 自动 `json-compact`
|
- 非 TTY(管道/重定向/AI 调用)→ 自动 `json-compact`
|
||||||
- 显式 `-o json` → 美化 JSON
|
- 显式 `-o json` → 美化 JSON
|
||||||
- 显式 `-o env` → KEY=VALUE(可 source)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -182,7 +181,7 @@ secrets init
|
|||||||
# --limit 20 | 50(默认 50)
|
# --limit 20 | 50(默认 50)
|
||||||
# --offset 0 | 10 | 20(分页偏移)
|
# --offset 0 | 10 | 20(分页偏移)
|
||||||
# --sort name(默认)| updated | created
|
# --sort name(默认)| updated | created
|
||||||
# -o / --output text | json | json-compact | env
|
# -o / --output text | json | json-compact
|
||||||
|
|
||||||
# 发现概览(起步推荐)
|
# 发现概览(起步推荐)
|
||||||
secrets search --summary --limit 20
|
secrets search --summary --limit 20
|
||||||
@@ -222,10 +221,6 @@ secrets search -n refining --summary --limit 10 --offset 10
|
|||||||
|
|
||||||
# 管道 / AI 调用(非 TTY 自动 json-compact)
|
# 管道 / AI 调用(非 TTY 自动 json-compact)
|
||||||
secrets search -n refining --kind service | jq '.[].name'
|
secrets search -n refining --kind service | jq '.[].name'
|
||||||
|
|
||||||
# 导出 metadata 为 env 文件(单条记录)
|
|
||||||
secrets search -n refining --kind service --name gitea -o env \
|
|
||||||
> ~/.config/gitea/config.env
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -1836,7 +1836,7 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "secrets"
|
name = "secrets"
|
||||||
version = "0.7.4"
|
version = "0.7.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aes-gcm",
|
"aes-gcm",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "secrets"
|
name = "secrets"
|
||||||
version = "0.7.4"
|
version = "0.7.5"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ secrets run -n refining --kind service --name gitea -- printenv
|
|||||||
| 场景 | 推荐命令 |
|
| 场景 | 推荐命令 |
|
||||||
|------|----------|
|
|------|----------|
|
||||||
| AI 解析 / 管道处理 | `-o json` 或 `-o json-compact` |
|
| AI 解析 / 管道处理 | `-o json` 或 `-o json-compact` |
|
||||||
| 写入 metadata `.env` 文件 | `-o env` |
|
|
||||||
| 注入 secrets 到环境变量 | `inject` / `run` |
|
| 注入 secrets 到环境变量 | `inject` / `run` |
|
||||||
| 人类查看 | 默认 `text`(TTY 下自动启用) |
|
| 人类查看 | 默认 `text`(TTY 下自动启用) |
|
||||||
| 非 TTY(管道/重定向) | 自动 `json-compact` |
|
| 非 TTY(管道/重定向) | 自动 `json-compact` |
|
||||||
@@ -87,10 +86,6 @@ secrets run -n refining --kind service --name gitea -- printenv
|
|||||||
# 管道直接 jq 解析(非 TTY 自动 json-compact)
|
# 管道直接 jq 解析(非 TTY 自动 json-compact)
|
||||||
secrets search -n refining --kind service | jq '.[].name'
|
secrets search -n refining --kind service | jq '.[].name'
|
||||||
|
|
||||||
# 导出 metadata 为可 source 的 env 文件(单条记录)
|
|
||||||
secrets search -n refining --kind service --name gitea -o env \
|
|
||||||
> ~/.config/gitea/config.env
|
|
||||||
|
|
||||||
# 需要 secrets 时,使用 inject / run
|
# 需要 secrets 时,使用 inject / run
|
||||||
secrets inject -n refining --kind service --name gitea > ~/.config/gitea/secrets.env
|
secrets inject -n refining --kind service --name gitea > ~/.config/gitea/secrets.env
|
||||||
secrets run -n refining --kind service --name gitea -- ./deploy.sh
|
secrets run -n refining --kind service --name gitea -- ./deploy.sh
|
||||||
|
|||||||
@@ -55,24 +55,6 @@ pub async fn run(pool: &PgPool, args: SearchArgs<'_>) -> Result<()> {
|
|||||||
};
|
};
|
||||||
println!("{}", out);
|
println!("{}", out);
|
||||||
}
|
}
|
||||||
OutputMode::Env => {
|
|
||||||
if rows.len() > 1 {
|
|
||||||
anyhow::bail!(
|
|
||||||
"env output requires exactly one record; got {}. Add more filters.",
|
|
||||||
rows.len()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if let Some(row) = rows.first() {
|
|
||||||
let map = build_metadata_env_map(row, "");
|
|
||||||
let mut pairs: Vec<(String, String)> = map.into_iter().collect();
|
|
||||||
pairs.sort_by(|a, b| a.0.cmp(&b.0));
|
|
||||||
for (k, v) in pairs {
|
|
||||||
println!("{}={}", k, shell_quote(&v));
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
eprintln!("No records found.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
OutputMode::Text => {
|
OutputMode::Text => {
|
||||||
if rows.is_empty() {
|
if rows.is_empty() {
|
||||||
println!("No records found.");
|
println!("No records found.");
|
||||||
@@ -302,12 +284,6 @@ pub fn build_injected_env_map(
|
|||||||
Ok(map)
|
Ok(map)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Quote a value for safe shell / env output. Wraps in single quotes,
|
|
||||||
/// escaping any single quotes within the value.
|
|
||||||
fn shell_quote(s: &str) -> String {
|
|
||||||
format!("'{}'", s.replace('\'', "'\\''"))
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Convert a JSON value to its string representation suitable for env vars.
|
/// Convert a JSON value to its string representation suitable for env vars.
|
||||||
fn json_value_to_env_string(v: &Value) -> String {
|
fn json_value_to_env_string(v: &Value) -> String {
|
||||||
match v {
|
match v {
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ EXAMPLES:
|
|||||||
/// Secret entry: key=value, key:=<json>, key=@file, or nested:path@file
|
/// Secret entry: key=value, key:=<json>, key=@file, or nested:path@file
|
||||||
#[arg(long = "secret", short = 's')]
|
#[arg(long = "secret", short = 's')]
|
||||||
secrets: Vec<String>,
|
secrets: Vec<String>,
|
||||||
/// Output format: text (default on TTY), json, json-compact, env
|
/// Output format: text (default on TTY), json, json-compact
|
||||||
#[arg(short, long = "output")]
|
#[arg(short, long = "output")]
|
||||||
output: Option<String>,
|
output: Option<String>,
|
||||||
},
|
},
|
||||||
@@ -135,7 +135,7 @@ EXAMPLES:
|
|||||||
///
|
///
|
||||||
/// Supports fuzzy search (-q), exact lookup (--name), field extraction (-f),
|
/// Supports fuzzy search (-q), exact lookup (--name), field extraction (-f),
|
||||||
/// summary view (--summary), pagination (--limit / --offset), and structured
|
/// summary view (--summary), pagination (--limit / --offset), and structured
|
||||||
/// output (-o json / json-compact / env). When stdout is not a TTY, output
|
/// output (-o json / json-compact). When stdout is not a TTY, output
|
||||||
/// defaults to json-compact automatically.
|
/// defaults to json-compact automatically.
|
||||||
#[command(after_help = "EXAMPLES:
|
#[command(after_help = "EXAMPLES:
|
||||||
# Discover all records (summary, safe default limit)
|
# Discover all records (summary, safe default limit)
|
||||||
@@ -157,9 +157,6 @@ EXAMPLES:
|
|||||||
secrets search -n refining --kind service --name gitea \\
|
secrets search -n refining --kind service --name gitea \\
|
||||||
-f metadata.url -f metadata.default_org
|
-f metadata.url -f metadata.default_org
|
||||||
|
|
||||||
# Export metadata as env vars (single record only)
|
|
||||||
secrets search -n refining --kind service --name gitea -o env
|
|
||||||
|
|
||||||
# Inject decrypted secrets only when needed
|
# Inject decrypted secrets only when needed
|
||||||
secrets inject -n refining --kind service --name gitea
|
secrets inject -n refining --kind service --name gitea
|
||||||
secrets run -n refining --kind service --name gitea -- printenv
|
secrets run -n refining --kind service --name gitea -- printenv
|
||||||
@@ -207,7 +204,7 @@ EXAMPLES:
|
|||||||
/// Sort order: name (default), updated, created
|
/// Sort order: name (default), updated, created
|
||||||
#[arg(long, default_value = "name")]
|
#[arg(long, default_value = "name")]
|
||||||
sort: String,
|
sort: String,
|
||||||
/// Output format: text (default on TTY), json, json-compact, env
|
/// Output format: text (default on TTY), json, json-compact
|
||||||
#[arg(short, long = "output")]
|
#[arg(short, long = "output")]
|
||||||
output: Option<String>,
|
output: Option<String>,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ pub enum OutputMode {
|
|||||||
Json,
|
Json,
|
||||||
/// Single-line JSON (default when stdout is NOT a TTY, e.g. piped to jq)
|
/// Single-line JSON (default when stdout is NOT a TTY, e.g. piped to jq)
|
||||||
JsonCompact,
|
JsonCompact,
|
||||||
/// KEY=VALUE pairs suitable for `source` or `.env` files
|
|
||||||
Env,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FromStr for OutputMode {
|
impl FromStr for OutputMode {
|
||||||
@@ -24,9 +22,8 @@ impl FromStr for OutputMode {
|
|||||||
"text" => Ok(Self::Text),
|
"text" => Ok(Self::Text),
|
||||||
"json" => Ok(Self::Json),
|
"json" => Ok(Self::Json),
|
||||||
"json-compact" => Ok(Self::JsonCompact),
|
"json-compact" => Ok(Self::JsonCompact),
|
||||||
"env" => Ok(Self::Env),
|
|
||||||
other => Err(anyhow::anyhow!(
|
other => Err(anyhow::anyhow!(
|
||||||
"Unknown output format '{}'. Valid: text, json, json-compact, env",
|
"Unknown output format '{}'. Valid: text, json, json-compact",
|
||||||
other
|
other
|
||||||
)),
|
)),
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user