ci(m266): ci.yml 加夜间定时触发(schedule 17 3 * * *),补 T30 的全量矩阵缺口

- 只新增 schedule,push main / pull_request / workflow_dispatch 三条一字不改
- 文件头写清为什么是 schedule 而不是 push dev(成本/排队 vs T+1 发现延迟),这是故意的取舍
- concurrency.group 带上 github.event_name:定时与 push main 落在同一个 ref 上,
  否则 cancel-in-progress 会让两者互相取消,夜跑被取消 = 那一夜没有结果
- 逐个 job 核过 github.event 依赖:只有 runtime-smoke-macos 的 workflow_dispatch 条件,
  schedule 下按设计跳过;其余 job 无 event 表达式,夜间不空转
This commit is contained in:
AskaEth committed 2026-11-11 22:21:30 +08:00
1 parent 060910c8b7
commit 86746153f9
1 file changed
+33 -1
+33 -1
View File
@@ -10,18 +10,50 @@ name: CI
# 见 DevDocs/00-踩坑记录-p2.md T7)。历史实现只作源码参考,**没有构建方式**(见 README: # 见 DevDocs/00-踩坑记录-p2.md T7)。历史实现只作源码参考,**没有构建方式**(见 README:
# 它的 manifest 整份是 workspace 继承写法,离开 workspace 后连解析都过不了)。 # 它的 manifest 整份是 workspace 继承写法,离开 workspace 后连解析都过不了)。
# ---- 夜间全量矩阵(M266 / T30):为什么是 schedule,而不是 push dev ----
# 上面那套门禁的前提是「有人往 main 推东西」,而本仓的实际节奏是**日常只推 dev**、main 一个月只在
# 发版那一刻动一次 ⇒ 全量矩阵一个月跑一次,一次爆 5 个红,全部是早已存在的平台依赖问题。
# `schedule` 就是补这个缺口的入口:每晚在 main 的末梢上跑一轮,把「平台回归的发现延迟」从一个月
# 压到一天。
#
# **不要顺手把它改成 `push: branches: [dev]`。** 本文件的矩阵 = 两个 OS 的 build release + 两个 OS 的
# test + 两个 OS 的 clippy + fmt + runtime-smoke + update-e2e。挂到 dev 上等于每次提交烧一轮四平台
# 矩阵,成本与排队都不可接受(dev 白天是开发时间);而 24 小时一轮就足以把平台回归压到 T+1。
# 这是**故意的取舍**:抓得住「平台回归 T+1 就能看见」,抓不住「当天的错当天见」。dev 线的快守门
# (fmt / clippy / guards / gpu 自测)在 dev-guards.yml,那边刻意不上全量 test / build,理由见其头部。
#
# schedule 的三条语义边界(省得下次重新查):
# ① 定时只在**默认分支**上生效:cron 跑的是 main 的末梢,dev 上尚未合入的提交不进这一轮
# (这是设计,不是遗漏:dev 的守门在 dev-guards.yml)。且这份文件必须先合进 main,cron 才会
# 第一次响——合并之前一次都不会跑。
# ② 失败可见性与 push 一样:`::error::` 注解由 test 作业的 shell 步骤自己产出,不读 event 上下文;
# 定时任务的失败同样会通知默认分支的维护者。
# ③ 逐个 job 核过 `github.event` 依赖:整个文件只有 runtime-smoke-macos 的
# `if: github.event_name == 'workflow_dispatch'` 看 event,在 schedule 下为假 ⇒ 该 job 跳过
# (它本来就只是手动探针,见其注释);其余 job 与矩阵里没有任何 event 表达式,夜间不会空转。
#
# `cron` 一律 UTC:`17 3 * * *` = 每天 03:17 UTC(UTC+8 的 11:17)。分钟刻意避开 :00 / :30
# ——整点是定时队列最挤的时候。要挪到本地凌晨就把它改成 `17 19 * * *`,其余不用动。
on: on:
push: push:
branches: [main] branches: [main]
pull_request: pull_request:
workflow_dispatch: workflow_dispatch:
# 夜间全量矩阵(M266 / T30,理由与取舍见文件头)。cron 是 UTC;17 分避开整点队列。
schedule:
- cron: '17 3 * * *'
env: env:
CARGO_TERM_COLOR: always CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1 RUST_BACKTRACE: 1
concurrency: concurrency:
group: ci-${{ github.ref }} # 加了 schedule 之后这一行必须带上 event_name:定时运行落在默认分支上,`github.ref` 同样是
# `refs/heads/main`,与「push main」落进同一个组 ⇒ 配上 cancel-in-progress 就是两者互相掐死
# (夜里那轮被白天的推送取消 = 那一夜没有结果,正是本次要填的洞)。带事件名之后:
# push↔push 仍按 ref 互斥(原有行为一字未变),定时自成一列,既不会被推送取消,也不去取消推送。
group: ci-${{ github.event_name }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs: