Skip to content
bitzorcas
中EN

Concept

ADR 0605:私有 NuGet Feed 与供应链

Package Source Mapping、短期最小权限 token、带时间戳的代码签名、SBOM/漏洞/许可证证据、客户 Feed 中无源码、禁止浮动版本与净室发布验证。

Last updated

状态

Accepted(2026-07-12)。

背景

在 Framework 与 Platform 迁移到商业 NuGet 交付后,dotnet restore 成为生产供应链的一部分。若包源、凭据、签名、版本与发布产物不可验证,客户项目面临依赖混淆、凭据泄露、包覆盖或不可复现构建的风险。

决策

十条决策定义该供应链:

  1. Package Source Mapping——BitzOrcas.* 包仅发布到认证私有 Feed,由 Package Source Mapping 钉定。
  2. 短期 token——开发机使用 Credential Provider;CI 使用短期工作负载身份或受控 secret。长期 token 与明文凭据绝不进入仓库/模板/镜像/日志。
  3. 最小权限 token——只读、短期、可撤销,按 Customer/Product/Package Prefix/Version Channel 限定范围。
  4. 代码签名 + 时间戳——商业包用代码签名证书加可信时间戳签名;发布管线验证签名并记录 SHA-256、Git commit 与不可变版本。
  5. SBOM/漏洞/许可证——发布前生成并归档 SBOM、依赖漏洞结果、第三方许可证策略结果与 provenance。一个已发布的 PackageId+Version 不可被覆盖。
  6. 客户 Feed 中无源码——客户 Feed 默认不含 .cs、Embedded Source、公开 Source Link 或公开符号包;调试符号进入认证的内部或客户支持符号服务器。
  7. 禁止浮动版本——Consumer Solution 禁止浮动版本;使用统一 SDK/BOM 与锁文件还原。升级通过 bitz-upgrade --plan 展示兼容性影响。
  8. 净室发布验证——从空 NuGet 缓存与隔离 consumer 项目起步;ProjectReference、本地绝对 Feed 与产品仓库路径不参与。
  9. 源生成器打包——作为标准 analyzer/buildTransitive 资产打包;验证 PrivateAssets、诊断与生成输出;生成产物不含商业实现。
  10. Runbook——Feed 高可用、备份、证书轮换、token 泄露与恶意包事件各有 runbook;一次 Feed 故障不得破坏已部署实例的本地 Runtime License 验证。

后果

一次内部 ProjectReference 构建通过不再等于可消费的商业包——独立的 consumer 契约测试成为发布门禁。并非每个源项目都成为公开包;包产品线按外部接口加独立可用模块来设计,避免浅层包森林。本地绝对 NuGet 源与默认的 IsPackable=false 在迁移期收敛。

另见

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%