You need to enable JavaScript to run this app. GitHub Action运行R包R-CMD-check时找不到rcmdcheck生成的check目录
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Action运行R包R-CMD-check时找不到rcmdcheck生成的check目录

核心故障本质

报错No files were found with the provided path: check并非上传制品步骤的路径配置错误。该步骤是配置了if: failure()的兜底逻辑——仅当前续R包检查环节运行失败时才触发上传。当check目录完全不存在时,意味着rcmdcheck命令在执行最早期就崩溃退出,根本没有走到创建临时检查目录的环节。很多开发者会误判为上传步骤的路径写错,实际上是前序环节执行中断。

排查方向与解决方案
  • 首先修正YAML的缩进语法错误
    你提供的配置存在明显的缩进层级不匹配问题,这会直接导致GitHub Actions的运行时配置解析失败,根本不会进入后续的R环境配置、依赖安装、包检查流程,自然不会生成check目录。
    具体问题点:jobs块下的name: ${{ matrix.config.os }} (${{ matrix.config.r }})行没有和同块下的runs-on属性保持同级缩进,会导致矩阵配置加载失败,无法读取操作系统、R版本等运行参数。
    修正后的基础结构参考:

    jobs:
      R-CMD-check:
        runs-on: ${{ matrix.config.os }}
        name: ${{ matrix.config.os }} (${{ matrix.config.r }})
        strategy:
          fail-fast: false
          matrix:
            config:
              - {os: windows-latest, r: 'release'}
              - {os: macOS-latest, r: 'release'}
              - {os: ubuntu-20.04, r: 'release', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
              - {os: ubuntu-20.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/focal/latest"}
    

    另外你配置中两个同名的Install dependencies步骤冗余度很高,第一个手动指定依赖包的步骤没有必要保留,很容易和后续remotes::install_deps安装的版本产生冲突,直接删除即可。

  • 排查rcmdcheck的提前退出逻辑
    你目前设置的error_on = "warning"参数,意味着只要R包检查输出任何警告,rcmdcheck就会以非零状态码直接退出,不会生成完整的check目录。本地环境下R的默认交互参数和CI环境的非交互参数存在差异,本地不会触发的警告(比如编译产物大小提示、DESCRIPTION字段格式问题、示例运行时长提示)在CI的严格检查下会被直接判定为错误,导致rcmdcheck启动后很快退出。
    排查阶段可以先临时调整参数:

    rcmdcheck::rcmdcheck(args = c("--no-manual", "--as-cran"), error_on = "error", check_dir = "check")
    

    等CI能够正常生成check目录后,再逐项修正触发的警告,恢复严格的错误判定逻辑。

  • 补齐CI环境的编译依赖与工具链
    你手动添加的依赖安装步骤遗漏了跨平台编译的必需组件:

    1. 目前使用的setup-r@v1是已停止维护的旧版本,对Windows、macOS环境的编译路径配置存在已知缺陷,需要升级为r-lib/actions/setup-r@v2,才能自动配置好对应平台的Fortran、C编译工具链。
    2. Linux环境下虽然配置了系统依赖拉取逻辑,但如果缓存没命中对应组件(比如gfortran、make、开发头文件),会导致包编译失败,rcmdcheck启动即崩溃。可以在系统依赖安装步骤后临时加一行目录遍历命令,确认当前工作目录的状态,排查中断点。
  • 临时调整上传步骤的容错逻辑
    排查阶段可以暂时去掉上传制品步骤的if: failure()触发限制,修改为无论前序步骤是否失败都尝试上传当前目录的所有内容,这样即使rcmdcheck提前崩溃,也能通过上传的目录结构快速定位是哪一步执行中断。


内容的提问来源于stack exchange,提问作者Marco Stamazza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 17:06:04