Lua 组件 UT coverage 触发 lua/luajit Conan provider 冲突

问题描述

在 openUBMC Lua 组件 mctp_emulator 中,普通单元测试可以正常通过,但执行官方覆盖率命令 bingo test -ut -cov 时,在 Conan 依赖解析阶段失败,无法生成覆盖率报告。

该问题看起来不是组件业务逻辑失败,而是 coverage 流程中 lua/5.4.6 与 luajit/2.1.0.b022 同时声明 provide lua,导致 Conan provider conflict。

环境信息

  • 组件仓库:https://gitcode.com/heyu-2026/openubmc-mctp-emulator
  • 组件名:mctp_emulator
  • 运行环境:openUBMC Docker 开发容器
  • 容器名:openubmc-dev
  • 组件路径:/root/mctp_emulator
  • Conan 版本:2.13.0
  • 测试命令由 bingo test 触发

复现步骤

进入 openUBMC Docker 容器内组件目录执行:

docker exec openubmc-dev bash -lc 'cd /root/mctp_emulator && bingo test -ut'

普通 UT 可以通过,dt_result.json 中结果如下:

{
    "mctp_emulator": {
        "tests": 23,
        "failures": 0,
        "successes": 23,
        "uttime": 0.004,
        "ittime": 0
    }
}

然后执行 coverage 命令:

docker exec openubmc-dev bash -lc 'cd /root/mctp_emulator && bingo test -ut -cov'

实际结果

bingo test -ut -cov 在 Conan install / dependency resolution 阶段失败,关键报错如下:

ERROR: Provide Conflict: Both 'lua/5.4.6@openubmc/stable' and 'luajit/2.1.0.b022@openubmc/stable' provide '['lua']'.
ERROR: Command '['conan', 'install', '.', '-pr:h', 'profile.dt.ini', '-pr:b', 'profile.dt.ini', '-s:h', 'build_type=Debug', '--user', 'openubmc.dev', '--channel', 'dev', '-o', '*/*:enable_luajit=True', '-o', 'mctp_emulator/*:gcov=True', '-o', '*/*:test=True', '-of=/root/mctp_emulator/temp/.deploy/.install', '-d=full_deploy', '-f', 'json', '--out-file=package.info.json', '--build=missing']' returned non-zero exit status 1.

从失败命令看,coverage 流程中仍带有:

-o */*:enable_luajit=True
-o mctp_emulator/*:gcov=True
-o */*:test=True

同时 coverage 相关依赖似乎会引入 lua/5.4.6,而 profile / Bingo 测试流又启用了 luajit/2.1.0.b022,最终出现两个 package 同时 provide lua。

期望结果

期望 bingo test -ut -cov 能正常完成,并生成 Lua 组件 UT 覆盖率报告,例如:

  • temp/coverage/dt_result.json 中有有效的 linecoverage / lua_linecoverage
  • 或生成可查看的 luacov 报告

当前判断

普通 UT 已通过,说明组件测试用例本身可以执行:

bingo test -ut:23 tests, 23 successes, 0 failures

失败发生在 coverage 模式的 Conan 依赖解析阶段,尚未进入组件 UT 逻辑。因此当前更像是 Bingo / Conan / coverage 工具链中的 provider 选择冲突,而不是组件代码问题。

想请教的问题

  1. openUBMC Lua 组件当前推荐的 UT coverage 命令是否仍然是 bingo test -ut -cov?
  2. 在启用 LuaJIT 的组件中,coverage 流程是否应避免同时引入 lua/5.4.6 与 luajit/2.1.0.b022?
  3. 这个 provider conflict 是否需要在 Bingo / CI/CD coverage 流程中处理?
  4. 如果目前有推荐的临时规避方式,是否应该通过组件侧参数设置,还是应由 cicd / Bingo 工具链统一修复?

添加-jit参数

bingo test -ut -cov -jit