Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec82e895c3 | ||
|
|
96a525446b |
@@ -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
|
|
||||||
|
|
||||||
+2
-2
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
# Go 测试源码:不入库(测试保留在本地磁盘,由开发者自行 go test ./... -count=1)
|
# Go 测试源码:不入库(测试保留在本地磁盘,由开发者自行 go test ./... -count=1)
|
||||||
# 理由:测试用例会暴露内部实现细节与断言,不作为交付物外流。
|
# 理由:测试用例会暴露内部实现细节与断言,不作为交付物外流。
|
||||||
# 注意:本规则会把测试文件挡在 git 之外,因此仓库内不提供自动化测试;
|
# 注意:本规则会把测试文件挡在 git 之外,因此仓库内不提供自动化测试,
|
||||||
# .github/workflows/ci.yml 里的测试步骤在纯净克隆上无测试可跑。
|
# 也没有自动化质量门 —— 守行为回归只能靠开发者在本地执行测试。
|
||||||
*_test.go
|
*_test.go
|
||||||
|
|
||||||
# Editor / OS
|
# Editor / OS
|
||||||
|
|||||||
+12
-11
@@ -2,13 +2,17 @@
|
|||||||
|
|
||||||
本项目的所有重要变更都记录在本文档。版本号遵循 [SemVer](https://semver.org/)。
|
本项目的所有重要变更都记录在本文档。版本号遵循 [SemVer](https://semver.org/)。
|
||||||
|
|
||||||
## [未发布]
|
## [0.2.4] - 2026-10-04
|
||||||
|
|
||||||
### v0.3.0 · 进行中
|
### 路由鉴权架构升级 · 健康/指标端点收口 · 管理入口迁移
|
||||||
|
|
||||||
按 [docs/IMPLEMENT_v0.3.0.md](docs/IMPLEMENT_v0.3.0.md) 分阶段实施,当前完成 **阶段 1、2、3**。
|
> ⚠️ **本版本为破坏性变更版本**,升级前请阅读 [Release Notes](docs/RELEASE_NOTES_v0.3.0.md)。
|
||||||
|
>
|
||||||
> **编号说明**:初版方案的"阶段 1(收紧鉴权)"与"阶段 2(收口端点)"属于同一次安全改造、
|
> **版本号说明**:本次以 `0.2.4` 发布(按补丁号连续),但**语义上是破坏性变更** ——
|
||||||
|
> 未配凭证的部署会拒绝启动、匿名监控端点被收口、探针需改指 `/healthz`。
|
||||||
|
> 之所以不用 minor 号,是为了保持编号连续;后续 `0.2.x` 用于修复本版本暴露的问题。
|
||||||
|
>
|
||||||
|
> **阶段编号说明**:初版方案的"阶段 1(收紧鉴权)"与"阶段 2(收口端点)"属于同一次安全改造、
|
||||||
> 必须一起上线才有意义(只做前者是"有风险无收益"),故已**合并为现在的「阶段 1」**;
|
> 必须一起上线才有意义(只做前者是"有风险无收益"),故已**合并为现在的「阶段 1」**;
|
||||||
> 后续阶段依次顺延。下文的「阶段 N」均指合并后的编号。
|
> 后续阶段依次顺延。下文的「阶段 N」均指合并后的编号。
|
||||||
|
|
||||||
@@ -75,12 +79,9 @@
|
|||||||
- **测试源码不再入库**: `.gitignore` 恢复整体屏蔽 `*_test.go`。测试用例会暴露内部实现
|
- **测试源码不再入库**: `.gitignore` 恢复整体屏蔽 `*_test.go`。测试用例会暴露内部实现
|
||||||
细节与断言,不作为交付物外流;测试文件保留在本地磁盘,由开发者自行执行
|
细节与断言,不作为交付物外流;测试文件保留在本地磁盘,由开发者自行执行
|
||||||
`go test ./... -count=1`。
|
`go test ./... -count=1`。
|
||||||
⚠️ 代价必须明确:仓库内**不提供自动化测试**,`.github/workflows/ci.yml` 里的
|
⚠️ 代价必须明确:仓库内**不提供自动化测试**,也没有自动化质量门。
|
||||||
`go test` 步骤在纯净克隆上无测试可跑(会打印 `no test files` 并通过),
|
守行为回归只能靠开发者在本地(测试文件所在处)执行测试;
|
||||||
**CI 只能守住"编译通过 + 静态检查通过",守不住行为回归**。
|
CI 仅在发版打 tag 时构建 Docker 镜像。
|
||||||
- **新增 CI 校验** (`.github/workflows/ci.yml`): push / PR 到 `develop`、`main` 时跑
|
|
||||||
`go build` + `go vet` + `go test -count=1`。此前仓库唯一的 workflow 只在打 tag 时构建
|
|
||||||
Docker 镜像,不做任何编译或测试校验。
|
|
||||||
- **文档订正**: `docs/UI_HANDOFF.md` 原为"单文件换皮"外包任务书,其中的
|
- **文档订正**: `docs/UI_HANDOFF.md` 原为"单文件换皮"外包任务书,其中的
|
||||||
"admin.html ≤ 35KB / setup.html ≤ 15KB / 只改两个 .html" 等约束在 admin 拆分多页后已作废,
|
"admin.html ≤ 35KB / setup.html ≤ 15KB / 只改两个 .html" 等约束在 admin 拆分多页后已作废,
|
||||||
现标注为历史文档并补上当前真实文件结构与验收清单。
|
现标注为历史文档并补上当前真实文件结构与验收清单。
|
||||||
|
|||||||
@@ -428,14 +428,14 @@ GetVoiceForTTS(name string) (providerName, speakerID, model string, vendorParams
|
|||||||
**本项目测试文件不入库**(`.gitignore` 里的 `*_test.go`),
|
**本项目测试文件不入库**(`.gitignore` 里的 `*_test.go`),
|
||||||
测试保留在本地磁盘。这带来两个直接后果,必须知道:
|
测试保留在本地磁盘。这带来两个直接后果,必须知道:
|
||||||
|
|
||||||
1. **CI 跑不到你的测试**。`.github/workflows/ci.yml` 里的 `go test` 步骤在干净克隆上
|
1. **没有任何自动化会跑你的测试**。仓库里不提供 CI 质量门:
|
||||||
只会打印 `no test files` 然后通过 —— 它只能守住"编译 + vet"。
|
GitHub 上只有一个 workflow,且它只在**发版打 tag 时构建 Docker 镜像**,
|
||||||
所以适配器测试**必须在本地跑过再合并**:
|
既不编译校验也不跑测试。所以适配器测试**必须在本地跑过再合并**:
|
||||||
```bash
|
```bash
|
||||||
go test ./... -count=1
|
go test ./... -count=1
|
||||||
```
|
```
|
||||||
2. **不要依赖测试文件来传递知识**。协议细节、踩坑记录要写进**代码注释**和本文档,
|
2. **不要依赖测试文件来传递知识**。协议细节、踩坑记录要写进**代码注释**和本文档,
|
||||||
否则对下一个人(以及在 CI 里)等于不存在。
|
否则对下一个人等于不存在。
|
||||||
|
|
||||||
适配器测试的**最小可用集合**(按 §2.6 的坑逐条覆盖):
|
适配器测试的**最小可用集合**(按 §2.6 的坑逐条覆盖):
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user