GitHub Code Scanning default setup 怎麼共用 CodeQL 設定檔?
GitHub Code Scanning 的 default setup 適合先快速開啟掃描,但組織一大,就會遇到「每個 repository 都要排除相同的 generated/ 或 vendor/ 路徑」的維護問題。GitHub 在 2026 年 8 月 4 日讓 default setup 可以套用自訂 CodeQL 設定檔,透過 github-codeql-config-file repository property 集中管理這些規則。
這個功能的價值是保留 default setup 的低維護方式,同時補上額外 queries、排除路徑或 threat model。它不是要求你在每個 repository 重新寫一份 Actions workflow,也不是把 default setup 直接轉成 advanced setup。
github-codeql-config-file 會怎麼合併設定
GitHub 文件的描述是:自訂設定檔會和 default setup 自動產生的內建設定合併。你可以在設定檔中加入額外 queries 或 paths-ignore,而不必為了客製化就放棄 default setup。
一份可以放在中央 repository 的設定檔,例如:
name: "Organization CodeQL configuration"
queries: - uses: security-extended
paths-ignore: - "generated/**" - "vendor/**"這個檔案應該只放團隊確定要共用的規則。先不要把某個 repository 特有的路徑、暫時性 false positive 或實驗 query 直接塞進組織層級,否則排錯時很難知道問題來自中央設定還是專案本身。
用 repository property 指向設定檔
github-codeql-config-file 是 repository property,不是 codeql.yml 自動偵測的特殊檔名。GitHub 文件提供的遠端格式是:
remote=octo-org/security-config@main:codeql.yml也可以先用被分析 repository 內的本地路徑,或在單一 repository 測試遠端設定。實際 rollout 前先確認三件事:
- property 已經在組織中建立,且值是 GitHub Code Scanning 接受的本地或遠端路徑。
- 設定檔所在的 branch、路徑與 repository 可被正確讀取。
- 這個 repository 已經啟用適用的 Code Scanning setup;property 本身不會替你開啟掃描。
如果中央設定檔放在另一個 private repository,GitHub 要求另外設定 Git Source private registry,讓 security features 能讀到它。不要用工作流程裡的長期 token 來繞過這個存取邊界。
先測一個 repository,再推到整個組織
GitHub 官方建議的 rollout 順序是先測試,再設定 organization-wide default。可以照這個流程做:
- 在中央 repository 建立並 review CodeQL 設定檔。
- 為組織建立
github-codeql-config-fileproperty,但先不要立即替所有 repository 設定預設值。 - 只在一個測試 repository 設定 local 或 remote value,等待下一次 Code Scanning 執行。
- 對照新增的 findings、被排除的路徑與原本的語言/query 結果。
- 確認結果可接受後,再把 property 的 default value 設成中央檔案位置。
要特別留意 repository 的明確設定:已有 explicit github-codeql-config-file 值的 repository,會繼續使用自己的值,不會被 organization-wide default 覆蓋。這是 rollout 後最容易出現「為什麼某個 repository 沒跟著改」的原因。
default setup 與 advanced setup 怎麼選
| 需求 | 適合的方式 | 維護重點 |
|---|---|---|
| 先開啟標準 CodeQL 掃描 | default setup | 由 GitHub 管理主要 workflow 與版本 |
| 多個 repository 共用排除路徑與 queries | default setup + repository property | 中央檔案、property scope 與測試 repository |
| 每個 repository 都有不同的工作流程、觸發條件或 runner | advanced setup | 自己維護 Actions workflow、版本與權限 |
如果真正的需求是「所有 repository 都用同一套自訂 query」,先嘗試中央設定檔;如果需求已經包含特殊 trigger、runner、permissions 或建置流程,才重新評估 advanced setup。不要把「需要排除一個資料夾」直接升級成整套 workflow 維護。
上線後的驗證清單
- 先保存一個 repository 在套用 property 前的 scan 結果,作為對照。
- 檢查設定檔的
queries、paths與paths-ignore是否真的符合每個語言與專案結構。 - 確認 private 設定檔的 Git Source private registry 已完成,且沒有把 token 放進 workflow。
- 列出有 explicit property 值的例外 repository,避免以為組織 rollout 已涵蓋全部。
- 把 CodeQL findings 與 GitHub Code Quality 的導入與成本 分開追蹤;前者是掃描設定,後者還包含 active committer、AI credits 與 rulesets。
這次更新提供的是一個中間層:你可以維持 default setup,卻不用接受所有 repository 都只能使用相同預設值。先用單一 repository 驗證設定檔和 findings,再把 property 推廣到組織,會比一次修改所有掃描流程更容易回溯。
常見問題
Q: 使用 github-codeql-config-file 後,還需要自己維護 CodeQL Actions workflow 嗎?
A: 如果你的需求只是把自訂 CodeQL 設定合併到 default setup,不需要因此在每個 repository 新增一份 advanced setup workflow。GitHub 會把設定檔和 default setup 自動產生的設定合併。若你還需要自訂 trigger、runner、permissions 或建置流程,才要另外評估 advanced setup 的維護成本。
Q: 組織設定了 default value,為什麼某些 repository 沒套用?
A: GitHub 文件指出,已經設定 explicit github-codeql-config-file 值的 repository 會繼續使用自己的值,而不是 organization-wide default。rollout 後應列出這些例外,確認它們是刻意保留,還是早期測試留下的設定。
Q: 私有 repository 的中央 CodeQL 設定檔可以直接引用嗎?
A: 可以,但若設定檔位於被分析 repository 以外的 private repository,GitHub 要求設定 Git Source private registry,讓 security features 能存取該檔案。先在一個測試 repository 驗證讀取與掃描結果,再推廣到組織,並避免用長期 token 把這個存取問題藏進 workflow。
參考資料:
GitHub Changelog:Customize code scanning default setup at scale
回報錯字、失效連結,或告訴我你想看的延伸主題。