Skip to content

fix(ci): 把 live-e2e 的 runner.temp 移出 job 级 env,修掉全分支 startup failure - #3432

Merged
yinlianghui merged 1 commit into
mainfrom
claude/issue-3425-live-e2e-startup
Aug 6, 2026
Merged

fix(ci): 把 live-e2e 的 runner.temp 移出 job 级 env,修掉全分支 startup failure#3432
yinlianghui merged 1 commit into
mainfrom
claude/issue-3425-live-e2e-startup

Conversation

@yinlianghui

Copy link
Copy Markdown
Collaborator

Fixes #3425

根因

.github/workflows/live-e2e.yml 第 61 行,在 job 级 env: 里读了 runner 上下文:

    env:
      LIVE_BACKEND_DIR: ${{ runner.temp }}/live-backend

job 级 env: 求值时 runner 上下文尚不存在。actionlint v1.7.7 对 origin/main 原文件的判定(exit 1):

.github/workflows/live-e2e.yml:61:29: context "runner" is not allowed here.
available contexts are "github", "inputs", "matrix", "needs", "secrets",
"strategy", "vars". [expression]

关键在于:这是整份 workflow 文件校验失败,而不是某个 step 失败。GitHub 还没能解析 on: 就先判定文件非法,于是对每一次 push 都记一条 0 job / 0s 的 startup failure —— 包括 gh-readonly-queue/* 合并队列分支,把每个 PR 和每次 main push 的 checks 列表都染红一格。

两个推论

  1. continue-on-error: true 救不了它。 那是 job 级属性,而这里根本没有任何 job 被创建,红色出在 workflow 启动阶段。
  2. 该 lane 自 ci: 三条 live e2e 以 non-required lane 进 CI——真后端来自已发布的 rc.2 制品 (#2835) #3325 落地起从未跑起来过一次。pull_request 事件过滤,这个 workflow 的历史 run 数是 0;它从未声明过 push 触发器,所有 182 个 run 编号全部是 push 上的 startup failure 噪声。换句话说,它一次都没有真正冒烟测试过「console x 真后端」—— 这比「红噪声」本身更值得记一笔。

改动

  • job 级 env: 只保留三个字面量常量。
  • LIVE_BACKEND_DIR 下沉到唯一消费它的 Start ObjectStack backend step 的 step 级 env: —— 该处读 runner 是合法的。
  • cache 的 path:/key: 与 artifact 上传的 path: 本就写在 with: 里、一直合法,未动。
  • job 级 env: 上方补了一段告警注释,写明此处为什么不能出现 runner.*,避免下一个人挪回去。

验证(方向在运行前先行预测)

对象 actionlint v1.7.7
origin/main 原文件 报 L61 runner 上下文错误,exit 1
本 PR 无告警,exit 0
全量 .github/workflows/*.yml exit 0 —— live-e2e.yml 是仓库里唯一一份校验不过的 workflow,与 issue 观察到的「只有这一格红」吻合

push 事件的预期方向值得说清楚: 修好后本分支的「0 红」不是靠 job 跑绿拿到的,而是靠这条 run 不再存在 —— 文件合法后 GitHub 能正确解析 on:,而其中并没有 push:。实测本分支 push 后 live-e2e 的 run 数为 0(对比:修复前每个分支每次 push 都会多出一条 startup failure)。真正会产出 job 的,是本 PR 的 pull_request 事件 run。

纯 CI bug 修复、不触及任何已发布包,按 AGENTS.md:151 不需要 changeset。


Generated by Claude Code

.github/workflows/live-e2e.yml 自 #3325 落地起就从未跑起来过一次:它在
job 级 env 里写了 `LIVE_BACKEND_DIR: ${{ runner.temp }}/live-backend`,而
`runner` 上下文在 job 级 env 求值时尚不存在(GitHub 的 contexts
availability 表在此处只允许 github / inputs / matrix / needs / secrets /
strategy / vars)。这不是某个 step 失败,而是**整份 workflow 文件校验不
通过**,于是 GitHub 无法解析 `on:` 就先判定文件非法,对每一次 push 都记
一条 0 job / 0s 的 startup failure —— 包括 gh-readonly-queue/* 合并队列
分支,把每个 PR 和每次 main push 的 checks 列表都染红一格。

两个由此推出的事实:

1. `continue-on-error: true` 救不了它。那是 job 级属性,而这里根本没有
   任何 job 被创建,红色出在 workflow 启动阶段。
2. 该 lane 从未真正冒烟测试过任何东西。按 `pull_request` 事件过滤,这个
   workflow 的历史 run 数是 **0**;它声明的 push 触发器压根不存在,所有
   182 个 run 编号全是 push 上的 startup failure 噪声。

修法保持最小:job 级 env 只留三个字面量;`LIVE_BACKEND_DIR` 下沉到唯一
消费它的 "Start ObjectStack backend" step 的 step 级 env —— 那里读
`runner` 是合法的。cache 的 `path:`/`key:` 与 artifact 上传的 `path:` 本
就在 `with:` 里,一直合法,未动。同时在 job 级 env 上方留下一段告警注释,
避免下一个人把它挪回去。

验证(actionlint v1.7.7,方向在跑之前先行预测):
- origin/main 原文件 → `live-e2e.yml:61:29: context "runner" is not
  allowed here` (exit 1)
- 本次修改后 → 无告警 (exit 0)
- 对 .github/workflows/*.yml 全量跑 → exit 0,说明 live-e2e.yml 是仓库
  里唯一一份校验不过的 workflow,与 issue 观察到的"只有这一格红"吻合。

纯 CI bug 修复、不触及任何已发布包,按 AGENTS.md:151 不需要 changeset。

Fixes #3425

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GTRjn8xBqp75dk7kFupVRt
@vercel

vercel Bot commented Aug 6, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectui Ignored Ignored Aug 6, 2026 3:46am

Request Review

Copy link
Copy Markdown
Collaborator Author

推送后实测:该 lane 历史第一个真实 run

run 31069352699(event pull_request,run number 188):

层级 结论
workflow run success —— continue-on-error: true 按设计生效
job Live E2E (informational) failure
本分支 push 事件的 live-e2e run 数 0(修复前:每次 push 一条 startup failure)

{"jobs":{"total_count":0}} 变成 1 个 job、16 个真实 step。基础设施部分全绿:

  • Start ObjectStack backend (published packages)success(即本 PR 改动的那个 step,LIVE_BACKEND_DIR 下沉后 start-backend.sh 正常起真后端)
  • Build console / Serve console (vite preview) / Playwright 缓存与依赖 → 全部 success
  • 登录也通:[live-e2e] authenticated as admin@objectos.ai

但用例本身有 2 条真红 —— 已独立立单,本 PR 不夹带修复

4 tests,2 passed / 2 failedaction-modalscreen-flow 通过;master-detail.spec.ts 的两条在 beforeEach 同一处挂掉:

strict mode violation: getByRole('heading', { name: 'New Project + Tasks' })
resolved to 2 elements   (页面级 h1 + header 里的 h1)
at e2e/live/master-detail.spec.ts:33

这不是本 PR 引入的 —— 它是这条 lane 从来没跑过、因而一直没人看见的既有问题,正好印证 issue #3425 里那句「真故障若混进该 lane 将不可见」。按 Prime Directive #10 已独立立单:#3434(未指派,交 PM 三方定夺是收窄 spec 定位器,还是修渲染侧重复 h1 的 a11y 缺陷)。

本 PR 的范围仅限 workflow 启动故障,文件围栏 .github/workflows/live-e2e.yml 未越界。


Generated by Claude Code

@yinlianghui
yinlianghui marked this pull request as ready for review August 6, 2026 03:52
@yinlianghui
yinlianghui added this pull request to the merge queue Aug 6, 2026
Merged via the queue into main with commit 7c2950a Aug 6, 2026
15 of 16 checks passed
@yinlianghui
yinlianghui deleted the claude/issue-3425-live-e2e-startup branch August 6, 2026 03:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[ci] live-e2e.yml 在所有分支上以 0 jobs / 0s 失败(workflow 级启动故障),红噪声遍布每个 push 与合并队列分支

2 participants