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
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions