GitHub 在 2026 年 10 月 14 日將 workflow dependency lockfiles 公開預覽;這項功能固定已接入工作流的依賴提交,不會鎖住 Mac Runner、macOS 或 Xcode。GitHub 公告也明確提醒:鎖定提交不代表依賴本身安全。建議先在單一儲存庫試行,並把 Runner 與工具鏈另行治理。

適合正在維護 GitHub Actions macOS/Xcode 流水線、擔心 Action 標籤或分支移動的 CI 工程師。
也適合評估預覽功能導入方式的 DevOps 工程師,以及負責依賴審查、Runner 環境治理或組織政策的研發平台負責人。

最後更新於 2026 年 10 月 24 日;預覽狀態、支援範圍與維護方式核對自 GitHub 公告及官方鎖文件說明。

01

GitHub Actions workflow lockfile 固定的是依賴提交

當工作流以可移動的標籤或分支引用 Action,之後該標籤或分支可能指向不同提交。鎖文件的用途,是為已接入工作流記錄具體依賴提交,讓團隊能檢查解析結果與變化;它不是把整個 CI 執行環境封裝起來的映像檔,也不是安全認證。

工作流中的對象 lockfile 涵蓋範圍 還需要另行管理的項目
工作流直接引用的 Action 記錄已接入依賴所解析的提交 審閱 Action 來源、權限與變更
Action 呼叫的其他 Action 納入支援範圍內的傳遞依賴提交 確認依賴變動是否符合預期
復用工作流 呼叫端與被呼叫工作流依其各自的依賴關係維護 由定義工作流的儲存庫管理內部依賴
macOS Runner 與 Xcode 不屬於工作流依賴鎖定範圍 Runner 標籤、映像、macOS、Xcode 與 SDK

官方說明涵蓋已接入工作流的 Actions、傳遞依賴與復用工作流依賴,並指出鎖定不能證明依賴安全。工作流依賴鎖文件文件亦提示這項功能仍在公開預覽,支援內容可能調整。換言之,GitHub Actions workflow dependency lockfile 解決的是依賴解析可追溯性,而不是建置節點的完整重現性。

02

直接引用與傳遞依賴要一起審查

只看工作流裡的頂層 uses,可能漏掉 Action 繼續呼叫的其他 Action。接入鎖文件後,審查者仍應查看鎖文件差異,確認新增、移除或更換的提交是否與預期相符;如果只看最上層的引用名稱,便無法充分掌握依賴鏈的變動。

以下命令可用來檢視工作目錄與鎖文件差異,不代表任何特定 CLI 或鎖文件產生指令:

git status --short
git diff -- .github/workflows/actions.lock

檢視時,先確認工作流引用是否變更,再追查鎖文件中相應的提交差異。若只改了工作流引用、卻沒有同步更新鎖文件,便應先按官方接入與維護流程確認狀態,而不是直接把舊鎖文件當成已完成的依賴更新。官方維護指南提供鎖文件的接入及更新指引。

傳遞依賴也需要納入程式碼審查:頂層 Action 沒有改名,不代表其內部依賴沒有變化。審查者可將差異與此次工作流變更一併檢視,要求更新者說明依賴提交為何改變;對無法解釋的差異,先暫停合併並釐清來源。

03

復用工作流要由定義它的儲存庫負責

跨儲存庫呼叫時,呼叫端的 lockfile 並不等於替另一個儲存庫接管維護責任。呼叫端鎖定自己接入的依賴;復用工作流內部所引用的 Action,則應由保存該工作流定義的儲存庫維護。這樣分工才能讓依賴變更與程式碼審查留在真正擁有變更權限的地方。

情境 鎖文件檢查位置 審查責任
工作流與 Action 都由同一儲存庫維護 該儲存庫的 .github/workflows/actions.lock 工作流維護者檢查直接及傳遞依賴
呼叫另一個儲存庫的復用工作流 呼叫端與復用工作流定義所在儲存庫 雙方各自審查自己維護的依賴
更新復用工作流內部的 Action 定義該工作流的儲存庫 該儲存庫的維護者檢查並更新鎖文件

例如,平台團隊維護共用建置工作流,產品團隊只在自己的工作流中呼叫它。產品團隊應管理自己的呼叫端依賴;平台團隊則應維護共用工作流內部的依賴。若跨儲存庫的變更沒有同步通知,呼叫端的鎖文件即使保持不變,也不能當作共用工作流內部依賴已被審查的證據。

04

Mac Runner、macOS 與 Xcode 必須獨立管理

工作流選擇 Runner 的設定與 Action 依賴鎖定分屬不同層次。runs-on 用來選擇執行工作流的 Runner;它不是鎖定 macOS 映像或 Xcode 的欄位。工作流語法文件說明 Runner 選擇方式,而託管 Runner 文件與自託管 Runner 文件分別說明兩種 Runner 的管理方式。

要讓 macOS CI 的結果較容易追查,除了依賴鎖定,還要記錄實際使用的 Runner 類型、macOS 版本、Xcode 與 SDK。可在工作流輸出中留下工具鏈資訊,例如:

- name: Record Apple toolchain
  run: |
    sw_vers
    xcodebuild -version
    xcodebuild -showsdks

檢查輸出時,應將工具鏈記錄與建置結果一併保存,並確認工作流的 Runner 選擇與團隊管理的執行環境相符。actions.lock 即使沒有差異,Runner 映像或已安裝工具仍可能由各自的管理流程決定;反過來說,固定 Runner 設定也不會替 Action 依賴留下提交記錄。

若你正在比較託管與自託管節點,先依工作流需要的工具鏈、維護責任與環境控制權判斷,不要把兩種治理工作混為一談。NodeMini 的Mac 雲端算力方案可作為了解遠端 Mac 執行環境的入口;但 lockfile 本身不會替代節點端的版本管理與維運。

05

更新鎖文件時保留可審查紀錄

更新 Action 引用後,應同步按官方流程更新鎖文件,並檢查變更有沒有留下過期條目。Dependabot 版本更新文件說明其版本更新設定;GitHub 的預覽公告亦交代已接入工作流依賴的更新處理方式。自動提出更新不代表自動通過安全審查,合併前仍須確認提交來源、差異與權限需求。

以下流程可直接用於試點:

  • 先選定一個有明確維護者的儲存庫,盤點其中的工作流、直接 Action 引用與復用工作流。
  • 依照官方接入與維護指南接入鎖文件,確認預期的 .github/workflows/actions.lock 變更已納入版本控制。
  • 更新 Action 或復用工作流引用後,同步更新鎖文件;提交前以 git diff 檢查工作流與鎖文件是否彼此吻合。
  • 在程式碼審查中確認依賴提交變更的原因、來源及傳遞依賴差異;無法說明的差異先不要合併。
  • 另行記錄 Runner 類型、macOS、Xcode 與 SDK 資訊,避免把工具鏈變化誤判為依賴鎖文件失效。
  • 試點流程穩定後,再評估是否擴大至更多儲存庫或採用組織政策;套用政策前確認適用範圍與例外處理方式。

採用組織政策時,應先閱讀控制工作流執行的政策文件,確認政策適用對象及其執行效果。公開預覽期間尤其不宜把試點結果直接等同於正式版行為;官方文件指出預覽功能可能變動,因此推廣前須重新核對文件與實際檢查結果。

06

以試點結果決定導入範圍

以下條件分支可協助平台團隊選擇下一步:

  • 若工作流直接引用可移動標籤或分支,且依賴變更能由維護者審查,先在單一儲存庫導入 lockfile;若工作流尚未具備可執行的審查流程,先補上責任人與差異檢查再接入。
  • 若使用跨儲存庫復用工作流,且雙方能各自維護依賴,分別在呼叫端與定義端檢查鎖文件;若責任歸屬不清,先確認誰能修改與審查共用工作流。
  • 若主要疑慮是 macOS 或 Xcode 版本漂移,先建立 Runner 與工具鏈的版本記錄;若需要同時降低 Action 引用漂移,再把依賴鎖定納入同一套發布審查。
  • 若組織尚未釐清預覽功能的政策適用範圍,先保留試點並持續人工審查;待官方說明與內部檢查流程一致後,再考慮擴大套用。

GitHub Actions 的安全治理還需要檢查依賴信任與工作流安全。鎖文件能協助確認「使用了哪個提交」,但不會替團隊回答「這個提交是否可信、是否只取得必要權限」。因此它是供應鏈治理的一層證據,不是惡意 Action 偵測器,也不應取代來源審查、權限限制與變更審核。

若你的主要問題是 macOS/Xcode 環境是否可控,應先把 Runner 維護方式與依賴鎖定分開決策;若還需要獨立的 Mac 執行節點,再查看 NodeMini 的遠端 Mac 方案資訊。相較於自行購置並長期維護實機,遠端租用可避免一次承擔硬體採購、閒置時仍占用資本,以及節點維護工作;但若工作負載長期固定且需要實體介面,則應先比較自購與其他執行方式。只有在確實需要額外 Mac 執行環境、又希望按需安排節點時,租用 NodeMini 才值得納入評估;它不會替代 lockfile、工具鏈治理或安全審查。