关于 release-check
jackin 项目的发布就绪检查技能,供维护者在发布前验证代码库。它检查 CI、本地测试、代码质量、文档链接等,并整理就绪报告。
主要功能
- 01检查 CI 状态
- 02运行本地测试、Clippy 和格式检查
- 03检查直接提交和文档链接
- 04审查 TODO 新鲜度
- 05确认安全例外状态
适用场景
- 01发布前评估项目是否就绪
- 02定位阻塞发布的测试或 CI 问题
- 03审查文档链接、安全例外和过时事项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jackin-project/ jackin-dev --skill release-check安装后在 Claude Code 中输入/release-check确认已加载。
详细介绍
发布检查
对 jackin 项目进行发布前验证。运行一系列检查并生成就绪报告。
适用场景
- 运行
/release之前 - 想要确认项目已准备好发布时
- 修复上次发布检查中发现的问题后
流程
按顺序运行每项检查。将结果汇总到就绪报告中。
检查 1:CI 状态
确认 main 上最新的 CI 运行成功:
gh run list --workflow=ci.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
如果 conclusion 不是 success,报告 FAIL 并停止。
如果特定路径自上一个标签以来发生了变化,也要检查相应的工作流:
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
# Check if docker/construct/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/)" ]; then
gh run list --workflow=construct.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi
# Check if docs/** changed since last tag
if [ -n "$LAST_TAG" ] && [ -n "$(git diff --name-only "$LAST_TAG"..HEAD -- docs/)" ]; then
gh run list --workflow=docs.yml --branch=main --limit=1 --json status,conclusion --jq '.[0]'
fi
将结果报告为 PASS、FAIL 或 SKIP(如果这些路径没有变化)。
检查 2:本地测试
cargo test --locked
如果任何测试失败,报告 FAIL 并停止。
检查 3:Clippy
cargo clippy -- -D warnings
如果 clippy 报告任何警告即错误,报告 FAIL 并停止。
检查 4:格式检查
cargo fmt --check
如果发现格式违规,报告 FAIL 并停止。
检查 5:直接提交警告
查找自上一个标签以来不是 PR 合并提交的提交:
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -n "$LAST_TAG" ]; then
git log "$LAST_TAG"..HEAD --oneline --no-merges
fi
对于每个提交,检查它是否属于某个 PR:
gh pr list --state merged --search "<commit-sha>" --json number --jq '.[0].number'
如果存在未关联任何 PR 的提交,报告 WARN 并列出这些提交。不阻止发布。
检查 6:文档链接验证
检查 docs/content/docs/ 中是否存在失效的内部链接:
- 读取 Markdown 文件并提取内部链接(相对路径、
href属性) - 验证每个链接指向的文件是否存在
- 对于外部 URL,验证其是否返回 HTTP 200(跳过受限流的域名)
报告 PASS 或 WARN,并列出失效链接。
检查 7:TODO 时效性
读取 TODO.md 和 todo/ 中的所有文件:
- 检查是否有项目引用了已经完成的工作(查找匹配的提交或已关闭的 PR)
- 检查是否有项目已过时(近期提交中没有相关活动)
报告 PASS 或 WARN,并列出发现的问题。
检查 8:安全例外
读取 SECURITY_EXCEPTIONS.md 并向用户展示其内容。
询问:“这些安全例外目前仍然有效吗?(yes/no)”
如果用户回答 no,报告 REVIEW——用户需要在发布前更新该文件。
如果用户回答 yes,报告 PASS。
检查 9:Docker 构建状态
检查 Docker 相关文件自上一个标签以来是否发生变化:
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
CONSTRUCT_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/construct/ 2>/dev/null)
RUNTIME_CHANGED=$(git diff --name-only "$LAST_TAG"..HEAD -- docker/runtime/ 2>/dev/null)
如果发生变化,验证 construct.yml 工作流是否通过(已在检查 1 中检查)。报告 PASS 或 SKIP。
输出
呈现结构化的就绪报告:
Release Readiness Report
========================
✓ CI: all workflows green
✓ Local tests: N passed, 0 failed
✓ Clippy: no warnings
✓ Format: clean
⚠ Direct commits: N commits since vX.Y.Z not from PRs
- <sha> <message>
✓ Doc links: all valid
✓ TODOs: up to date
? Security exceptions: review required (N items)
✓ Docker: builds pass (or: no changes, skipped)
Result: PASS | REVIEW NEEDED | FAIL
阻塞与非阻塞
| 检查 | 失败时的处理方式 |
|---|---|
| CI 状态 | BLOCK — CI 未通过时不能发布 |
| 本地测试 | BLOCK — 测试失败时不能发布 |
| Clippy | BLOCK — clippy 出错时不能发布 |
| 格式 | BLOCK — fmt 违规时不能发布 |
| 直接提交 | WARN — 显示列表,不阻止发布 |
| 文档链接 | WARN — 显示失效链接,不阻止发布 |
| TODO 时效性 | WARN — 显示过时项目,不阻止发布 |
| 安全例外 | REVIEW — 询问用户,仅在用户回答 “no” 时阻止发布 |
| Docker 构建 | BLOCK(文件发生变化且 CI 未通过时);SKIP(文件未变化时) |