jimyag/ripples

GitHub: jimyag/ripples

ripples 是一个基于 Go AST 和类型信息的静态分析工具,用于精确找出两个 Git revision 之间直接及间接受影响的 Go package。

Stars: 0 | Forks: 0

ripples

Find the Go packages affected by a Git change.

Check Release

安装 · 快速开始 · 关系图 · 文档

简体中文 · English

ripples 基于 Go AST、类型信息和声明依赖图,分析两个 Git revision 之间受直接或间接影响的 Go package。它关注代码是否实际引用了变更声明,而不是简单返回所有 import 变更 package 的调用方。 稳定输出是 `.`: cmd/server.main internal/order.order payment.payment binary、service、构建任务、label 和部署单元可以在 CI 中基于 package 输出继续映射。 ## 核心能力 - **声明级分析**:识别函数、方法、类型、字段、变量、常量和 `init` 的新增、删除与修改。 - **直接与间接传播**:沿实际声明引用和调用关系反向查找受影响 package。 - **接口实现解析**:根据调用点和值流定位具体实现,不混入同一接口的其他实现。 - **Go 常见语法覆盖**:支持函数值、闭包、容器、类型断言、泛型、`go`、`defer` 和初始化关系。 - **构建输入感知**:识别 build tags、CGo、`//go:` 指令、`go:embed`、`go.mod` 和 `go.work` 的有效变化。 - **适合 CI**:稳定排序输出,支持持久缓存、JSON、摘要和 DOT 关系图。 完整覆盖范围和静态分析边界见[分析能力](docs/analysis.md)。 ## 安装 使用 Go 安装最新版: go install github.com/jimyag/ripples@latest ripples --version 也可以从 [GitHub Release](https://github.com/jimyag/ripples/releases/latest) 下载 Linux、macOS 和 Windows 的 amd64/arm64 原始二进制。 分析目标项目时仍需要 `git`、匹配项目的 Go toolchain,以及能够执行 `go list ./...` 的 Go module。平台二进制下载命令和完整运行要求见[安装与使用](docs/usage.md)。 ## 快速开始 分析最近一次提交: ripples -repo . -old HEAD~1 -new HEAD 示例输出: cmd/server.main internal/order.order payment.payment `-repo` 指向待分析的 Go module,可以是仓库根目录或 monorepo 中的 module 子目录。`-old` 和 `-new` 必须能够解析为 commit;ripples 分析已提交的 Git tree,不包含工作区中未提交的修改。 参数、输出格式和缓存配置见[安装与使用](docs/usage.md)。 ## 影响关系图 使用 `dot` 输出 package 反向关系图,再通过 Graphviz 转换为 SVG: ripples -repo . -old HEAD~1 -new HEAD -output dot > impact.dot dot -Tsvg impact.dot -o impact.svg 红框表示包含变更声明的 package,箭头指向使用它的 package: ![ripples package 影响关系图示例](https://static.pigsec.cn/wp-content/uploads/repos/cas/20/2060afe6a9024bd8162b2b420f38cecaf17230c6b96f08d967c9ede987ec28b6.svg) [查看 DOT 源文件](docs/impact-example.dot) ## 文档 | 文档 | 内容 | | --- | --- | | [安装与使用](docs/usage.md) | 安装方式、CLI 参数、输出格式、DOT 和缓存 | | [分析能力](docs/analysis.md) | 分析原理、支持的 Go 使用方式和明确边界 | | [GitHub Actions](docs/ci.md) | Release 下载、checksum、缓存和下游任务映射 | ## 开发 task deps task ci `task lint` 使用 golangci-lint 检查全部 Go package 和测试文件。常用任务可以通过 `task --list-all` 查看,本地构建结果位于 `bin/ripples`。 ## 发布 推送 `v*` tag 后,Release workflow 会通过 GoReleaser 上传各平台原始二进制及 `checksums.txt`,不会打包为 tar 或 zip。发布前运行 `task release-snapshot` 验证配置和本地产物。 ## License 本项目基于 [GNU General Public License v3.0](LICENSE) 发布。
标签:EVTX分析, Go语言, SOC Prime, 云安全监控, 代码影响分析, 依赖图, 开发工具, 日志审计, 程序破解, 网络安全研究, 自动化payload嵌入, 静态分析