diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 1774f58..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: CI - -# 触发条件: -# - push 到 develop / main -# - 针对 develop / main 的 PR -# -# 为什么单独有这个 workflow: -# 之前仓库里唯一的 workflow 是 docker.yml,它只在打 tag 时构建镜像, -# 既不做 go build 也不跑 go vet,提交能不能编译没人自动盯着。 -# -# ⚠️ 本 workflow 的实际覆盖范围(务必知悉): -# 测试源码按项目策略**不入库**(见 .gitignore 的 `*_test.go`),因此干净克隆里 -# 没有任何 *_test.go,下面的 go test 步骤会打印 "no test files" 后通过。 -# 也就是说:**CI 只能守住"编译通过 + 静态检查通过",守不住行为回归。** -# 行为回归要靠开发者在本地(测试文件所在处)自行执行: -# go test ./... -count=1 -# 如果哪天测试重新入库,把下面的 go test 步骤改成会真正跑起来的形态即可。 -on: - push: - branches: [develop, main] - pull_request: - branches: [develop, main] - -# 同一分支的重复推送取消上一次未完成的运行,省 CI 时间。 -concurrency: - group: ci-${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - build-and-test: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up Go - uses: actions/setup-go@v5 - with: - # 以 go.mod 里的 go 指令为准,避免两处版本漂移 - go-version-file: go.mod - cache: true - - - name: 下载依赖 - run: go mod download - - - name: 编译检查 - run: go build ./... - - - name: 静态检查 - run: go vet ./... - - # 以下两步在"测试不入库"策略下是空转(no test files),保留是为了: - # 1. 覆盖 lock 判定 / 损坏回退 / voice 路由等关键路径的测试一旦重新入库, - # 无需改 workflow 即可直接生效; - # 2. -count=1 禁用测试缓存,避免"改坏了却因缓存仍显示通过"。 - - name: 测试(测试源码不入库时为空转) - run: go test ./... -count=1 - - - name: 关键路径汇总(integration) - run: go test ./test/integration/ -count=1 -v - diff --git a/.gitignore b/.gitignore index 4254a9f..59ce6df 100644 --- a/.gitignore +++ b/.gitignore @@ -6,8 +6,8 @@ # Go 测试源码:不入库(测试保留在本地磁盘,由开发者自行 go test ./... -count=1) # 理由:测试用例会暴露内部实现细节与断言,不作为交付物外流。 -# 注意:本规则会把测试文件挡在 git 之外,因此仓库内不提供自动化测试; -# .github/workflows/ci.yml 里的测试步骤在纯净克隆上无测试可跑。 +# 注意:本规则会把测试文件挡在 git 之外,因此仓库内不提供自动化测试, +# 也没有自动化质量门 —— 守行为回归只能靠开发者在本地执行测试。 *_test.go # Editor / OS diff --git a/CHANGELOG.md b/CHANGELOG.md index 9028f0e..dd35249 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -79,12 +79,9 @@ - **测试源码不再入库**: `.gitignore` 恢复整体屏蔽 `*_test.go`。测试用例会暴露内部实现 细节与断言,不作为交付物外流;测试文件保留在本地磁盘,由开发者自行执行 `go test ./... -count=1`。 - ⚠️ 代价必须明确:仓库内**不提供自动化测试**,`.github/workflows/ci.yml` 里的 - `go test` 步骤在纯净克隆上无测试可跑(会打印 `no test files` 并通过), - **CI 只能守住"编译通过 + 静态检查通过",守不住行为回归**。 -- **新增 CI 校验** (`.github/workflows/ci.yml`): push / PR 到 `develop`、`main` 时跑 - `go build` + `go vet` + `go test -count=1`。此前仓库唯一的 workflow 只在打 tag 时构建 - Docker 镜像,不做任何编译或测试校验。 + ⚠️ 代价必须明确:仓库内**不提供自动化测试**,也没有自动化质量门。 + 守行为回归只能靠开发者在本地(测试文件所在处)执行测试; + CI 仅在发版打 tag 时构建 Docker 镜像。 - **文档订正**: `docs/UI_HANDOFF.md` 原为"单文件换皮"外包任务书,其中的 "admin.html ≤ 35KB / setup.html ≤ 15KB / 只改两个 .html" 等约束在 admin 拆分多页后已作废, 现标注为历史文档并补上当前真实文件结构与验收清单。 diff --git a/docs/UPSTREAM_ADAPTER_GUIDE.md b/docs/UPSTREAM_ADAPTER_GUIDE.md index bf0e4b1..6307427 100644 --- a/docs/UPSTREAM_ADAPTER_GUIDE.md +++ b/docs/UPSTREAM_ADAPTER_GUIDE.md @@ -428,14 +428,14 @@ GetVoiceForTTS(name string) (providerName, speakerID, model string, vendorParams **本项目测试文件不入库**(`.gitignore` 里的 `*_test.go`), 测试保留在本地磁盘。这带来两个直接后果,必须知道: -1. **CI 跑不到你的测试**。`.github/workflows/ci.yml` 里的 `go test` 步骤在干净克隆上 - 只会打印 `no test files` 然后通过 —— 它只能守住"编译 + vet"。 - 所以适配器测试**必须在本地跑过再合并**: +1. **没有任何自动化会跑你的测试**。仓库里不提供 CI 质量门: + GitHub 上只有一个 workflow,且它只在**发版打 tag 时构建 Docker 镜像**, + 既不编译校验也不跑测试。所以适配器测试**必须在本地跑过再合并**: ```bash go test ./... -count=1 ``` 2. **不要依赖测试文件来传递知识**。协议细节、踩坑记录要写进**代码注释**和本文档, - 否则对下一个人(以及在 CI 里)等于不存在。 + 否则对下一个人等于不存在。 适配器测试的**最小可用集合**(按 §2.6 的坑逐条覆盖):