test(plugins): cover skill mirror lifecycle

This commit is contained in:
2026-06-16 12:24:19 +08:00
parent a9b830d11e
commit a65e59fcb6
7 changed files with 516 additions and 5 deletions

View File

@ -55,7 +55,11 @@ class SkillPublisher:
version.tree_hash = hash_plugin_skill_tree(version_dir).skill_tree_hash
self.store._write_json(version_dir / "version.json", version.to_dict())
else:
self._copy_base_supporting_files(draft, next_version)
self._copy_uploaded_supporting_files(draft, next_version)
version_dir = self.store.root / draft.skill_name / "versions" / next_version
version.tree_hash = hash_plugin_skill_tree(version_dir).skill_tree_hash
self.store._write_json(version_dir / "version.json", version.to_dict())
self.store.set_current_version(skill_name, next_version)
spec = self.store.get_skill_spec(skill_name)
@ -202,6 +206,23 @@ class SkillPublisher:
target.parent.mkdir(parents=True, exist_ok=True)
shutil.copyfile(source, target)
def _copy_base_supporting_files(self, draft: SkillDraft, version: str) -> None:
if not draft.base_version:
return
source_root = self.store.root / draft.skill_name / "versions" / draft.base_version
if not source_root.exists() or not source_root.is_dir():
return
target_root = self.store.root / draft.skill_name / "versions" / version
for source in sorted(source_root.rglob("*"), key=lambda item: item.relative_to(source_root).as_posix()):
if not source.is_file() or source.is_symlink():
continue
relative = source.relative_to(source_root)
if relative.as_posix() in {"SKILL.md", "version.json", "upstream.json"}:
continue
target = target_root / relative
target.parent.mkdir(parents=True, exist_ok=True)
shutil.copyfile(source, target)
def _copy_plugin_update_supporting_files(self, draft: SkillDraft, version: str) -> None:
plugin_id = str(draft.provenance.get("plugin_id") or "")
tree_hash = str(draft.provenance.get("new_upstream_tree_hash") or "")