跳到主要內容

管理 Pull Request

審查 pull request 可能會花費相當多的時間。在某些情況下,審查所需的時間可能比某人編寫和提交變更所需的時間還要多!因此,有必要做一些初步工作,以確保每個 pull request 都處於良好的審查狀態。

一個 pull request 應包含三個主要部分

  • 摘要。這有助於我們理解變更背後的動機。
  • 變更日誌。這有助於我們編寫發行說明。它也可以作為您的變更的簡要摘要。
  • 測試計畫。這可能是您的 pull request 中最重要的一部分。測試計畫應為可重現的逐步指南,以便審查者可以驗證您的變更是否如預期般運作。為使用者可見的變更附上螢幕截圖或影片也是一個好主意。

任何 pull request 都可能需要更深入地了解您可能不熟悉的 React Native 的某些領域。即使您覺得自己不是審查 pull request 的合適人選,您仍然可以透過新增標籤或要求作者提供更多資訊來提供幫助。

審查 PR

Pull Request 需要在使用 GitHub 的審查功能進行審查和批准後才能合併。雖然任何人都有能力審查和批准 pull request,但我們通常只在收到來自貢獻者之一的批准時,才認為 pull request 已準備好合併。

因此,您找到了一個您有信心審查的 pull request。請使用 GitHub 審查功能,並清楚且禮貌地溝通任何建議的變更。

考慮從已被標記為缺少變更日誌或測試計畫的 pull request 開始。

  • 看起來缺少變更日誌的 PR - 看一看,看看您是否可以透過編輯 PR 自己新增變更日誌。完成後,移除「Missing Changelog」標籤。
  • 缺少測試計畫的 PR - 開啟 pull request 並尋找測試計畫。如果測試計畫看起來足夠,請移除「Missing Test Plan」標籤。如果沒有測試計畫,或看起來不完整,請新增評論,禮貌地要求作者考慮新增測試計畫。

pull request 必須通過所有測試才能合併。它們在 main 和 pull request 上的每次提交時都會執行。幫助我們讓 pull request 準備好進行審查的一個快速方法是搜尋未通過預提交測試的 pull request,並判斷它們是否需要修訂。失敗的測試通常列在執行緒的底部附近,在「Some checks were not successful.」下方。

  • 快速瀏覽一下 main 上的最新測試執行main 是綠色的嗎?如果是,
    • 看起來失敗可能與此 pull request 中的變更有關嗎?請作者調查。
    • 即使 main 目前是綠色的,也要考慮 pull request 中的提交可能是基於 main 已損壞的時間點的提交。如果您認為可能是這種情況,請要求作者將其變更重新基於 main 之上,以便引入在他們開始處理 pull request 後可能已落地的任何修復。
  • 如果 main 似乎已損壞,請尋找任何標記為「CI Test Failure」的 issue
    • 如果您發現與 main 上的失敗相關的 issue,請回到 pull request 並感謝作者提出這些變更,並讓他們知道測試失敗可能與他們的特定變更無關(不要忘記連結回 CI Test Failure issue,因為這將有助於作者知道他們何時可以再次嘗試執行測試)。
    • 如果您找不到描述您在 main 上觀察到的問題的現有 CI Test Failure issue,請提交新的 issue 並使用「CI Test Failure」標籤,讓其他人知道 main 已損壞(請參閱此 issue 作為範例)。

我們如何優先處理 PR

Meta 的 React Native 團隊成員旨在快速審查 pull request,大多數 PR 將在一週內得到回覆。

PR 如何合併?

React Native GitHub 儲存庫實際上是 Meta 其中一個 monorepo 中子目錄的鏡像。因此,pull request 並非以傳統意義上的方式合併。相反,它們需要作為 「diff」 匯入到 Meta 的內部程式碼審查系統中。

匯入後,變更將經過一連串的測試。其中一些測試是 land-blocking,表示它們需要成功才能合併 diff 的內容。Meta 始終從 main 執行 React Native,並且某些變更可能需要 Facebook 員工將內部變更附加到您的 pull request,然後才能合併。例如,如果您重新命名模組名稱,則必須在同一個變更中更新所有 Facebook 內部呼叫點才能合併它。如果 diff 成功落地,則變更最終將由 ShipIt 作為單次提交同步回 GitHub。

Meta 員工正在使用 GitHub 的自訂瀏覽器擴充功能,可以透過兩種方式匯入 pull request:pull request 可以「landed to fbsource」,表示它將被匯入,並且產生的 diff 將自動批准,並且在沒有任何失敗的情況下,變更最終將同步回 main。pull request 也可以「imported to Phabricator」,表示變更將被複製到內部 diff,這需要進一步的審查和批准才能落地。

自訂瀏覽器擴充功能的螢幕截圖。「Import to fbsource」按鈕用於在內部匯入 Pull Request。

機器人

當您審查和處理 pull request 時,您可能會遇到一些 GitHub 機器人帳戶留下的評論。這些機器人已設定為協助 pull request 審查流程。請參閱機器人參考以了解更多資訊。

Pull Request 標籤

  • Merged:應用於已關閉的 PR,以指示其變更已併入核心儲存庫。此標籤是必要的,因為 pull request 並非直接在 GitHub 上合併。相反,包含 PR 變更的修補程式會被匯入並排隊等待程式碼審查。一旦獲得批准,將這些變更應用於 Meta 內部 monorepository 之上的結果將作為新的提交同步到 GitHub。GitHub 不會將該提交歸因於原始 PR,因此需要一個標籤來傳達 PR 的真實狀態。
  • Blocked on FB:PR 已匯入,但變更尚未應用。