From 724f8cd788c70f5d1e9db8cb92c6c10ba503688b Mon Sep 17 00:00:00 2001 From: Hoshi Date: Tue, 11 Aug 2026 06:24:51 +0000 Subject: [PATCH] =?UTF-8?q?ci:=20=E9=87=98=E4=BD=8F=20action=20=E7=9A=84?= =?UTF-8?q?=20commit=20SHA=EF=BC=8C=E4=B8=A6=E8=AE=93=20dependabot=20?= =?UTF-8?q?=E5=88=86=E7=B5=84=E3=80=81=E4=B8=8D=E6=8F=90=20major?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 兩件事一起修,因為它們造成的是同一個症狀:**掃描上線後各倉庫湧出大量 更新 PR,其中一部分永遠不會變綠**。 ## 釘錯了對象:tag 物件 vs. commit `github/codeql-action` 與 `aquasecurity/trivy-action` 用的是 **annotated tag**。 `git ls-remote --tags --refs` 拿到的是**標籤物件**的 SHA,不是它指向的 commit ——`--refs` 正好把 `^{}` 那幾行濾掉了。Actions 執行時兩者都解得開(所以 workflow 一直是綠的),但 Dependabot 比對的是 commit,於是每個倉庫的每一顆 這種 pin 都被判定成「落後」,每週各開一個 PR。 `actions/*` 用的是 lightweight tag,標籤與 commit 同一顆,所以那五處本來就 是對的——也就是說這個錯**只出現在一部分 pin 上**,看起來更像上游真的有新版, 而不是我們釘錯了東西。 改成 `refs/tags/^{}` 解出來的 commit,十處 pin 全部對著遠端逐一核對過。 ## 沒有分組:一個相依一個 PR `github/codeql-action` 的四個子 action(init/autobuild/analyze/upload-sarif) 各算一個相依,加上 trivy 是五個,乘以十二個倉庫。補上 `groups` 之後, 每個生態系每週最多一個 PR。 ## major 不自動開 實測 dependabot 替四個倉庫提了 `typescript` 5.9 → 7.0,而 `@astrojs/check` 的 peer 範圍是 `^5 || ^6`——`npm ci` 直接 ERESOLVE,那些 PR 沒有任何一顆 有機會變綠。一個沒有人處理得了的紅燈,最後會連同它旁邊真的紅燈一起被忽略。 major 改由人讀 changelog、一次做完;有漏洞的相依走 Dependabot security updates,是另一條路,不受這個 ignore 影響。 理由與判準見 workspace `decisions/process/掃描的紅燈要有人處理得了.md`。 --- .github/dependabot.yml | 29 ++++++++++++++++++++++++++--- .github/workflows/security.yml | 4 ++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7c9c76e..90e62f9 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,11 +6,31 @@ # ——上游改了 tag 指向就換掉了我們跑的程式,沒有任何審閱——這裡把那件事換成 # 一個看得見、審得到的 PR。 # -# **PR 是草稿以外的形狀由 workspace `AGENTS.md` §1.9 管**:Dependabot 開的是 -# 正式 PR,所以它會跑 CI,紅了就是要處理的。 +# ## 為什麼要分組 +# +# 沒有 `groups` 時 Dependabot **一個相依開一個 PR**,而 +# `github/codeql-action` 的四個子 action(init/autobuild/analyze/upload-sarif) +# 各算一個——光 CodeQL 就是四個 PR,加上 trivy 是五個,乘以十二個倉庫。 +# 那不是「更新被看見」,那是更新被淹掉。 +# +# 分組之後每個生態系每週最多一個 PR。 +# +# ## 為什麼不收 major +# +# major 是一次**遷移**,不是一次更新,而 Dependabot 判斷不了相依圖收不收得下。 +# 實測(2026-08-11):它替四個倉庫提了 `typescript` 5.9 → 7.0, +# 而 `@astrojs/check` 的 peer 範圍是 `^5 || ^6`——`npm ci` 直接 ERESOLVE, +# **那些 PR 沒有任何一顆有機會變綠**。 +# +# 一個沒有人能處理的紅燈,最後會被學會忽略,連同它旁邊那個真的紅燈一起 +# (見 workspace `decisions/process/掃描的紅燈要有人處理得了.md`)。 +# 所以 major 不自動開 PR;要升的時候由人讀 changelog、一次做完。 +# +# **這不影響有漏洞的相依**:那走 Dependabot alerts 與 security updates, +# 與這裡的版本更新是兩條路。 version: 2 updates: - # workflow 裡釘住的 action SHA。 + # workflow 裡釘住的 action SHA。全部收在一個 PR 裡。 - package-ecosystem: "github-actions" directory: "/" schedule: @@ -18,3 +38,6 @@ updates: open-pull-requests-limit: 5 commit-message: prefix: "ci" + groups: + actions: + patterns: ["*"] diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml index 1417641..1b9504f 100644 --- a/.github/workflows/security.yml +++ b/.github/workflows/security.yml @@ -98,7 +98,7 @@ jobs: - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 - name: 掃描相依與設定 - uses: aquasecurity/trivy-action@a9c7b0f06e461e9d4b4d1711f154ee024b8d7ab8 # v0.36.0 + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 with: scan-type: fs scanners: vuln,secret,misconfig @@ -111,7 +111,7 @@ jobs: - name: 上傳到 code scanning(沒有 GHAS 時會失敗,不影響結論) continue-on-error: true - uses: github/codeql-action/upload-sarif@9e3211c9a3b9311dfe05da2ed48eea3386f042dd # v4.37.6 + uses: github/codeql-action/upload-sarif@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6 with: sarif_file: trivy.sarif category: trivy