Skip to content

wproj conf update: support granular component update (models / topology / conf) #276

@seeker-zuo

Description

@seeker-zuo

现状

wproj conf update 目前只支持整体配置更新,一次性同步 confmodelstopologyconnectors 四个目录,所有内容来自同一个 repo。

需求

支持双 Repo 模式:将 models/infra/conf + topology + connectors)拆分到两个独立 repo,各自独立更新。

设计

两种模式,互斥

单 Repo 模式(向后兼容,行为不变):

[project_remote]
enabled = true
repo = "ssh://git@github.com/acme/wp-project.git"
init_version = "1.0"

wproj conf update 全量更新 4 个目录。

双 Repo 模式(新增):

[project_remote]
enabled = true

[project_remote.models]
repo = "ssh://git@github.com/acme/wp-models.git"
init_version = "1.4.2"

[project_remote.infra]
repo = "ssh://git@github.com/acme/wp-infra.git"
init_version = "1.0.0"

目录映射

models repo → ["models"]
infra repo  → ["conf", "topology", "connectors"]

CLI

wproj conf update --group models   # 仅从 models repo 拉取,只更新 models/
wproj conf update --group infra    # 仅从 infra repo 拉取,只更新 conf/topology/connectors/

双 repo 模式下:wproj conf update 不带 --group 报错,必须明确指定。两个 group 各自独立更新,不允许一次性操作两个。

模式判定

ProjectRemoteConf 加载时:

  • modelsinfra 都配置了 → 双 repo 模式
  • 只有顶层 repo → 单 repo 模式(兼容现有配置)
  • 只配置一个 sub-group → 报错,必须两个都配

enabled 在顶层统一控制,两个 group 保持一致的 enable/disable 状态。

状态文件 (.run/project_remote_state.json)

{
  "models": {"version": "1.4.2", "tag": "v1.4.2", "revision": "abc123"},
  "infra":  {"version": "1.0.0", "tag": "v1.0.0", "revision": "def456"}
}

单 repo 模式下 state 也迁移为同样结构(models/infra 指向同一个 revision)。

涉及改动

# 文件 改动
1 wp-motor/wp-config/src/engine.rs ProjectRemoteConf 新增 models/infra 子结构(含 repo + init_version),保留顶层字段兼容旧配置;新增模式判定逻辑
2 src/project_remote/state.rs State schema 改为 models/infra map 结构
3 src/project_remote/mod.rs sync 链路按 group 分支:根据 group 选择 repo、version、tag,只 diff/sync 对应的目录子集
4 src/project_remote/managed.rs managed_dirs_differbackup_managed_dirssync_managed_dirs 增加 dirs: &[&str] 参数
5 src/wproj/args.rs ConfUpdateArgs 新增 --group 参数(models / infra
6 src/wproj/handlers/conf.rs 解析 group,双 repo 模式下 --group 必填,传入 sync 链路

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions