mcpField
R
release-check

release-check

github.com/jackin-project测试与质量3162 次安装4 周前更新
代码仓库

关于 release-check

jackin 项目的发布就绪检查技能,供维护者在发布前验证代码库。它检查 CI、本地测试、代码质量、文档链接等,并整理就绪报告。

主要功能

  1. 01检查 CI 状态
  2. 02运行本地测试、Clippy 和格式检查
  3. 03检查直接提交和文档链接
  4. 04审查 TODO 新鲜度
  5. 05确认安全例外状态

适用场景

  1. 01发布前评估项目是否就绪
  2. 02定位阻塞发布的测试或 CI 问题
  3. 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 — 测试失败时不能发布
ClippyBLOCK — clippy 出错时不能发布
格式BLOCK — fmt 违规时不能发布
直接提交WARN — 显示列表,不阻止发布
文档链接WARN — 显示失效链接,不阻止发布
TODO 时效性WARN — 显示过时项目,不阻止发布
安全例外REVIEW — 询问用户,仅在用户回答 “no” 时阻止发布
Docker 构建BLOCK(文件发生变化且 CI 未通过时);SKIP(文件未变化时)

评论

支持 Markdown