Skip to content

bug: release audit 自动检测版本忽略配置文件实际版本,手动升版时误报 #19

Description

@Guo-Zhang

问题描述

qtcloud-devops release audit 不带 -v 时,候选版本按 最新 tag + patch+1 推断(src/cli/src/release/audit.rs::detect_candidate_version),不读取 scope 配置文件(Cargo.toml / pubspec.yaml 等)的实际版本。

当仓库已手动升级 minor/major 版本时,audit 会用错误的候选版本去核对配置文件,产生误报。

复现步骤

在 qtcloud-data 仓库(cli 已手动升到 0.2.0,最新 tag 仍是 cli/v0.1.16):

cd apps/qtcloud-data
qtcloud-devops release audit --scope cli

实际输出

发布审计 — cli
  ✅ 版本号格式      cli/v0.1.17        ← 推断为 patch+1
  ❌ 配置文件一致性   不一致: Cargo.toml = 0.2.0   ← 误报
  ❌ CHANGELOG      CHANGELOG.md 未找到 0.1.17 版本记录  ← 误报(0.2.0 记录已存在)
  ✅ 标签冲突        cli/v0.1.17 可用

而显式指定 -v cli/v0.2.07/7 全部通过——说明是版本推断问题,不是仓库问题。

根因

audit_all 里:

let version = detect_candidate_version(repo_path, &scope.name);
let items = audit(Some(&version), repo_path)...

detect_candidate_version 只做 patch+1,从不看 contract::read_config_versions 的配置值。手动升 minor/major 时推断必然错位。

建议修复方向

  1. 候选版本优先取 配置文件实际版本read_config_versions),与 tag 对比后再决定是否 bump;或
  2. 推断版本与配置文件版本不一致时,输出警示"检测到配置文件版本 X,与推断版本 Y 不同,请用 -v 指定"并提示;或
  3. 至少在 README / help 中说明:手动升版必须显式 -v

环境

  • qtcloud-devops v0.11.0
  • 触发仓库:quanttide/qtcloud-data(scope: cli/studio/provider 多 scope 结构)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions