Go to file
voson c61c8292aa
Some checks failed
Secrets CLI - Build & Release / 探测 Runner (push) Successful in 1s
Secrets CLI - Build & Release / Build (aarch64-apple-darwin) (push) Has been skipped
Secrets CLI - Build & Release / Build (x86_64-unknown-linux-musl) (push) Has been skipped
Secrets CLI - Build & Release / 版本 & Release (push) Successful in 2s
Secrets CLI - Build & Release / 质量检查 (fmt / clippy / test) (push) Successful in 34s
Secrets CLI - Build & Release / 发布草稿 Release (push) Has been cancelled
Secrets CLI - Build & Release / 通知 (push) Has been cancelled
Secrets CLI - Build & Release / Build (x86_64-pc-windows-msvc) (push) Has been cancelled
fix: CI 无 DB 下 clippy 通过 + 失败时也发飞书通知
- update.rs: sqlx::query! 改为 query/query_as,不依赖编译期 DB
- workflow: build job 加 always() 且 check.result==success,失败时 notify 能执行

Made-with: Cursor
2026-03-18 15:50:10 +08:00

secrets

跨设备密钥与配置管理 CLI基于 Rust + PostgreSQL 18。

将服务器信息、服务凭据统一存入数据库,供本地工具和 AI 读取上下文。

安装

cargo build --release
# 或从 Release 页面下载预编译二进制

配置数据库连接:

export DATABASE_URL=postgres://postgres:<password>@<host>:5432/secrets
# 或在项目根目录创建 .env 文件写入上述变量

使用

# 查看版本
secrets -V
secrets --version

# 查看帮助
secrets --help
secrets -h

# 查看子命令帮助
secrets help add
secrets help search
secrets help delete
secrets help update

# 添加服务器
secrets add -n refining --kind server --name my-server \
  --tag aliyun --tag shanghai \
  -m ip=1.2.3.4 -m desc="My Server" \
  -s username=root \
  -s ssh_key=@./keys/my.pem

# 添加服务凭据
secrets add -n refining --kind service --name gitea \
  -m url=https://gitea.example.com \
  -s token=<token>

# 搜索(默认隐藏敏感字段)
secrets search
secrets search -n refining --kind server
secrets search --tag hongkong
secrets search -q mqtt              # 关键词匹配 name / metadata / tags
secrets search -n refining --kind service --name gitea --show-secrets

# 增量更新已有记录(合并语义,记录不存在则报错)
secrets update -n refining --kind server --name my-server -m ip=10.0.0.1
secrets update -n refining --kind service --name gitea --add-tag production -s token=<new-token>
secrets update -n refining --kind service --name mqtt --remove-meta old_port --remove-secret old_key

# 删除
secrets delete -n refining --kind server --name my-server

数据模型

单张 secrets 表,首次连接自动建表。

字段 说明
namespace 一级隔离,如 refiningricnsmart
kind 记录类型,如 serverservice(可自由扩展)
name 人类可读唯一标识
tags 多维标签,如 ["aliyun","hongkong"]
metadata 明文描述信息ip、desc、domains 等)
encrypted 敏感凭据ssh_key、password、token 等MVP 阶段明文存储,预留加密字段

-m / --meta 写入 metadata-s / --secret 写入 encryptedvalue=@file 从文件读取内容。

项目结构

src/
  main.rs          # CLI 入口clap
  db.rs            # 连接池 + auto-migrate
  models.rs        # Secret 结构体
  commands/
    add.rs         # upsert
    search.rs      # 多条件查询
    delete.rs      # 删除
    update.rs      # 增量更新(合并 tags/metadata/encrypted
scripts/
  seed-data.sh     # 导入 refining / ricnsmart 全量数据

CI/CDGitea Actions

推送 main 分支时自动fmt/clippy 检查 → musl 构建 → 创建 Release 并上传二进制。

首次使用需配置 Actions 变量和 Secrets

# 需有 ~/.config/gitea/config.envGITEA_URL、GITEA_TOKEN、GITEA_WEBHOOK_URL
./scripts/setup-gitea-actions.sh
  • RELEASE_TOKENSecretGitea PAT用于创建 Release 上传二进制
  • WEBHOOK_URLVariable飞书通知可选

详见 AGENTS.md

Description
Secrets management project
Readme 4 MiB
2026-04-10 17:14:37 +08:00
Languages
Rust 66%
HTML 29.5%
Shell 2.1%
Python 2%
JavaScript 0.4%