`vendor/MetasequoiaImeEngine` submodule 改为 `engine/` 目录,导入的是 product-lock.json 原本钉住的提交 c810d201,逐文件核对过 blob,因此这是一次 搬迁而不是引擎升级。引擎自己的嵌套 submodule(googlepinyinime-rev、utfcpp、 miniaudio)按各自 gitlink 一并展开,来源与提交见 engine/UPSTREAM.md。 Windows 专门化裁掉了不属于本产品的部分:whisper.cpp 与本地推理 provider、 macOS 示例宿主、整个 dictionary/ 建库流水线、上游 CI 与 release-please 配置。 词库仍按 product-lock.json 在构建时取发布产物。 引擎不再进 product-lock.json:没有 gitlink 就没有可比对的东西,锁里写一个上游 commit 等于宣称这棵树仍等于上游,而第一个 Windows 专门化改动落地时这句话就假了。 verify-contracts / verify-checkout 随之移除,verify-published 保留。 CI 与工具链:引擎源码并入根 scripts/format.sh(删掉引擎自己的那份,避免两套排除 列表分叉);引擎 voice.yml 里的 silero_vad.onnx 摘要校验移到本仓 lock job; engine-bump-triage 工作流与其测试删除;gitsubmodule 的 dependabot 频率由 daily 改为 monthly。 README、README.en、AGENTS.md、CONTRIBUTING、docs/product-release.md 及各子目录 文档同步说明新的位置与边界。
59 lines
2.8 KiB
Python
59 lines
2.8 KiB
Python
"""Run local setup in a moved checkout without replacing the reviewed build project."""
|
|
import json
|
|
import os
|
|
from pathlib import Path
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
class PrepareEnvironmentTests(unittest.TestCase):
|
|
def exercise(self, component):
|
|
with tempfile.TemporaryDirectory(prefix='msime moved checkout ') as directory:
|
|
root = Path(directory)
|
|
target = root / component
|
|
shutil.copytree(ROOT / component / 'scripts', target / 'scripts')
|
|
for name in ('CMakeLists.txt', 'CMakePresets.json'):
|
|
shutil.copy2(ROOT / component / name, target / name)
|
|
(target / 'tests').mkdir()
|
|
cmake = target / 'CMakeLists.txt'
|
|
cmake.write_text(cmake.read_text() + '\n# locally reviewed build setting\n')
|
|
original = cmake.read_bytes()
|
|
presets_file = target / 'CMakePresets.json'
|
|
presets = json.loads(presets_file.read_text())
|
|
presets['configurePresets'].append({'name': 'local-extra', 'inherits': 'vcpkg-release',
|
|
'cacheVariables': {'LOCAL_SETTING': 'kept'}})
|
|
presets_file.write_text(json.dumps(presets, indent=2))
|
|
env = dict(os.environ, VCPKG_ROOT=str(root / 'custom vcpkg'), BOOST_ROOT=str(root / 'custom boost'))
|
|
for _ in range(2):
|
|
subprocess.run([sys.executable, str(target / 'scripts/prepare_env.py')],
|
|
cwd=directory, env=env, check=True, capture_output=True)
|
|
self.assertEqual(original, cmake.read_bytes())
|
|
actual = json.loads(presets_file.read_text())
|
|
by_name = {p['name']: p for p in actual['configurePresets']}
|
|
self.assertEqual(by_name['local-extra']['cacheVariables']['LOCAL_SETTING'], 'kept')
|
|
self.assertIn('vcpkg-release', by_name)
|
|
expected = (root / 'custom vcpkg/scripts/buildsystems/vcpkg.cmake').as_posix()
|
|
self.assertEqual(by_name['vcpkg-release']['cacheVariables']['CMAKE_TOOLCHAIN_FILE'], expected)
|
|
clangd = (target / '.clangd').read_text().replace('\\', '/')
|
|
self.assertIn('engine/utfcpp/source', clangd)
|
|
if component == 'server':
|
|
self.assertIn('engine/voice/include', clangd)
|
|
self.assertIn('engine/voice/third_party/miniaudio', clangd)
|
|
self.assertIn('/ui/include', clangd)
|
|
self.assertFalse((target / 'tests/CMakePresets.json').exists())
|
|
|
|
def test_tsf_environment_preserves_the_monorepo_build(self):
|
|
self.exercise('windows')
|
|
|
|
def test_server_environment_resolves_shared_components(self):
|
|
self.exercise('server')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|