三个月前,我开始着手开发一个工具,用于生成来自不同资源库的依赖关系报告,特别是那些使用Go模块的资源库,其全部目的是准确地指出这些依赖关系是如何相互联系的,以及每个资源库使用什么版本。请记住,这适用于我们的工作流程,其中每个存储库或Go模块表示一个独立的微服务和所有需要的内部工具和公共API;所以使用这个工具在使用monorepos时几乎没有意义。
我把这个工具叫做 versions,可能不是一个有利于SEO的名字,但我确实喜欢把名字和项目应该做的事情保持一致。目前这个工具生成的是静态的markdown,但我正在努力增加对生成不同格式输出的支持,比如JSON,以使它对工具更加友好。
几个月前,我们使用Gitlab中的下游管道为我们的文档添加了versions',该管道在任何项目发布后都会被触发,有了它,我们可以很容易地看到每个项目使用的Go包版本,最终目的是知道我们应该在需要时更新什么。
未来的想法
除了生成不同的格式,我还有一些关于将其与其他Go项目整合的想法,特别是。
- effrit在最终报告中包含efferent和afferent指标。
- diligent来显示每个包所使用的许可证。
- godepgraph用于生成全局依赖关系图,以及
- goup来确定该软件包是否有新的更新。
我的另一个目标是增加对创建合并/拉动请求的支持,以便同时在所有项目中升级模块,这应该使这项单调的工作更容易消化。
安装
要安装当前版本,你可以运行。
go get github.com/MarioCarrion/versions/cmd/versions
的做一些事情。
versions <full path to 1 go.mod> <full path to 2 go.mod> <full path to N go.mod>
将打印出报告,包括所有的项目、正在使用的包以及版本之间的关系。