亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

GO Monorepo:需要使用 go build 重建的文件列表

GO Monorepo:需要使用 go build 重建的文件列表

Go
飲歌長嘯 2022-12-26 10:40:30
我的 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.


查看完整回答
反對 回復 2022-12-26
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

我的愿望是找到類似于 go build 選項的東西,如果目標包是最新的,它基本上會吐出 true 或 false。如果有人找到可以解決這個問題的工具(地球上我現在正在看著你),我會很高興。

我能找到解決問題的最接近解決方案的方法是運行此命令:

go build -n cmd/some-target

如果輸出是:

touch some-target

然后,它必須是最新的。如果輸出是一長串命令,則不是。如果不是最新的。然后您可以使用以下方法獲取包名稱:

go build -v

獲取包的名稱并將其移動到 CI 過程的下一階段(構建目標、測試目標、構建映像等)。

顯然,它有點老套,需要自行推出解決方案,具體細節可能需要根據您的具體需求進行更改。正如 @zacho314 提到的,它還需要保存 go build 緩存的狀態,但大多數現代 CI 技術都有解決方案。我確定我現在會做類似的事情。


查看完整回答
反對 回復 2022-12-26
  • 2 回答
  • 0 關注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號