Skip to content

feat(release): 可复现 portable ZIP、SBOM、NOTICE 与校验和 - #83

Merged
Qiyuanqiii merged 2 commits into
mainfrom
codex/issue-56-release-portable-zip
Aug 16, 2026
Merged

Qiyuanqiii merged 2 commits into
mainfrom
codex/issue-56-release-portable-zip

Conversation

@Qiyuanqiii

Copy link
Copy Markdown
Member

背景

issue #56(父任务 #37):当前 cyberagent-desktop.exe 是开发者预览产物,缺少正式 portable ZIP 的可复现构建、依赖/SBOM、许可证清单、版本元数据和校验和。ADR 0034 要求任何可分发 ZIP 必须携带第三方 notice、SBOM 和哈希。

本次改动

  • cmd/releasegen:生成确定性的 CycloneDX 1.4 SBOM + 第三方 NOTICE,并提供一个固定时间戳(1980-01-01)的确定性 ZIP 打包。
    • SBOM 覆盖实际编译进 desktop 二进制的模块(go list -deps -tags "desktop,production,wv2runtime.error"),不是完整模块图,且序列号由模块图哈希派生(无随机 UUID/时间戳)。
    • 许可证识别 61/61 全覆盖(含 README 里声明 "License: MIT" 的小模块)。
    • 不调用 go mod download,因此不会改写 go.sum。
  • scripts/package-portable-zip.ps1:把 EXE、launcher、guide、LICENSE、README、NOTICE、sbom.json、release-metadata.json 打包成便携 ZIP,并生成 SHA256SUMS 与 portable-zip-manifest.json。ZIP 用 releasegen -zip 固定时间戳,字节级可复现。
  • .github/workflows/release-desktop.yml:release CI(tag / workflow_dispatch)——go mod tidy -diff(lockfile 漂移 fail-closed)→ 构建(含复现校验)→ 打包 → 上传 artifact。
  • README:双语「便携 ZIP 下载与验证」章节 + SmartScreen 预期说明。

测试覆盖

  • cmd/releasegen:license 检测(MIT/Apache/缺失)、SBOM 确定性 + 排序、NOTICE 完整性、确定性 ZIP 字节稳定。
  • 本机验证:go build/go vet/go test ./cmd/releasegen 通过;打包全流程两次运行 ZIP SHA-256 一致;go.sum/go.mod 无漂移。

验证结果

  • go build ./...、go vet ./...、go test ./cmd/releasegen 通过。
  • 便携 ZIP(61 个模块 SBOM,许可证 61/61 识别)生成成功,两次打包 SHA-256 字节级一致(zip_timestamps_reproducible: true)。

安全边界与非目标

  • ZIP 只含 8 个白名单文件,无 secret/用户数据/缓存/调试日志/源映射。
  • SBOM/NOTICE 确定性、无绝对个人路径、无随机标识。
  • 不打包 MSIX 安装/升级(build(windows): 签名 MSIX 安装、升级、卸载与发布证明 #57);不执行真正的 gh release create 上传(需 tag + 人工发布动作);许可证识别是启发式,NOTICE 附全文供人工复核。
  • CI workflow 尚未在 GitHub Actions 的 windows-latest 上实跑(本机已逐 step 复现)。

Refs #56

@Qiyuanqiii
Qiyuanqiii merged commit 02f0be0 into main Aug 16, 2026
5 checks passed
@NanaseInori
NanaseInori deleted the codex/issue-56-release-portable-zip branch September 16, 2026 09:09
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