GitHub Actions运行Rubocop报错指向非本仓库代码如何解决
Rubocop默认会递归遍历执行目录下的所有文件做检查,你当前执行命令时没有限定扫描范围,导致它扫到了vendor/bundle路径下通过Bundler安装的第三方gem包activerecord-import-1.1.0。这个gem自带的.rubocop.yml、.rubocop_todo.yml是适配旧版Rubocop规则编写的,和你CI环境里安装的新版Rubocop规则不兼容,才会抛出命名空间错误、规则已废弃的报错,这些报错对应的文件本来就不属于你自己的业务代码仓库。
两种方案选其一即可,优先选第一种:
方案1:在项目根目录的
.rubocop.yml中全局排除第三方依赖目录
打开你仓库根目录的Rubocop配置文件,给所有检查规则添加排除路径,从根源上避免Rubocop扫描非业务代码:AllCops: Exclude: - 'vendor/**/*' - 'node_modules/**/*' - 'tmp/**/*' - 'log/**/*'这种方式一劳永逸,不管是本地执行还是CI执行,都不会再误扫依赖文件。
方案2:执行Rubocop命令时明确指定扫描范围
修改GitHub Actions工作流中执行linters的步骤,把原来扫全目录的命令改成只扫描你自己写代码的业务目录,比如Rails项目默认的app/config/lib/test目录:- name: Run linters run: | bin/rubocop --parallel app config lib test如果你的项目有其他自定义的业务代码目录,直接追加在命令后面即可。
你当前的CI配置存在重复执行依赖安装的问题:ruby/setup-ruby动作在设置bundler-cache: true时会自动完成Bundler依赖安装,后面步骤里手动执行的gem install bundler、bundle install属于重复操作,删掉这几行可以缩短CI运行时间,不会影响现有功能。
内容的提问来源于stack exchange,提问作者Timur Shtatland

