This is an automated email from the ASF dual-hosted git repository. AlexStocks pushed a commit to branch codex/fix-sonar-cli-template-locks in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
commit e1196fc39a1d26ae96eeb1a8208ff423967f8b3d Author: Xin.Zh <[email protected]> AuthorDate: Sat Aug 1 17:29:02 2026 +0800 Document the Sonar CLI lockfile repair Define the evidence-backed scope, dependency checksum design, TDD regression, Linux verification, and release boundary for restoring generated-project go.sum files. Constraint: Preserve the dynamic protobuf generation architecture and target only the two CLI scaffolds. Confidence: high Scope-risk: narrow Tested: git diff --check; specification placeholder and scope scan. Not-tested: Implementation tests are deferred to the execution plan. Co-authored-by: OmX <[email protected]> Signed-off-by: Xin.Zh <[email protected]> --- .../2026-08-01-fix-sonar-cli-template-locks.md | 101 +++++++++++++++++++++ ...26-08-01-fix-sonar-cli-template-locks-design.md | 48 ++++++++++ 2 files changed, 149 insertions(+) diff --git a/docs/superpowers/plans/2026-08-01-fix-sonar-cli-template-locks.md b/docs/superpowers/plans/2026-08-01-fix-sonar-cli-template-locks.md new file mode 100644 index 000000000..873a248d8 --- /dev/null +++ b/docs/superpowers/plans/2026-08-01-fix-sonar-cli-template-locks.md @@ -0,0 +1,101 @@ +# CLI 模板依赖锁修复实现计划 + +> **面向 AI 代理的工作者:** 必需子技能:使用 superpowers:executing-plans 逐任务实现此计划。步骤使用复选框(`- [ ]`)语法跟踪进度。 + +**目标:** 恢复 `dubbogo-cli` 生成项目的完整 `go.sum`,清除主分支 Sonar `text:S8566` 新代码漏洞。 + +**架构:** application 与 sample generator 复用一个静态 checksum 源,并分别生成 `go.sum`;golden template 保存同一内容。现有动态协议源码生成和 `make test` 的 tidy 链路保持不变。 + +**技术栈:** Go 1.25、Go Modules、GNU Make、SonarQube Cloud、GitHub Actions。 + +--- + +## 文件职责与变更结构 + +- `tools/dubbogo-cli/cmd/gen_test.go`:从公开 generator 入口验证新项目立即包含依赖 checksum。 +- `tools/dubbogo-cli/generator/internal/scaffold/gosum.go`:application 与 sample generator 共用的完整 checksum 内容。 +- `tools/dubbogo-cli/generator/application/gomod.go`:为 newApp 注册 `go.sum` 输出。 +- `tools/dubbogo-cli/generator/sample/mod.go`:为 newDemo 注册 `go.sum` 输出。 +- `tools/dubbogo-cli/cmd/testGenCode/template/newApp/go.sum`:newApp golden checksum。 +- `tools/dubbogo-cli/cmd/testGenCode/template/newDemo/go.sum`:newDemo golden checksum。 + +### 任务 1:建立 Sonar 回归红灯 + +- [ ] **步骤 1:增加行为测试** + +在 `tools/dubbogo-cli/cmd/gen_test.go` 添加一个 table-driven 测试,依次调用 `application.Generate` 和 `sample.Generate`,读取生成目录的 `go.sum`,断言文件非空,并包含: + +```text +dubbo.apache.org/dubbo-go/v3 v3.3.1 +google.golang.org/protobuf v1.34.2 +``` + +- [ ] **步骤 2:运行测试确认正确失败** + +运行: + +```powershell +go test ./cmd -run '^TestGeneratedProjectsIncludeDependencyLocks$' -count=1 -v +``` + +预期:`newApp` 和 `newDemo` 子测试因生成目录缺少 `go.sum` 而失败;失败不能来自编译、路径拼写或依赖下载。 + +### 任务 2:恢复完整 dependency checksum 输出 + +- [ ] **步骤 1:生成当前依赖图的完整 go.sum** + +在隔离 probe 中生成 fresh newApp/newDemo,执行协议生成和 `go mod tidy`,确认两者的 `go.sum` 完全相同。不得直接复用依赖版本已经变化的旧 checksum。 + +- [ ] **步骤 2:恢复共享 checksum 与 generator 注册** + +创建 `generator/internal/scaffold/gosum.go`,并在 application/sample 的模块文件注册逻辑中新增 `go.sum` file generator。 + +- [ ] **步骤 3:恢复两个 golden go.sum** + +将同一份完整 checksum 写入 newApp 和 newDemo golden template。 + +- [ ] **步骤 4:运行回归测试确认绿灯** + +运行: + +```powershell +go test ./cmd -run '^TestGeneratedProjectsIncludeDependencyLocks$|^TestNewApp$|^TestNewDemo$' -count=1 -v +``` + +预期:三个顶层测试及所有子测试通过。 + +### 任务 3:验证并交付 PR + +- [ ] **步骤 1:验证测试质量** + +按 test-guard 检查新增测试只验证公开行为、没有 mock、两个 generator 变体使用同一 table-driven 测试,并明确对应 Sonar 回归。 + +- [ ] **步骤 2:执行模块验证** + +运行: + +```powershell +go test ./... -count=1 +go vet ./... +``` + +工作目录:`tools/dubbogo-cli`。预期全部退出 0。 + +- [ ] **步骤 3:执行 Linux/WSL 生成项目验证** + +运行 CI 等价的生成项目 E2E,并对 fresh newApp/newDemo 分别执行 `go mod tidy -diff`。预期退出 0,tidy 无差异。 + +- [ ] **步骤 4:执行仓库状态和差异门禁** + +运行: + +```powershell +git diff --check +git status --short +``` + +预期:无空白错误;只包含设计、计划、回归测试、共享 checksum、两个 generator 注册和两个 golden `go.sum`。 + +- [ ] **步骤 5:提交、审查、推送和创建 PR** + +使用带 Signed-off-by 的 Lore 格式提交;请求独立代码审查,修复 Critical/Important 反馈;重新验证后推送 `codex/fix-sonar-cli-template-locks`,创建以 `develop` 为 Base 的 PR,并复检 PR Head、Diff 文件、checks 和 Sonar 状态。 diff --git a/docs/superpowers/specs/2026-08-01-fix-sonar-cli-template-locks-design.md b/docs/superpowers/specs/2026-08-01-fix-sonar-cli-template-locks-design.md new file mode 100644 index 000000000..42441968e --- /dev/null +++ b/docs/superpowers/specs/2026-08-01-fix-sonar-cli-template-locks-design.md @@ -0,0 +1,48 @@ +# 修复 CLI 模板 Sonar 依赖锁告警设计 + +## 背景 + +`main@cdda54be1f353e372a80940729cdb380702c325e` 的 SonarQube Cloud 分析报告两个 `text:S8566` 漏洞: + +- `tools/dubbogo-cli/cmd/testGenCode/template/newApp/go.mod` +- `tools/dubbogo-cli/cmd/testGenCode/template/newDemo/go.mod` + +两个模板在 #3585/#3587 的 scaffold 重构中删除了 `go.sum`。生成项目的 `make test` 会先运行 `go mod tidy`,因此正常编译路径仍可工作,但刚生成的项目缺少已提交的依赖 checksum,导致主分支新代码安全评级降为 C。 + +## 目标 + +1. `application.Generate` 与 `sample.Generate` 生成的项目立即包含完整、非空的 `go.sum`。 +2. 两个 golden template 保存与 generator 输出一致的 `go.sum`,使 Sonar 能在仓库树中识别锁文件。 +3. 保留 #3585/#3587 的动态协议源码架构;不恢复内嵌的 `*.pb.go`、`*.triple.go` 或其他已删除生成文件。 +4. 生成项目运行 `go mod tidy -diff` 时不需要修正依赖 checksum。 + +## 方案 + +恢复一个由 application 与 sample generator 共用的 checksum 源。两个 generator 在写入 `go.mod` 的同时写入相同的 `go.sum`,两个 golden template 保存相同内容。 + +checksum 必须由当前模板的 `go.mod` 和实际生成后的协议源码通过 Go 1.25/Linux 的 `go mod tidy` 生成,不能沿用旧版本依赖图。`make test` 仍保留 `proto-gen -> tidy -> go test`,用于后续依赖或生成代码发生变化时校正模块元数据。 + +不采用 Sonar 排除或误报标记,因为生成项目确实应携带可审计的依赖 checksum;不采用在 generator 执行期间调用 `go mod tidy`,避免生成命令新增网络、Go 工具链和外部进程依赖。 + +## 测试设计 + +先增加 `TestGeneratedProjectsIncludeDependencyLocks`: + +1. 通过公开的 `application.Generate` 和 `sample.Generate` 分别生成项目到 `t.TempDir()`。 +2. 读取生成目录中的 `go.sum`。 +3. 断言文件非空,并包含当前两个直接依赖版本的 checksum 记录。 + +该测试在当前 Head 上应因 `go.sum` 不存在而失败。实现后,同一测试应通过;现有 `TestNewApp`/`TestNewDemo` 继续验证 generator 与 golden template 的完整文件集合和逐字节内容一致。 + +补充验证: + +- `go test ./cmd -run '^TestGeneratedProjectsIncludeDependencyLocks$' -count=1 -v` +- `go test ./... -count=1`,工作目录为 `tools/dubbogo-cli` +- 对 fresh `newApp` 和 `newDemo` 执行 `go mod tidy -diff` +- 在 Linux/WSL 执行生成项目 E2E `make test` +- `go vet ./...` +- `git diff --check` + +## 发布边界 + +修复通过正常 PR 合入 `develop`。不修改、重打或重新发布 `v3.3.2`;根模块发布 ZIP 不包含 `tools/dubbogo-cli` 嵌套模块,本修复面向后续主分支质量状态和新的 CLI 源码版本。
