UStackUStack
Rosentic icon

Rosentic

Rosentic 在合并前把每个 PR 与所有活动分支逐一比对,找出兼容性冲突,如 schema drift 与 API/签名不匹配,CI 中运行且开源免费。

Rosentic

什么是 Rosentic?

Rosentic 是一个确定性 CI 检查工具,在合并前扫描拉取请求 (PR) 与活动分支,找出兼容性冲突。它专注于破坏跨分支行为的案例,包括 schema drift、API 破坏和签名不匹配。

工作流程以自动化验证为中心:针对 PR 事件,Rosentic 在你的 CI 中运行,生成破坏性变更的详细分析,并报告检测到的冲突相关具体位置(文件路径和行号)。

主要特性

  • 在合并前扫描 PR 与每个活动分支,捕获跨分支不兼容问题,而非仅 PR 自身 diff 中的问题。
  • 确定性执行,确保 CI 运行间结果一致。
  • 在你的 CI/runner 中运行(“代码永不离开你的 runner”),分析保持在现有构建环境中。
  • 支持 12 种语言,基于站点声明的扫描范围。
  • 为冲突提供行级详细分析(文件路径和行号),便于团队处理确切的调用点和接口。
  • 使用回归 fixture 守护底层引擎变更。

如何使用 Rosentic

  1. 将 Rosentic 的 GitHub Actions 工作流程添加到你的仓库(站点提供 .github/workflows/rosentic.yml 示例)。
  2. 配置工作流程在针对分支的 pull_request 事件上运行(示例显示 branches: [main])。
  3. 确保工作流程使用 fetch-depth: 0 检出仓库(如示例所示),以便 Rosentic 检查分支比较所需内容。
  4. 工作流程运行 Rosentic/rosentic-action@v1。作业完成后,查看 Rosentic 输出中报告的“Breaking”冲突和行级位置。

要在基于代理的工作流程中运行,站点还建议在仓库安装 Rosentic,然后让你的编码代理遵循该指令。

使用场景

  • 合并前防止运行时或集成失败: PR 更改函数签名(例如添加必需参数),Rosentic 识别其他分支上仍调用旧签名的剩余调用者。
  • 检测跨分支 schema drift: 当代码更新影响 schema 定义(例如解析器或合约形状变更)时,Rosentic 报告“Schema drift”并指向受影响的文件/行。
  • 捕获 API 返回类型或合约变更: 如果函数返回类型变更(例如从 Promise<void> 到不同的 Promise<Result> 形状),Rosentic 列出可能无法处理新结果结构的调用者。
  • 防范后端与前端代码间接口不匹配: 当 PR 更新共享接口时,Rosentic 可标记其他分支调用点不匹配的“signature mismatch” 式冲突。
  • 为多个代理分支标准化兼容性检查: 如果团队使用多个分支和自动化工作流程,Rosentic 验证跨分支兼容性,使 PR 更少与并行开发冲突。

常见问题

Rosentic 需要 API 密钥或注册吗?
站点声明:“无需注册”和“无需 API 密钥”。

Rosentic 在哪里运行?
站点表示它在你的 CI/runner 中运行,代码“永不[离开]你的 runner”。

Rosentic 何时检查冲突?
提供的示例工作流程在 pull_request 事件上运行(示例中 branches: [main]),Rosentic 在合并前检查 PR 与活动分支。

Rosentic 报告哪些类型的冲突?
页面示例提及 schema drift、API break 和 signature mismatch 等类别,并提供具体破坏性变更和受影响位置的详细分析。

从 Rosentic 获得什么信息?
站点声明结果包括文件路径和行号,提供“完整详细分析”和 PR 上发现的冲突计数。

替代方案

  • CI 中的自动化测试套件: 与主动将 PR 与其他分支比较不同,单元/集成测试在运行时验证行为。这不同之处在于测试验证特定场景,而不是枚举跨分支接口冲突。
  • 静态类型检查和 linting(特定语言): 类型检查器和 linter 可以在编译器分析范围内捕获签名和类型不匹配,但可能无法识别相对于其他活动分支变更引发的兼容性问题。
  • 常规基于 Git 的合并冲突检测: Git 可以在合并时显示文本冲突,但它本身不会验证跨分支的语义兼容性,如 schema drift 或 API 契约不匹配。
  • CI 的变更影响分析工具: 依赖/影响分析类别的工具关注变更如何影响下游消费者;与 Rosentic 相比,它们可能更多依赖依赖图或覆盖率,而不是明确的跨分支验证。