Files
jkooe 9f95560268 build(ci): 控制台安装包接入 Release —— 修「修复发了但没人拿得到」
## 问题
`scripts/release.mjs` 只产出 agent / cli / mcp,`apps/console` 从来没接进去。
后果很具体:今天修的 6 个真机缺陷(转圈、状态卡死、退出确认、复用、断管、ws/wss)
**只存在于 CI artifact**,而 artifact retention 是 7 天。
用户从 Release 页面下载到的,永远是旧控制台。

## 做法
1. `console-windows.yml` 加 `workflow_call:`,并新增 `publish` job:
   - `if: startsWith(github.ref, 'refs/tags/v')` —— 只有 tag 才发布,日常分支构建跳过
   - 下载两架构产物 → 断言安装包数 ≥ 4(exe+msi × x64/arm64),少了直接报红,
     **绝不静默少发一个架构**
   - `gh release upload --clobber` 挂到 `release.mjs` 建好的那个 Release
   - release.mjs 在本地跑、与本工作流并行,故先轮询等 Release 出现(最多 10 分钟);
     等不到就给 `::warning::` 并跳过,不阻塞流水线
2. 新增 `console-release.yml`:只认 `push: tags: ['v*']`,`uses:` 调用上面那个工作流

## 为什么不直接把 tags 写进 console-windows.yml
它带 `paths` 过滤。`paths` 与 `tags` 并存时,tag 推送会被路径判定挡掉而**静默不触发** ——
失败形态是「什么都没发生」,最难察觉。拆成「日常验证走分支 + 发布只认 tag」最稳。

验证:PyYAML 解析通过;triggers / jobs 结构正确;shell 转义已核对。
(tag 发布路径需真打一次 tag 才能端到端验证,见下文待办)
2026-10-17 23:12:44 +08:00

29 lines
922 B
YAML

name: Console Release
# 控制台发布工作流(tag 触发)。
#
# 为什么不把 `tags` 直接写进 console-windows.yml 的 push 里
# ------------------------------------------------
# 那个工作流带 `paths` 过滤。`paths` 与 `tags` 同时出现时,tag 推送会被
# 路径判定挡掉而**静默不触发** —— 这是 GitHub Actions 的经典坑,
# 且失败形态是「什么都没发生」,最难察觉。
# 故拆成:日常验证走 console-windows(分支 + paths),发布走本工作流(只认 tag)。
#
# 交付物去向:本工作流构建两台架构的安装包,再由 console-windows 里的
# `publish` job 补挂到 `scripts/release.mjs` 创建的那个 Release 上。
on:
push:
tags:
- 'v*'
# 发布需要写 Release
permissions:
contents: write
jobs:
console:
uses: ./.github/workflows/console-windows.yml
permissions:
contents: write