Slack裡報bug,GitHub上出修復

在Slack裡用大白話說清一個bug。Okou會寫好GitHub issue並指派負責人;如果原因集中在某一個元件上,它還會提一個帶修復和迴歸測試的pull request,交給你審閱。

Okou連線:SlackGitHubLinear

Okou交付的成果:從一條Slack訊息到一份待評審的修復

這是Okou團隊#bug-report頻道里的真實會話,按發生順序原樣記錄。一位同事貼上客戶的反饋,順口要了個修復。4分鐘後,Okou提交了帶診斷結論的GitHub issue。從第一條訊息算起14分鐘,它開好了PR併發出預覽連結。下面是兩張截圖:起點的那條會話,以及Okou寫的PR。它們都是公開的,你可以自己去看issue、程式碼差異和評審記錄。

Okou · 從Slack會話到PR真實執行

會話裡發生了什麼

一位同事在#bug-report裡反饋了客戶遇到的PWA佈局問題,並附上截圖。Okou讀完會話,定位到頂欄渲染時沒有計入iOS安全區域內邊距,隨後提交了issue #11708,帶上標籤和判斷依據。會話裡提出要修復後,Okou只改了一個檔案(給移動端頂欄加上最小高度和安全區域內邊距),開出PR #11709並附上預覽連結,然後就停在這裡。評審和合並由人完成。

從訊息到建單
4分鐘issue #11708,標籤為bug和PWA
從訊息到PR
14分鐘PR #11709,附預覽連結
修復改動的檔案數
1由人合併,不是Okou
在GitHub上開啟PR #11709

在Slack裡建立GitHub issue,到底是怎麼回事?

在Slack裡建立GitHub issue,意思是把有人在對話中描述的bug,直接變成倉庫裡一條結構清晰的issue,而不用任何人退出會話去重新敲一遍。難的從來不是呼叫API,而是寫出一個說得清的標題、把復現步驟和預期行為分開、選標籤、定優先順序、找到對的負責人。這些事由Okou來做:它讀你的Slack訊息和前後的回覆,寫出issue正文,打上標籤、給出講得通的優先順序,把Slack暱稱對應到GitHub帳號來確定負責人,最後把issue連結發回同一條會話,報告人掃一眼就能核對。

為什麼bug反饋總是死在Slack會話裡

有人在演示時發現了一個bug,或者客戶週六來信反饋。老路子很長:開啟GitHub,找到倉庫,按格式寫一條issue,指派給人,然後等這個人接手、讀程式碼、寫修復。一個十分鐘的改動,變成三個人、好幾天的來回,而且有一半的反饋根本沒走出那條會話。換個做法:你在Slack裡把問題說清楚。Okou建好issue,附上覆現步驟、標籤和負責人;如果原因範圍有限,它會接著提一個帶修復和測試的pull request。你審閱,然後發布。

Okou如何從Slack建立GitHub issue

第一步:連線你的工具

GitHub
GitHub
必需
透過OAuth連線GitHub。Okou需要讀寫權限來建立issue;當它能給出修復時,還需要推送分支並開PR。
連線
Slack
Slack
必需
Okou讀取你的訊息,並在同一條會話裡回覆。
連線

第二步:交給Okou

Okou建個issue:在定時任務對話方塊裡按ESC會直接關掉,哪怕還有沒儲存的修改。應該先問一下確認。指派給Lancy。打上bug、platform標籤。優先順序中。
Okou讀整條會話
Okou不只看你那條訊息,也看前後的回覆,所以三條訊息之後才補上的資訊同樣算數。它會認出該指派給誰,並根據大家實際說過的話推斷標籤和優先順序。
issue建到GitHub上
寫好的標題、描述、與預期行為分開列出的復現步驟、受影響的範圍、標籤,以及從Slack顯示名匹配到的負責人。Okou會先查一遍未關閉的issue,遇到重複的就在原條目下留言,而不是再建一條。
Okou定位原因並提交pull request
當會話內容或程式碼指向同一個元件,並且能先寫出一個會失敗的測試時,Okou就把修復和這個測試一起寫好,把pull request關聯到issue,交給CI去跑。做不到時,它就停在issue這一步,並在會話裡說明原因。
你審閱後發布
Okou在同一條會話裡回覆issue、pull request和預覽連結,並向負責人發起評審請求。沒有任何東西會自動合併,修復會一直等著你。

第三步:再往前一步

順手修掉它
不只建單,直接開PR
Okou修一下#6260,開一個PR並補上回歸測試。關聯到對應issue,再把預覽連結發到這條會話裡。
補充細節
附上截圖或復現步驟
Okou給#6260補上覆現步驟:1. 開啟定時任務彈窗 2. 隨便輸入一些內容 3. 按ESC。預期:彈出確認對話方塊。
批次建單
一次建立多個issue
Okou根據這3個bug建立issue: 1. 按ESC關閉彈窗(Lancy) 2. 日期選擇器差一天(James) 3. Safari上傳頭像失敗(Yuma)
自動分流
從頻道里自動建單
Okou盯著#bugs,只要有人發以「bug:」開頭的訊息,就自動建立GitHub issue並回復連結。

這套工作流背後的Slack與GitHub整合

這是一套中間放了智能體的Slack與GitHub整合:Okou在Slack裡讀對話,在GitHub裡寫記錄。每個連接器都單獨授權,權限範圍只覆蓋這套工作流真正用到的部分,所以讀取一個頻道,絕不等於拿到你倉庫的寫權限。

Slack

Slack整合:Okou讀的那段對話

必需

Okou會讀你指給它的那條訊息,以及前後的回覆,所以晚三條才補上的資訊同樣會進到issue裡。它會帶上隨訊息附來的截圖,讀取報告人的暱稱來確定負責人,並保留訊息永久連結,讓每條issue都能回到反饋的起點。它只寫一件事:在同一條會話裡回覆issue編號和連結。Okou不會發到別的頻道、不會發私信,也不會改動任何人的訊息。

GitHub

GitHub整合:Okou提交的那條issue

必需

Okou在你指定的倉庫裡建立issue:標題是根據反饋重新寫過的,而不是照抄原訊息;正文包含描述、復現步驟和預期行為,會話裡提到受影響範圍時也會寫上。它會用你指定的標籤,或根據措辭推斷標籤,給出並解釋優先順序,再指派負責人。提交之前,它會先在未關閉的issue裡搜同樣的現象,找到匹配就改為在原issue下評論。當它還能順手修掉這個bug時,會推一個分支,開一條關聯關閉該issue並請求評審的PR。寫權限只限於你授權的倉庫,範圍也僅此而已:issue、評論,以及提交評審的PR。Okou不會合並、不會強制推送,也不會碰倉庫設定。

Okou、Slack裡的GitHub應用、自動化搭建工具,三者的差別

把一個bug從Slack訊息搬進GitHub,其實有三步:接住反饋、寫出一條能用的issue、把它送到負責人手上。現有方案各自只解決其中一步。

Slack裡的GitHub應用

輸入/github會彈出一個表單,標題、正文、標籤、負責人還是你自己填。它省下了切到瀏覽器的功夫,但寫issue的人依然是你;而對話進行到一半冒出來的表單,正是讓人說出「我待會兒再提」的那點阻力。

自動化搭建工具

無程式碼工具可以在觸發器命中時,把一條Slack訊息複製成一條新issue。它複製的是原始訊息,所以報告人當時怎麼打字,issue就長成什麼樣;而標籤、優先順序、指派和查重的規則,要你自己逐個頻道定義並長期維護。

Okou的Slack到GitHub工作流

Okou讀完會話再動手寫issue:一個像樣的標題,復現步驟與預期行為分開,標籤和講得通的優先順序,以及根據報告人暱稱匹配到的負責人。當原因收斂在單個元件裡時,它會繼續往下做,開出帶修復和迴歸測試的PR,關聯到issue,等你評審。提交前它會先查未關閉的issue,遇到重複就改成在原issue下評論,然後在會話裡回覆連結。

讓效果更好的幾個建議

記得寫上負責人的名字,Okou會把Slack暱稱對應到GitHub使用者名稱。
想用指定標籤就直接說明,否則Okou會根據上下文自己判斷。
功能需求同樣適用,把「bug」換成「功能需求」就行。
如果你要的不只是一張單子,就加一句「順便開個PR」。要是問題牽涉面太廣、改動不夠穩妥,Okou會在會話裡告訴你。

常見問題

怎麼從一條Slack訊息建立GitHub issue?

把Slack和GitHub連到Okou,然後在頻道里描述這個bug並Okou。它會讀這條訊息和周圍的回覆,寫出帶標題、復現步驟、預期行為、標籤和優先順序的issue,在你指定的倉庫裡建立,指派負責人,再在會話裡回覆issue編號和連結。你不用填任何表單。

這和Slack裡的GitHub應用有什麼區別?

GitHub應用給你的是一個待填的表單:標題、正文、標籤、負責人還是你寫。Okou直接從對話裡寫出這些內容,提交前會查有沒有相同現象的issue,而且可以按計劃掃描整個頻道,而不是一次只處理一條訊息。

Okou只是建單,還是能把bug直接修掉?

兩者都可以,而且它會告訴你這次做了哪一種、為什麼。issue一定會提交。當會話或程式碼都指向同一個元件、預期行為沒有歧義、並且能先寫出一個會失敗的測試時,它還會開出帶修復和該測試的PR,關聯到issue並請求評審。涉及公共工具函式、設計token,或者需要產品決策的,它只建單不改動。Okou從不合並;每一個修復都以PR的形式交到你手上評審。

Okou能自動把issue指派給對的人嗎?

可以。Okou會拿你提到的名字,或報告人的Slack暱稱,去匹配倉庫裡的GitHub帳號,然後指派。在訊息裡直接寫出負責人是最穩的方式;沒人被點名時,Okou會指派給會話所指向那塊區域的負責人,並在issue裡說明它是怎麼判斷的。

Okou怎麼避擴音交重複的GitHub issue?

動手之前,Okou會按相同的現象、受影響範圍和措辭搜尋未關閉的issue。找到匹配時,它會把這條新的Slack會話連同報告人和時間點作為評論追加到原issue上,並在Slack裡回覆已有issue的連結,而不是再開一條。

如果bug反饋裡沒寫復現步驟,會怎麼樣?

Okou照樣提交issue,避免這條反饋丟失,同時打上需要補復現步驟的標籤,並在Slack會話裡向報告人追問。補充上來的答案,就落在那條已經和issue互相關聯的會話裡。

Okou能定時掃描整個頻道來建單嗎?

可以。把一個或多個頻道指給Okou,再給它一個時間安排,比如每週五下午4點。它會讀這一週的訊息,為每條描述缺陷的訊息提交issue,在重複的issue下評論,跳過功能需求和提問,最後彙報它做了什麼。

不用GitHub,換成Linear或Jira可以嗎?

只要是Okou連上的跟蹤工具,工作流的形態都一樣;本頁講的是GitHub這條路徑,用的是GitHub連接器。Linear的連線方式相同,你在指令裡點名要用哪個工具就行。

下一個bug,不用離開Slack就能建單

連上Slack和GitHub,像跟同事說話那樣把bug講清楚,寫issue和指派交給Okou。原因收斂的時候,PR也會一併等著你。

Okou建個issue:在定時任務對話方塊裡按ESC會直接關掉,哪怕還有沒儲存的修改。應該先問一下確認。指派給Lancy。打上bug、platform標籤。優先順序中。