Skip to content

Fix an issue where the latest action failed to produce an .msix package. - #18

Merged
Iamliuxiaozhen merged 5 commits into
mainfrom
fix-msix-action
Nov 14, 2026
Merged

Iamliuxiaozhen merged 5 commits into
mainfrom
fix-msix-action

Conversation

@Iamliuxiaozhen

Copy link
Copy Markdown
Member

No description provided.

v1.0.2 的 Release 少一个 MSIX:makeappx 因为 AppxManifest 的 Publisher
不是合法 DN 而失败(C00CE169),但 PowerShell 不会因原生进程的退出码中断,
失败被静默跳过,job 仍然绿,最终只发布了 3 个安装包。

- build.yml: Publisher 改为从 PFX 读取证书 Subject('CN=..., OU=..., C=CN'
  的规范形式);openssl 的 RFC2253 输出逗号后没有空格,MakeAppx 会拒绝。
  PFX 读取失败时回退到 openssl 输出并补上空格。
- build.yml: 客户端构建与打包步骤显式检查 npm/gulp/7z 的 $LASTEXITCODE;
  上传前断言 exe/zip/msi/msix 四个文件都存在且非空。
- gulpfile.vscode.win32.ts: light.exe 把 ICE 警告编码进退出码(如 204),
  改成「产物存在即成功」,避免把警告当成失败,也便于上层严格检查退出码。
- release.yml: 创建 Release 前核对完整产物清单,缺一个就中断。

Assisted-by: DeepSeek Harness:DeepSeek-V41-flash
MSI/MSIX 原先和 exe/zip 在同一个 Windows job 里串行执行,安装包出问题时
必须重跑近 40 分钟的整条构建。现在拆成 build + installers 两个 job:

- build 只产出客户端、exe、zip,并上传 release-win32-x64;
- installers 复用该工件里的 zip 还原已签名的客户端,只打 MSI/MSIX 并签名,
  上传 release-win32-installers-x64(同样是 release-* 前缀,发布流程无需改动);
- installers 只需要 node_modules 来跑 gulp,所以先复用仓库已有的
  node_modules-windows 缓存(pr-node-modules 在 main 上预热),命中时直接解包,
  省掉约 11 分钟的 npm ci;只有未命中时才 npm ci 并把结果存回缓存;
- 签名证书准备抽成 .github/actions/prepare-windows-signing,两个 job 共用同一份
  PFX 与 Publisher 逻辑,避免修复被复制成两份。

Assisted-by: Tare CN:Auto
vscode-win32-x64-min 里的 patchWin32Dependencies 会用 signtool.exe 剥掉依赖库上
失效的 Authenticode 签名,而 GitHub 的 Windows 镜像不保证 Windows SDK 的 bin 在
PATH 中,于是 spawn signtool.exe ENOENT、整条客户端构建失败。

以前这个失败被下一条 npm 命令(inno-updater)的退出码掩盖,步骤仍然显示成功;
上一个提交加上 $LASTEXITCODE 检查后才暴露出来。

- build.yml: 客户端构建前把最新版本 SDK 的 x64 目录写进 GITHUB_ENV 的 PATH;
  找不到 signtool 时直接给出明确错误。

Assisted-by: Tare CN:Auto
- installers job 在存在签名密钥时,先把生成的 MSIX 复制到 artifacts 之外,
  MSI/MSIX 签名完成后再以 BlockIDE-win32-x64-<version>-unsigned.msix 放回
  artifacts,避免未签名的那份被 signtool 就地改写;
- MSI 保持只发布签名版本;
- release.yml 的产物校验补上未签名 MSIX,缺了直接失败。

Assisted-by: Tare CN:Auto
copilot 扩展同时携带各平台的原生模块(例如
clipboard.darwin-x64.node),patchWin32Dependencies 会对所有 **/*.node
调 rcedit,遇到 Mach-O 等非 Windows 二进制就失败:

  rcedit.exe failed with exit code 1. Unable to load file: "...clipboard.darwin-x64.node"

现在先读文件头两个字节,不是 MZ(PE)就跳过并打印日志,signtool / rcedit
只作用于真正的 Windows 二进制。

Assisted-by: Tare CN:Auto
@Iamliuxiaozhen
Iamliuxiaozhen marked this pull request as ready for review November 14, 2026 04:13
@Iamliuxiaozhen
Iamliuxiaozhen merged commit a6d49b6 into main Nov 14, 2026
62 checks passed
@Iamliuxiaozhen
Iamliuxiaozhen deleted the fix-msix-action branch November 14, 2026 04:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant