https://github.com/apache/kafka/pull/17260
背景故事
今天來聊一點沒那麼技術的東西,各位熟悉GitHub
的工程師喜不喜歡標籤呢?一般來說標籤可以幫助快速分類議題和PR
,幫助開發者和維護者快速過濾出想要看的項目,那麼是誰要來貼標籤呢?聰明的工程師一定會說透過自動化,例如自動去掃描這隻PR
的變更,然後根據變更來貼上對應的標籤,但其實呢Kafka
社群一直沒有使用GitHub
的標籤,所以之前的PR
都如下圖一樣,看起來很單調沒有花花綠綠五顏六色,維護者也只能透過標題名字來體感這個PR
可能會涉及哪些模組。
但是呢,那個黯淡無光的日子已經過去了,現在我們的PR
已經不一樣了,可以看下圖,現在已經是五顏六色精彩繽紛,每個PR
都會根據修改的內容來標記有哪些模組被修改,例如KAFKA-17707
有下面四個標籤:
core
:這代表core
模組下的程式碼有被動到tools
:同上tests
:這代表這隻PR
有改到測試相關的程式碼small
:顧名思義,這隻PR
的改動很小,可以提醒維護者優先看一下畢竟不用花太多時間本來呢標籤運作得都不錯,但是其中一個標籤的邏輯最近出了問題,也是上述有提到的small
。small
這個標籤為了能算出PR
修改的範圍,所以使用了diff
的方式來查看PR
做的修改,然後再透過grep
來算出行數,但是在列印內容的時候會遇到PR
本身的修改帶有特殊字符,這樣就會導致列印時出現處理特殊字符失效導致行數計算跟著失效,以KAFKA-17624爲例,這隻PR
有以下的修改:
cmd = "%(cmd_prefix)s --add --topic=%(topic)s %(operation_flag)s --allow-principal=%(principal)s" % {
這樣在計算行數的時候就會噴出以下錯誤:
./.github/scripts/label_small.sh: line 22: printf: warning: s': invalid time format specification
解決辦法
其實呢我們不用自己去計算行數,貼心的GitHub
早就準備好指令讓我們可以輕鬆獲得計算結果,我們可以使用view
這隻函式來直接取得修改的行數:
gh pr view $PR_NUM -R $GITHUB_REPOSITORY --json additions,deletions
上述指令會回傳一個json
格式的結果,裡面帶有additions
和deletions
兩個欄位分別計算了增加的行數和刪減的行數,如此就可以直接避免使用grep
爬取變更內容的需求,進而解決這次遇到的問題。
廣告
歡迎訂閱全臺最鬆散的開源社群源來適你,上面不定期會有各種開源的廢文。也歡迎參加全臺最鬆散的開源討論頻道,上面有一群網友一起在刷開源技術