feat(run): 选择性字段注入、dry-run 预览、默认 JSON 输出
Some checks failed
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 3s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 2m20s
Secrets CLI - Build & Release / Build (macOS aarch64 + x86_64) (push) Successful in 1m4s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 1m13s
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
Secrets CLI - Build & Release / 发布草稿 Release (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 2m20s
Secrets CLI - Build & Release / Build (macOS aarch64 + x86_64) (push) Successful in 1m4s
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Successful in 1m13s
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
Secrets CLI - Build & Release / 发布草稿 Release (push) Has been cancelled
- run 新增 -s/--secret 字段过滤,只注入指定字段到子进程(最小权限) - run 新增 --dry-run 模式,输出变量名与来源映射,不执行命令、不暴露值 - run 新增 -o 参数,dry-run 默认 JSON 输出 - 默认输出格式改为始终 json,移除 TTY 自动切换逻辑,-o text 供人类使用 - build_injected_env_map 签名从 &[SecretField] 改为 &[&SecretField] - 更新 AGENTS.md、README.md、.vscode/tasks.json - version: 0.9.5 → 0.9.6 Made-with: Cursor
This commit is contained in:
44
README.md
44
README.md
@@ -64,31 +64,35 @@ secrets search -n refining --kind service --name gitea -f metadata.url
|
||||
secrets search -n refining --kind service --name gitea \
|
||||
-f metadata.url -f metadata.default_org
|
||||
|
||||
# 需要 secrets 时,改用 inject / run
|
||||
secrets inject -n refining --kind service --name gitea
|
||||
secrets run -n refining --kind service --name gitea -- printenv
|
||||
# 需要 secrets 时,改用 run(只注入 token 字段到子进程)
|
||||
secrets run -n refining --kind service --name gitea -s token -- ./deploy.sh
|
||||
|
||||
# 预览 run 会注入哪些变量(不执行命令)
|
||||
secrets run -n refining --kind service --name gitea --dry-run
|
||||
```
|
||||
|
||||
`search` 展示 metadata 与 secrets 的字段名,不展示 secret 值本身;需要 secret 值时用 `inject` / `run`(仅注入加密字段,不含 metadata)。
|
||||
`search` 展示 metadata 与 secrets 的字段名,不展示 secret 值本身;需要 secret 值时用 `run`(仅注入加密字段到子进程,不含 metadata)。用 `-s` 指定只注入特定字段,最小化注入范围。
|
||||
|
||||
### 输出格式
|
||||
|
||||
| 场景 | 推荐命令 |
|
||||
|------|----------|
|
||||
| AI 解析 / 管道处理 | `-o json` 或 `-o json-compact` |
|
||||
| 注入 secrets 到环境变量 | `inject` / `run` |
|
||||
| 人类查看 | 默认 `text`(TTY 下自动启用) |
|
||||
| 非 TTY(管道/重定向) | 自动 `json-compact` |
|
||||
| AI 解析 / 管道处理(默认) | json(pretty-printed) |
|
||||
| 管道紧凑格式 | `-o json-compact` |
|
||||
| 注入 secrets 到子进程环境 | `run` |
|
||||
| 人类查看 | `-o text` |
|
||||
|
||||
说明:`text` 输出中的时间会按当前机器本地时区显示;`json/json-compact` 继续使用 UTC(RFC3339 风格)以便脚本和 AI 稳定解析。
|
||||
默认始终输出 JSON,无论是 TTY 还是管道。`text` 输出中时间按本地时区显示;`json/json-compact` 使用 UTC(RFC3339)。
|
||||
|
||||
```bash
|
||||
# 管道直接 jq 解析(非 TTY 自动 json-compact)
|
||||
# 默认 JSON 输出,直接可 jq 解析
|
||||
secrets search -n refining --kind service | jq '.[].name'
|
||||
|
||||
# 需要 secrets 时,使用 inject / run
|
||||
secrets inject -n refining --kind service --name gitea > ~/.config/gitea/secrets.env
|
||||
secrets run -n refining --kind service --name gitea -- ./deploy.sh
|
||||
# 需要 secrets 时,使用 run(-s 指定只注入特定字段)
|
||||
secrets run -n refining --kind service --name gitea -s token -- ./deploy.sh
|
||||
|
||||
# 预览 run 会注入哪些变量(不执行命令)
|
||||
secrets run -n refining --kind service --name gitea --dry-run
|
||||
```
|
||||
|
||||
## 完整命令参考
|
||||
@@ -177,6 +181,16 @@ secrets import backup.json # 导入(冲突时报
|
||||
secrets import --force refining.toml # 冲突时覆盖已有记录
|
||||
secrets import --dry-run backup.yaml # 预览将要执行的操作(不写入)
|
||||
|
||||
# ── run ───────────────────────────────────────────────────────────────────────
|
||||
secrets run -n refining --kind service --name gitea -- ./deploy.sh # 注入全部 secrets
|
||||
secrets run -n refining --kind service --name gitea -s token -- ./deploy.sh # 只注入 token 字段
|
||||
secrets run -n refining --kind service --name aliyun \
|
||||
-s access_key_id -s access_key_secret -- aliyun ecs DescribeInstances # 只注入指定字段
|
||||
secrets run --tag production -- env # 按 tag 批量注入
|
||||
secrets run -n refining --kind service --name gitea --dry-run # 预览变量映射
|
||||
secrets run -n refining --kind service --name gitea -s token --dry-run # 过滤后预览
|
||||
secrets run -n refining --kind service --name gitea --dry-run -o text # 人类可读预览
|
||||
|
||||
# ── 调试 ──────────────────────────────────────────────────────────────────────
|
||||
secrets --verbose search -q mqtt
|
||||
RUST_LOG=secrets=trace secrets search
|
||||
@@ -193,7 +207,7 @@ RUST_LOG=secrets=trace secrets search
|
||||
| entries | name | 人类可读唯一标识 |
|
||||
| entries | tags | 多维标签,如 `["aliyun","hongkong"]` |
|
||||
| entries | metadata | 明文描述(ip、desc、domains、key_ref 等) |
|
||||
| secrets | field_name | 明文,search 可见,AI 可推断 inject 会生成什么变量 |
|
||||
| secrets | field_name | 明文,search 可见,AI 可推断 run 会注入哪些变量 |
|
||||
| secrets | encrypted | 仅加密值本身,AES-256-GCM |
|
||||
|
||||
`-m` / `--meta` 写入 `metadata`,`-s` / `--secret` 写入 `secrets` 表的独立行。支持 `key=value`、`key=@file`、`key:=<json>`,也支持 `credentials:content@./key.pem` 这类嵌套字段文件写入;删除时支持 `--remove-secret credentials:content`。加解密使用主密钥(由 `secrets init` 设置)。
|
||||
@@ -314,7 +328,7 @@ src/
|
||||
delete.rs # 删除(CASCADE 删除 secrets)
|
||||
update.rs # 增量更新(tags/metadata + secrets 行级 UPSERT/DELETE)
|
||||
rollback.rs # rollback / history:按 entry_version 恢复
|
||||
run.rs # inject / run,仅 secrets 逐字段解密 + key_ref 引用解析(不含 metadata)
|
||||
run.rs # run,仅 secrets 逐字段解密 + key_ref 引用解析(不含 metadata)
|
||||
upgrade.rs # 从 Gitea Release 自更新
|
||||
export_cmd.rs # export:批量导出,支持 JSON/TOML/YAML,含解密明文
|
||||
import_cmd.rs # import:批量导入,冲突检测,dry-run,重新加密写入
|
||||
|
||||
Reference in New Issue
Block a user