Release v0.9.0
架构重构 - 配置与 Provider 重构 + CI 模式 + 配置验证
本次发布是一个重大内部重构版本,重新组织了配置系统、LLM Provider 架构和错误处理,同时新增 CI 模式支持、配置验证和安全审计 CI。
新增
CI 模式支持
- 新增 CI/CD 环境变量:
GCOP_CI_PROVIDER、GCOP_CI_API_KEY、GCOP_CI_MODEL、GCOP_CI_ENDPOINT - 当
CI=1时,自动创建 "ci" provider 并设为最高优先级 - 可无缝集成 GitHub Actions、GitLab CI 等
配置验证
- 启动时自动执行
AppConfig::validate()检查配置合法性 - Provider 验证:temperature 范围 [0.0, 2.0]、API key 非空
- 网络验证:timeout 值不为零
- 无效配置现在会快速失败并给出清晰的错误消息
CI 安全审计与代码覆盖率
- 新增
audit任务,使用rustsec/audit-check扫描依赖漏洞 - 新增
coverage任务,使用cargo-llvm-cov并集成 Codecov
Diff 截断
- 当 diff 超过
max_diff_size(默认 100KB)时自动截断 - 截断时显示本地化警告信息
IssueSeverity 方法增强
- 新增
level()、from_config_str()、label()、colored_label()方法 - 简化 review 命令中的严重性过滤和显示逻辑
变更
配置模块重构
- 将单体
config/mod.rs拆分为structs.rs、loader.rs、global.rs、tests.rs - 全局配置单例使用
OnceLock + ArcSwap(一次加载,全局共享) config/schema.rs重命名为config/structs.rs- 使用 serde 默认值替代手动
set_default
LLM Provider 架构重构
- 将
provider/base.rs拆分为base/目录:config.rs、response.rs、retry.rs、validation.rs - 新增
ApiBackendtrait,通过 blanket impl 自动实现LLMProvider - Provider 只需实现独有部分(
call_api、call_api_streaming) - 大幅减少 OpenAI/Claude/Ollama 之间的重复代码
错误处理改进
GcopError::Other替换为具体变体(GitCommand、InvalidInput)- 所有错误建议改用 i18n 键,不再硬编码英文
- 状态机中的
unreachable!宏替换为正确的错误处理
环境变量命名
- 嵌套配置环境变量改用双下划线:
GCOP__LLM__DEFAULT_PROVIDER(原GCOP_LLM_DEFAULT_PROVIDER) - 独立 API key 环境变量(
ANTHROPIC_API_KEY、OPENAI_API_KEY)仍作为 fallback 支持
依赖优化
futures替换为更轻量的futures-util- 移除
bytes、edit、toml依赖 - reqwest 切换到
rustls-no-provider+ 显式ringcrypto provider - tokio 从
full缩减为具体 features - Release 二进制启用 strip(
strip = true),减小体积
移除
- 配置字段
commit.confirm_before_commit:移除未使用的预留字段 - 配置字段
review.show_full_diff:移除未使用的预留字段 - 配置字段
ui.verbose:CLI-v参数为主要机制
通往 1.0 之路
v0.9.0 是 1.0 前的最后一个预发布版本。如果 0.9.x 期间无需再进行 breaking changes,下一个 minor 版本将是 v1.0.0,标志着 API 稳定。
升级
现有配置文件保持兼容(未知字段会被静默忽略)。
如果你使用环境变量配置,请更新为双下划线格式:
bash
# 旧格式
GCOP_LLM_DEFAULT_PROVIDER=openai
# 新格式
GCOP__LLM__DEFAULT_PROVIDER=openaibash
# Homebrew
brew upgrade gcop-rs
# Cargo
cargo install gcop-rs
# pip
pip install --upgrade gcop-rs