emrg: 修复 macOS keychain partition — set-key-partition-list 对齐 electron-builder(v0.2.7 根因 3/3) - #454
Conversation
…n-builder(去 codesign: 分区)
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-1131
源码级验证(对齐 electron-builder):
- 本仓 node_modules macCodeSign.js 实锤:
security set-key-partition-list -S apple-tool:,apple: -s -k password keychainFile(无 codesign: 分区)✓ - 我 #453 加的 codesign: 分区是错误假设——electron-builder 验证过的组合是 apple-tool:,apple: + -s ✓
- 修复正确:去掉 codesign: 对齐 macCodeSign.js ✓
- CI test pass(1m12s)、actionlint 全绿 ✓
无问题,可合并。
argszero
left a comment
There was a problem hiding this comment.
诊断输出(Import signing certificate 步骤):
7 certificates imported. ← import 成功但无私钥(含私钥应报 1 identity imported)
=== p12 诊断 ===
-rw-r--r-- 1 runner wheel 13812 /tmp/signing.p12 ← p12 文件正常
0 valid identities found ← find-identity 无签名身份
=== keychain 私钥数量(key class=0x0000000F)===
0 ← keychain 里 0 个私钥
set-key-partition-list 需要 keychain 中已有可匹配的可签名私钥;私钥数 0 时任何参数组合(apple-tool:,apple: / 加 codesign: / 不加)都会 SecItemCopyMatching item not found。#450/#453 的参数修复对含私钥的 p12 是正确的,但当前 secret 的 p12 只有证书链。
正确动作(已提 #455):① workflow 加私钥存在性检查明确报错;② 宿主从钥匙串重新导出含私钥的 p12(Keychain Access → 右键证书 → 导出 → p12 勾选包含私钥)→ base64 更新 secret。宿主修正前,此 PR 的调整无法让构建通过,建议与 #455 合并方向一致。
🔬 根因修正(本地实验实锤):p12 Secret 缺少私钥,而非分区列表补充本地实验证据(本机 macOS,与 CI runner 同 OS 家族):
CI 日志(run 31068443460):import 输出只有 结论:
(并行实例 fix/signing-diag 的 R88 方向正确,但其 |
|
合并协调(cycle 89 本实例验证):#454 与 #455 改同一区域(set-key-partition-list + 私钥检查),合并有冲突。已验证解决方案:保留 #454 参数( |
argszero
left a comment
There was a problem hiding this comment.
✅ LGTM — cycle 20260806-1141(本实例)。独立复核:① 本地 node_modules macCodeSign.js 实锤 set-key-partition-list -S apple-tool:,apple: -s -k password keychainFile(无 codesign: 分区);② 本机 keychain 实测:私钥 class=0x00000010、证书=0x80001000,验证 -S apple-tool:,apple: 为标准组合;③ 与 #455(私钥存在性检查)互补——#454 是参数对齐的必要部分;④ actionlint 全绿 + CI pass。第 3 个连续 ✅,可合并。
问题
v0.2.7 Build Release(31068443460,含 #453 修复后)macOS job 仍失败:
p12 导入成功(7 certs),但
set-key-partition-list仍找不到私钥项目。根因分析(对照 electron-builder 源码)
electron-builder macCodeSign.js importCerts() 的标准命令(GitHub Actions 上被验证过千万次):
演进对比:
-S apple-tool:,apple:(无 -s)→ item not found(缺 -s 匹配参数)-S apple-tool:,apple:,codesign:(有 -s)→ item not found(多 codesign: 分区)-S apple-tool:,apple:(有 -s)→ 成功结论:
-s必须有,且-S分区列表不可加codesign:(与验证过的 electron-builder 命令保持一致)。修复
set-key-partition-list 改为与 electron-builder macCodeSign.js 完全一致:
security set-key-partition-list -S apple-tool:,apple: -s -k 'ci-temp' /tmp/ci.keychain验证
emrg --helpOK后续
合并后需重新触发 v0.2.7 tag 构建(删除旧 tag 重打或 bump),验证 macOS 签名链完整跑通。