我的 go 项目有一个 monorepo 设置。如果我能找到一种方法来使用 go build(或类似的内部工具)来获取需要重新构建的目标列表,我会很高兴。这是我正在寻找的示例:...├── pkg //shared code across mono repo│ └── math│ └── common_operations.go└── cmd // individual packages to be built ├── package1 │ └── main.go └── package2 └── main.gopackage1 程序调用数学共享库中的减法函数。package2 程序调用一个 add 函数。如果我更改 package1 代码,则仅列出 package1 目标如果我更改 package2 代码,则仅列出 package2 目标如果我更改共享库中的添加函数,则只会列出 package2 目标如果我更改共享库中的减法函数,则只会列出 package1 目标如果我更改共享库中的所有函数,package1 和 package2 都会重建。我非常乐意使用内部构建包并以编程方式获取列表。我只是不熟悉它。我尝试过的方法: Bazel 对此有一个选项,但我宁愿尽可能避免使用 bazel。bazel 命令:bazel build cmd/some-target --check_up_to_date如果它是最新的,则返回错误代码 0,否则返回错误代码 1。这在技术上是一个解决方案,但正如您可能已经推断的那样,我的需要是基于 ci/cd 的。我想尽可能避免将 Bazel 集成到该过程中。
2 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
不太确定这里的用例,你也可以实际编译包吗?在那种情况下,也许go build -v
可以为您完成这项工作。来自go help build
:
-v print the names of packages as they are compiled.
开满天机
TA贡献1786条经验 获得超13个赞
我的愿望是找到类似于 go build 选项的东西,如果目标包是最新的,它基本上会吐出 true 或 false。如果有人找到可以解决这个问题的工具(地球上我现在正在看着你),我会很高兴。
我能找到解决问题的最接近解决方案的方法是运行此命令:
go build -n cmd/some-target
如果输出是:
touch some-target
然后,它必须是最新的。如果输出是一长串命令,则不是。如果不是最新的。然后您可以使用以下方法获取包名称:
go build -v
获取包的名称并将其移动到 CI 过程的下一阶段(构建目标、测试目标、构建映像等)。
显然,它有点老套,需要自行推出解决方案,具体细节可能需要根据您的具体需求进行更改。正如 @zacho314 提到的,它还需要保存 go build 缓存的状态,但大多数现代 CI 技术都有解决方案。我确定我现在会做类似的事情。
- 2 回答
- 0 关注
- 134 浏览
添加回答
举报
0/150
提交
取消