Skip to content

Contract Guard 对 dependabot PR 结构性必红,阻塞所有 actions 版本升级 #443

Description

@ceilf6

现象

.github/workflows/contract-guard.yml 对任何改动 .github/workflows/ 的 PR 都会失败,除非该 PR 同时满足两个条件(scripts/workflows/contract-rules.mjsrepo-harness 规则 + validateStructuredImpactSummary):

  1. 同一个 PR 里带一个 scripts/tests/ 下的契约测试改动;
  2. PR 正文里有结构化的 GitNexus impact summary(Risk level / Critical skeleton changes / GitNexus impact / Verification)。

dependabot 两条都给不出:它不会顺手改测试,PR 正文是它自动生成的 release notes。

证据

当前 3 个 dependabot PR 因此长期红:

失败输出(#371,run 30331781880):

GitNexus contract: failed
- Missing contract test for critical file: .github/workflows/release.yml
- Missing GitNexus impact summary field: Risk level
- Missing GitNexus impact summary field: Critical skeleton changes
- Missing GitNexus impact summary field: GitNexus impact
- Missing GitNexus impact summary field: Verification

影响

一个永远红的 check 不会提高安全性,只会训练维护者忽略 check 面板。repo-guard.yml 出于同样的理由已经跳过 dependabot(github.actor != 'dependabot[bot]')。

建议修复

gitnexus-contract job 加 dependabot 豁免,并在 scripts/tests/workflow-rules.test.mjs 里钉住它。

判定应挂在 PR 作者github.event.pull_request.user.login)而不是 github.actor:维护者一旦对 dependabot 分支执行 update-branch 或补推一次提交,github.actor 就变成维护者本人,用 actor 判定会让这道必然失败的门禁重新出现——这正是本次处理这批 PR 时实际踩到的情况。

dependabot 升级的把关仍然是 CODEOWNERS 人工审阅 + CI(唯一的 required status check)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions