那組除了真正重要的那件事之外,其他每件事都對的驗證碼

把一套只能在 Windows 上跑的桌面版驗證器 App,移植成跨平台 CLI(就是 winauth-cli 文件站背後那個專案),對每個帳號都能算出看起來完全正常、長度跟字元都對的驗證碼——但其中一種特定帳號類型的碼,其實從來就不可能通過驗證,因為它整個跳過了那個帳號類型專屬、不標準的演算法。

This article is also available in English: English version——內容相同,僅語言不同。

把一套只能在 Windows 上跑的桌面版驗證器 App,移植成跨平台 CLI (就是 winauth-cli 文件站背後那個專案),發布版本乾淨地跑起來, 對每個帳號都能算出長度跟形狀完全正確的驗證碼,每一個表層檢查都通過。 其中一種特定帳號類型的碼,其實從來就不可能真的通過驗證—— 唯一能抓到這件事的方法,是自己寫一份獨立的參考實作, 直接把兩邊的輸出拿來對比。

先出現的兩個 CI 問題,都是真的,但都不是真正的 Bug

在真正的問題浮現之前,得先解決兩個獨立的發布流程問題。第一個看起來像是, CI 悄悄失敗——一次發布看起來就是沒有發生——結果其實是正確的行為: 發布任務被設定成只在特定的標籤格式觸發,而那次觸發的推送, 是推到主分支,不是標籤,所以本來就不該有任何動作。真正推一個標籤上去之後, 浮現了第二個貨真價實的 bug:發布步驟執行了一個「建立發布」的指令, 假設自己已經有一份簽出的原始碼副本,但實際上從來沒有真的簽出過, 直接以一個「不是 git repository」的錯誤失敗。這次是用手動發布建置好的成品, 當作那次發布的暫時解法。

Unlock this article to keep reading, or subscribe for unlimited access to everything. See Pricing for details.