本文件约定 Servify 在 Windows PowerShell、WSL、Linux 与 CI 下的最小开发流程,目标是减少“同一命令在不同环境下行为不同”的问题。
- Windows 用户:
- 推荐在 PowerShell 中执行 Git 与编辑器操作
- 推荐在 WSL Ubuntu 中执行仓库内的
sh/bash脚本
- Linux 用户:
- 直接使用仓库内
make、go、npm、sh入口
- 直接使用仓库内
- CI:
- 以
.github/workflows/ci.yml为准,默认使用 Ubuntu + bash
- 以
- 构建:
make buildmake build-knowledge-providerbuild-knowledge-provider是build-weknora的通用 alias,用于外部 knowledge provider compatibility 构建
- 运行服务:
make runmake run-cli CONFIG=./config.ymlmake run-knowledge-provider CONFIG=./config.weknora.ymlmake run-weknora CONFIG=./config.weknora.ymlrun-knowledge-provider/run-weknora都仅用于 WeKnora compatibility / mock 回归;日常知识库链路优先使用Dify
- 测试:
./scripts/run-tests.sh./scripts/run-go-race-tests.sh./scripts/run-smoke-tests.shmake dify-acceptancemake weknora-acceptancemake auth-session-acceptancemake validate-acceptance-manifest MANIFEST=./scripts/test-results/<provider>/<mode>/manifest.jsonmake check-acceptance-evidencemake knowledge-provider-acceptancedify-acceptance用于 Dify 主路径验收;默认DIFY_ACCEPTANCE_MODE=mockweknora-acceptance用于 WeKnora compatibility 验收;默认WEKNORA_ACCEPTANCE_MODE=mockauth-session-acceptance用于认证与自助会话链路验收;默认AUTH_ACCEPTANCE_MODE=real- 这些脚本都会把证据写到
./scripts/test-results/... scripts/test-results/**/manifest.json可以作为正式验收索引纳入 git;其他响应文件默认仍保持忽略,避免把本地产物整包提交- 真实环境验收前需显式覆盖
SERVIFY_URL、provider 地址与数据集/凭证
- 生成物与仓库卫生:
make demo-sync-sdkmake generated-assetsmake release-changelog FROM=<previous-tag-or-commit> TO=HEADmake repo-hygienemake local-checkmake release-check CONFIG=./config.ymlmake clean-runtime./scripts/verify-generated-assets.sh
- 如果你在 PowerShell 中调用
bash或sh,请确认它实际指向的是可用环境 - 如果系统里的
bash.exe指向旧 WSL 入口但没有正确绑定发行版,优先使用:wsl -d Ubuntu -- bash -lc "<command>"
- 如果
sh来自 Git Bash / scoop shim,可直接执行简单脚本校验
当 WSL 中的 Git 提示 detected dubious ownership 时,在 WSL 里执行:
git config --global --add safe.directory /mnt/c/Users/cui/Workspaces/servify如果仓库路径变化,请替换为实际路径。
- 仓库通过
.gitattributes统一文本换行策略 - shell 脚本默认使用 LF
- CI 中会用
bash -n校验脚本语法 - 需要执行权限的脚本,在 CI 或 shell 中显式
chmod +x后运行
- 本地运行时输出默认放在
./.runtime/ - 不要把上传目录、临时输出、二进制放到仓库根目录
- 构建产物优先输出到
./bin/ - 需要清理本地运行时目录时,执行
make clean-runtime
- 推荐先跑:
make local-checkmake dify-acceptancemake weknora-acceptance- 发布前再补:
make release-check CONFIG=./config.yml
go test ./apps/server/internal/config ./apps/server/internal/handlersgo test ./scripts -run "Test(WeKnoraIntegrationScript(RealModeRejectsLocalHost|MockModeWritesEvidence)|DifyIntegrationScript(RealModeRejectsLocalHost|MockModeWritesEvidence))$"sh scripts/check-repo-hygiene.sh- 如果改了生成物流程,再补:
sh scripts/regenerate-generated-assets.shsh scripts/verify-generated-assets.sh
make local-check 会输出:
- 当前
sh/bash/node/npm的解析路径 - repo hygiene 与 generated assets 校验结果
safe.directory是否已包含当前仓库- WSL 是否可用,以及当前发行版列表
- 某些 Windows 环境中的
bash可能默认走旧 WSL 入口,导致/bin/bash不可用 - WSL 中的
npm/node可能误连到 Windows 侧安装路径,需要单独检查which node、which npm - PowerShell、Git Bash、WSL 对路径格式和引号处理并不完全一致,复杂命令优先写入仓库脚本