Skip to content

Release v0.3.9#14

Merged
zhuxbo merged 6 commits into
mainfrom
dev
Apr 27, 2026
Merged

Release v0.3.9#14
zhuxbo merged 6 commits into
mainfrom
dev

Conversation

@zhuxbo

@zhuxbo zhuxbo commented Apr 27, 2026

Copy link
Copy Markdown
Owner

Summary

  • Windows 服务化 reload:detector 扫描 SCM 命中 nginx/apache 服务时,ReloadCmd 切到 winsvc:<服务名> 哨兵,Base.ReloadService 走 SCM Stop+Start 标准路径,避免 sslctl 与 SYSTEM master 之间的 OpenEvent 权限错配
  • Access is denied 回退兜底:未注册为服务的 Windows 部署遇到权限错配时,自动回退到 taskkill+重启
  • Windows lint 全量清理:修复 pkg/service/windows.go 全部 errcheck/SA9003 + RunAsService G118 context 泄漏(defer cancel() 兜底自然退出路径);修复 cmd/console_windows.go errcheck
  • CI 双平台 lint:lint job 追加 GOOS=windows 二轮,防止 Windows 专属源(svc/mgr、kernel32 等)的 lint 问题再积
  • Windows 老系统控制台兼容:CJK 乱码与 ANSI 颜色处理修复
  • 扫描器相对路径 prefix 探测与阻断
  • 安装脚本发布目录探测与 /release/ 回落
  • 文档:deploy-spec 纳入 sslnas 平台;finish-check 与 go-dev SKILL 同步双平台 lint 规范

Commits

  • feat: Windows 服务化 reload + Access denied 回退兜底
  • fix: Windows lint 全量清理 + CI 双平台 lint
  • fix: Windows 老系统控制台 CJK 乱码与 ANSI 颜色兼容
  • feat: 扫描器相对路径 prefix 探测与阻断机制
  • feat: 安装脚本发布目录探测与 /release/ 回落
  • docs: deploy-spec 纳入 sslnas 平台

zhuxbo added 6 commits April 11, 2026 21:28
- console_windows.go 重写:仅 Win10/Server2016+ 开 VT 并回读验证通过后才设 UTF-8 CP,老系统完全不动控制台避免字体被回退到 Raster Font
- 新增 console_other.go + supportsANSIColor(),colorize() 在老 Windows 自动降级纯文本
- install.ps1 仅当控制台已是 CP 65001 时才设 UTF-8,避免 CP 936 系统上字节/解码错位乱码
- pkg/service/windows.go 等待进度输出从 stderr 迁到 stdout,与主流同轨避免 PowerShell 降级 writer 错位
- README 追加老系统 PowerShell 字体排查指引(右键默认值改 TrueType 字体)
- 新增 SSLCTL_CONSOLE_DEBUG=1 启动期诊断开关
- 同步 CLAUDE.md / skills/go-dev/SKILL.md 说明
- 新增 PrefixUnknownError 结构化错误,含受影响站点列表和修复指引渲染
- Nginx/Apache 扫描器统一 resolveSitePaths,相对路径自动解析为绝对路径
- 多策略探测链:CLI override > 编译时 prefix > 运行进程参数 > 启发式
- CLI 新增 --nginx-prefix / --apache-prefix 参数(scan/setup 均支持)
- PrefixUnknownError 穿透 adapter/certops/CLI 三层,不被 Docker 成功结果掩盖
- upgrade validateDownloadURL 提取为 var func,支持 e2e build tag 覆盖
- e2e.go 重命名为 z_e2e_overrides.go,统一 e2e 覆盖入口
- 新增 Bats E2E 测试覆盖相对路径扫描和 prefix 参数传递
- 安装脚本探测 releases.json 内容验证发布目录可达性
- 根目录优先,不可达时回落 /release/ 子目录
- 同步 deploy-spec.md(validation_method 限制、私钥四级回退、§7.2 路径探测)
- 适用项目列表新增 sslnas(NAS 系统)
- 定位描述从"三个项目"调整为"现有项目"
- 部署粒度表格新增 NAS 行:1:1 证书/1:1 站点,直接部署到 NAS 证书存储
- HTTP 文件验证新增平台豁免说明:NAS 受家庭宽带 80/443 不通限制,遇 file 字段跳过并告警
- 建议 NAS 的 local 模式使用 delegation(DNS 委托)验证
- detector 在 Windows 下扫描 SCM 服务,命中 nginx/apache 二进制路径时 ReloadCmd 设为 winsvc:<服务名> 哨兵
- Base.ReloadService 识别哨兵后走 SCM Stop+Start(轮询 30s 至 Stopped 再启动),避免与 SYSTEM master 进程之间的 OpenEvent 权限错配
- Windows reload 错误兜底白名单新增 Access is denied,未注册为服务的部署仍可回退到 taskkill+重启
- NeedsProcessRestart 把 winsvc 哨兵纳入「需要进程级重启」提示
- 新增 winservice_windows.go(svc/mgr 实现)+ winservice_other.go(非 Windows stub)
- 单测覆盖:哨兵分发、错误透传、白名单分支、非 Windows stub
- pkg/service/windows.go: defer Close/Disconnect 用闭包包裹避免 errcheck;fmt.Fprint/Fprintln 显式丢弃返回值;exec.Cmd.Run 失败非致命场景显式 _ = 声明
- pkg/service/windows.go: SetRecoveryActions 错误改为显式忽略(消除 SA9003 空分支);RunAsService 增加 defer cancel 兜底,handler 自然退出时也释放 context(消除 G118)
- cmd/console_windows.go: SetConsoleCP/SetConsoleOutputCP 调用显式忽略三返回值
- .github/workflows/ci.yml: lint job 追加 GOOS=windows 同步检查,防止 Windows 专属源(svc/mgr、kernel32)的 lint 问题再积
- skills/go-dev/SKILL.md、CLAUDE.md、.claude/commands/finish-check.md: 文档同步「双平台 lint」规范
@zhuxbo zhuxbo merged commit 3767b5d into main Apr 27, 2026
7 checks passed
zhuxbo added a commit that referenced this pull request May 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant