Skip to content

[P3] 代码清理清单:零测试覆盖 + 遗僵尸文件 + 缺失 .gitignore + CI 缺少 go vet #24

Description

@cgartlab

描述

项目存在多处代码质量问题和残留文件,虽然没有阻断功能,但长期来看会降低可维护性。


1. 零测试覆盖

仓库中没有任何 *_test.go 文件。核心逻辑——Engine Install/Uninstall/去重/重试、Manifest 解析(YAML + TXT)、Config 合并/校验——全部无法通过自动化测试验证。

需要测试的包 关键逻辑
internal/engine/ 安装/卸载循环、去重、重试、Context 取消、进度回调
internal/manifest/ YAML/TXT 格式解析、BOM 处理、行内注释、去重
internal/backend/ winget 输出解析、退出码映射
internal/ui/ 三种 Renderer 输出

2. src/ 死目录(未跟踪)

src/ 目录包含 13 个空 Go 脚手架子目录,全部未跟踪(untracked),来自早期项目尝试。不会影响构建,但会干扰 go list ./... 等操作。

3. bin/ 孤儿二进制

bin/ 目录包含 3 个预编译的 .exe 文件,在仓库中占用约 30MB 空间,但对应的源代码不在本仓库中。

4. 缺少 .gitignore

没有 .gitignore 文件,以下构建产物不会被忽略:

  • sis.exe / sis-windows-amd64.exe — Go 编译输出
  • .sis.json — 本地配置文件(用户在项目中创建后可能误提交)
  • *.backup — 安装脚本创建的备份文件

5. go vet 未集成到 CI

AGENTS.md 声称 CI 会运行 go vet ./...,但实际 ci.yml 中只包含 go build 步骤,没有 lint/vet 步骤。


影响

  • 任何重构都存在无测试保护的回归风险
  • src/bin/ 增加仓库体积,干扰开发者认知
  • 缺少 .gitignore 增加误提交构建产物的风险
  • CI 无法捕获代码质量问题

修复方案

添加测试(高优先级)

使用 Go 标准库 testing 为基础层(manifest 解析、engine 逻辑)编写单元测试。参考 test_manifest_*.yamltest_manifest_txt.txt 作为测试数据:

// internal/manifest/parser_test.go 示例
func TestParseYAML_ValidFile(t *testing.T) {
    m, err := ParseManifest("../../test_manifest_valid.yaml")
    if err != nil {
        t.Fatal(err)
    }
    if len(m.Packages) != 3 {
        t.Errorf("expected 3 packages, got %d", len(m.Packages))
    }
}

清理残留文件

git rm -r --cached src/
rm -rf src/
rm -rf bin/

添加 .gitignore

# Go build output
sis.exe
sis-windows-amd64.exe
*.exe

# Local config
.sis.json

# Backup
*.backup

# IDE
.idea/
.vscode/
*.swp

CI 加入 vet

- name: Vet
  run: go vet ./...

优先级

P3 — 清理 — 不影响当前功能,但持续积累会增加维护成本

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions