chore(release): enforce version bump checks
Fail fast when a release tag already exists, and add a local release-check script so version mistakes are caught before commit and publish. Made-with: Cursor
This commit is contained in:
@@ -5,9 +5,6 @@ on:
|
|||||||
branches: [main]
|
branches: [main]
|
||||||
paths:
|
paths:
|
||||||
- 'src/**'
|
- 'src/**'
|
||||||
- 'Cargo.toml'
|
|
||||||
- 'Cargo.lock'
|
|
||||||
- '.gitea/workflows/secrets.yml'
|
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
@@ -56,6 +53,13 @@ jobs:
|
|||||||
echo "将创建新版本 ${tag}"
|
echo "将创建新版本 ${tag}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
- name: 严格拦截重复版本
|
||||||
|
if: steps.ver.outputs.tag_exists == 'true'
|
||||||
|
run: |
|
||||||
|
echo "错误: 版本 ${{ steps.ver.outputs.tag }} 已存在,禁止重复发版。"
|
||||||
|
echo "请先 bump Cargo.toml 中的 version,并执行 cargo build 同步 Cargo.lock。"
|
||||||
|
exit 1
|
||||||
|
|
||||||
- name: 创建 Tag
|
- name: 创建 Tag
|
||||||
if: steps.ver.outputs.tag_exists == 'false'
|
if: steps.ver.outputs.tag_exists == 'false'
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
16
AGENTS.md
16
AGENTS.md
@@ -1,5 +1,12 @@
|
|||||||
# Secrets CLI — AGENTS.md
|
# Secrets CLI — AGENTS.md
|
||||||
|
|
||||||
|
## 提交 / 发版硬规则(优先于下文其他说明)
|
||||||
|
|
||||||
|
1. 涉及 `src/**`、`Cargo.toml`、`Cargo.lock`、CLI 行为变更的提交,默认视为**需要发版**,除非用户明确说明“本次不发版”。
|
||||||
|
2. 发版前必须先检查 `Cargo.toml` 中的 `version`,再检查是否已存在对应 tag:`git tag -l 'secrets-*'`。
|
||||||
|
3. 若当前版本对应 tag 已存在,必须先 bump `Cargo.toml` 的 `version`,再执行 `cargo build` 同步 `Cargo.lock`,然后才能提交。
|
||||||
|
4. 提交前优先运行 `./scripts/release-check.sh`;该脚本会检查重复版本并执行 `cargo fmt -- --check && cargo clippy --locked -- -D warnings && cargo test --locked`。
|
||||||
|
|
||||||
跨设备密钥与配置管理 CLI 工具,将 refining / ricnsmart 两个项目的服务器信息、服务凭据存储到 PostgreSQL 18,供 AI 工具读取上下文。敏感数据(encrypted 字段)使用 AES-256-GCM 加密,主密钥由 Argon2id 从主密码派生并存入平台安全存储(macOS Keychain / Windows Credential Manager / Linux keyutils)。
|
跨设备密钥与配置管理 CLI 工具,将 refining / ricnsmart 两个项目的服务器信息、服务凭据存储到 PostgreSQL 18,供 AI 工具读取上下文。敏感数据(encrypted 字段)使用 AES-256-GCM 加密,主密钥由 Argon2id 从主密码派生并存入平台安全存储(macOS Keychain / Windows Credential Manager / Linux keyutils)。
|
||||||
|
|
||||||
## 项目结构
|
## 项目结构
|
||||||
@@ -25,6 +32,7 @@ secrets/
|
|||||||
run.rs # inject / run 命令:临时环境变量注入
|
run.rs # inject / run 命令:临时环境变量注入
|
||||||
upgrade.rs # upgrade 命令:检查、校验摘要并下载最新版本,自动替换二进制
|
upgrade.rs # upgrade 命令:检查、校验摘要并下载最新版本,自动替换二进制
|
||||||
scripts/
|
scripts/
|
||||||
|
release-check.sh # 发版前检查版本号/tag 是否重复,并执行 fmt/clippy/test
|
||||||
setup-gitea-actions.sh # 配置 Gitea Actions 变量与 Secrets
|
setup-gitea-actions.sh # 配置 Gitea Actions 变量与 Secrets
|
||||||
.gitea/workflows/
|
.gitea/workflows/
|
||||||
secrets.yml # CI:fmt + clippy + musl 构建 + Release 上传 + 飞书通知
|
secrets.yml # CI:fmt + clippy + musl 构建 + Release 上传 + 飞书通知
|
||||||
@@ -466,6 +474,14 @@ secrets --db-url "postgres://..." search -n refining
|
|||||||
|
|
||||||
每次提交代码前,请在本地依次执行以下检查,**全部通过后再 push**:
|
每次提交代码前,请在本地依次执行以下检查,**全部通过后再 push**:
|
||||||
|
|
||||||
|
优先使用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./scripts/release-check.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
它等价于先检查版本号 / tag,再执行下面的格式、Lint、测试。
|
||||||
|
|
||||||
### 1. 版本号(按需)
|
### 1. 版本号(按需)
|
||||||
|
|
||||||
若本次改动需要发版,请先确认 `Cargo.toml` 中的 `version` 已提升,避免 CI 打出的 Tag 与已有版本重复。**升级版本后需同时更新 `Cargo.lock`**(运行 `cargo build` 即可自动同步),否则 CI 中 `cargo clippy --locked` 会因 lock 与 manifest 不一致而失败。可通过 git tag 判断:
|
若本次改动需要发版,请先确认 `Cargo.toml` 中的 `version` 已提升,避免 CI 打出的 Tag 与已有版本重复。**升级版本后需同时更新 `Cargo.lock`**(运行 `cargo build` 即可自动同步),否则 CI 中 `cargo clippy --locked` 会因 lock 与 manifest 不一致而失败。可通过 git tag 判断:
|
||||||
|
|||||||
23
scripts/release-check.sh
Executable file
23
scripts/release-check.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
|
cd "$repo_root"
|
||||||
|
|
||||||
|
version="$(grep -m1 '^version' Cargo.toml | sed 's/.*"\(.*\)".*/\1/')"
|
||||||
|
tag="secrets-${version}"
|
||||||
|
|
||||||
|
echo "==> 当前版本: ${version}"
|
||||||
|
echo "==> 检查是否已存在 tag: ${tag}"
|
||||||
|
|
||||||
|
if git rev-parse "refs/tags/${tag}" >/dev/null 2>&1; then
|
||||||
|
echo "错误: 已存在 tag ${tag}"
|
||||||
|
echo "请先 bump Cargo.toml 中的 version,再执行 cargo build 同步 Cargo.lock。"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "==> 未发现重复 tag,开始执行检查"
|
||||||
|
cargo fmt -- --check
|
||||||
|
cargo clippy --locked -- -D warnings
|
||||||
|
cargo test --locked
|
||||||
Reference in New Issue
Block a user