百积木文档
开发指南平台应用、模块与 Bundle 开发

版本创建、市场与交付

创建不可变 Bundle 版本内容,完成审核、市场发布、安装、升级和资源台账验证。

创建项目与定义

先确认本机 CLI:

baijimu --version
baijimu bundle --help
baijimu project create --help
baijimu bundle create --help
baijimu bundle project bind --help

先创建 BUNDLE 项目,检出项目并提交根目录 baijimu.bundle.json,然后创建 Bundle 并建立唯一绑定:

baijimu project create --workspace-id <workspace> \
  --project-type-key BUNDLE --name <projectName>

baijimu project checkout <projectId> --workspace-id <workspace> \
  --directory <directory>

baijimu bundle create --workspace-id <workspace> \
  --bundle-id <bundleId> \
  --name <name> \
  --project-id <projectId>

既有 Bundle 迁移时不重建身份;创建同工作区 BUNDLE 项目、提交源码文件后执行一次:

baijimu bundle project bind <bundle> --workspace-id <workspace> \
  --project-id <projectId>

绑定不可改写,同一个项目也不能绑定到其他 Bundle。bundle update 只修改名称、图标、描述和 Bundle 状态,不接收 Manifest 或权限内容。

修改项目文件并发布时,先遵循 Bundle 修改与发布工作流,固定本机 CLI 对应的 版本文档,并验证当前用户认证与权限。

创建 Bundle 版本

创建版本前确保所有资源版本已经生成,并把精确版本、Bundle 依赖和权限写入 baijimu.bundle.json。提交并推送后使用完整提交 ID:

git rev-parse HEAD

baijimu bundle version create <bundle> --workspace-id <workspace> \
  --version <semanticVersion> \
  --git-commit-id <40-character-commit>

服务端只从绑定项目的指定提交读取 baijimu.bundle.json。创建版本时校验项目类型和归属、资源归属、 精确版本、依赖需求和安装适配,并生成唯一的不可变版本内容 schemaVersion + resources + dependencies。版本内容严格使用这一层规范结构。成功后 同时记录来源项目和提交,且不会自动安装或升级任何工作区。模块没有与这条链路平行的审核、 市场发布或安装入口。

Bundle Version 不包含 environmentKey。公共市场把来源环境作为市场条目的独立不可变元数据保存;安装时 Runtime Plan 再为根 Bundle 和每个依赖解析来源环境,并把实际解析结果写入 Runtime 安装台账。

创建成功后版本内容即不可变,不需要再次发布或冻结。协议中的历史状态名 PUBLISHED 表示版本可用,不表示已上架市场或已经安装。

审核和市场

创建版本和安装不会自动提交审核,也没有独立的工作区审核前置步骤。需要公开分发时, 把状态为 PUBLISHED 的精确 Bundle 版本直接提交公共市场审核:

baijimu bundle market publish <bundle> --workspace-id <workspace> \
  --version-id <bundleVersionId> --request-id <uuid>

requestId 必须是非空 UUID。同一次提交重试复用原 UUID;新的审核申请使用新 UUID。 市场接纳申请后先记录 PREPARE;完成资源快照和定价准备后,再记录 SUBMIT 并进入 PENDING_REVIEW。 随后查询该工作区的公共市场待审记录和指定版本的审核历史:

baijimu bundle review list --workspace-id <workspace>
baijimu bundle review history <bundleVersionId> --workspace-id <workspace>

这两个命令查询市场审核记录,不代表另有一层工作区审批。尚未提交或请求在创建申请前失败时, 审核历史为空;只有 PREPARE 表示提交准备尚未完成。空记录不表示安装失败,也不表示已经审核通过。 “Bundle 版本已创建”“已提交市场审核”和“公共市场已发布”是不同状态。 市场审核由独立审核者完成,发布者不能自行批准或绕过审核。

参数缺失、字段类型错误、非法 UUID、JSON 格式错误等请求错误必须返回 CModel 失败响应, 包含非零 errorCode 和说明错误字段或原因的 data.message,不能返回裸 HTTP 422。 失败时保留 CLI 版本、脱敏后的命令、原 requestId 和错误信息,再核对参数或反馈平台。

直接分发与公共市场是两条独立路径,状态都属于精确 Bundle Version,而不是 Bundle 聚合:

  • OWNER_ONLY:默认值,仅所属工作区可直接安装。
  • TARGETED:只有源工作区明确授权的目标工作区可直接安装。
  • PUBLIC_DIRECT:任意工作区可直接安装,但不会自动上市场,也不代表经过市场审核。

管理精确版本的分发策略:

baijimu bundle distribution get <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId>

baijimu bundle distribution set <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --mode targeted

baijimu bundle distribution grant <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --target-workspace-id <targetWorkspaceId>

baijimu bundle distribution revoke <sourceWorkspace> <bundle> \
  --version-id <bundleVersionId> --target-workspace-id <targetWorkspaceId>

市场上架不要求版本先设为 PUBLIC_DIRECT;任何符合市场条件的 PUBLISHED 版本都可以单独提交审核。 新版本不会继承旧版本的公开模式或定向授权,必须逐版本明确配置。

安装和升级

市场安装仍由 CLI 解析已审核的公共版本:

baijimu bundle install <targetWorkspace> <bundle>

安装发布方授权的精确版本时,传入发布方提供的稳定 bundleId 和版本记录 ID:

baijimu bundle install <targetWorkspace> <bundleId> \
  --version-id <bundleVersionId>

CLI 会先解析与实际安装一致的完整依赖计划,显示每个新增精确版本的发布工作区、分发路径、市场验证状态, 以及整套资源和请求权限。若根版本或任一新增依赖通过 TARGETEDPUBLIC_DIRECT 直接分发且未经过 市场验证,核对完整预览后必须明确确认:

baijimu bundle install <targetWorkspace> <bundleId> \
  --version-id <bundleVersionId> --confirm-unverified

baijimu bundle upgrade <workspace> <bundle> \
  --version-id <bundleVersionId> --confirm-unverified

目标工作区确认不能代替源工作区授权。撤销授权后禁止新的安装和升级;已安装版本继续运行,且卸载、 恢复和资源账本读取不依赖授权仍然有效。

安装或升级后查询资源台账:

baijimu bundle resources <workspace> <bundle>

验证至少包括:

  1. 安装记录引用目标 Bundle 版本。
  2. 版本内容中的模块和平台应用语义版本准确。
  3. 每个物化资源都有明确成功或失败状态。
  4. Bundle 已在目标 Runtime 物化模块,方法可调用。
  5. 平台应用入口可见,平台网页授权可完成。
  6. 如果使用 Bundle 生命周期插件,外部资源已经创建且输出配置正确写入目标资源。
  7. 升级不会改变安装标识、重复创建外部租户或错误复用其他 Runtime 的外部资源。
  8. 已安装依赖的精确版本满足 Bundle 内容中的全部 Cargo 版本需求。
  9. 直接分发时,Operation 记录了目标工作区管理员对未验证版本的明确确认。
  10. 源工作区撤销授权后,新安装和升级失败,但已安装版本仍能读取、运行和卸载。

卸载属于破坏性操作。执行前确认资源台账、共享 Bundle 依赖,以及生命周期插件声明的 外部资源停用、保留和补偿语义。

本页内容