我已经创建了spec/lint/rubocop_spec.rb,它在当前分支和主分支之间更改的文件上运行Rubocop样式检查器。当我在本地测试时,它工作,但当在构建服务器Circle.ci上运行测试时,它不工作。我怀疑这是因为只下载了有问题的分支,所以它没有发现master之间的任何差异。有没有比git co master && git pull origin master
更好的方法?我可以查询Github API也许得到改变的文件列表吗?
require 'spec_helper'
describe 'Check that the files we have changed have correct syntax' do
before do
current_sha = `git rev-parse --verify HEAD`.strip!
files = `git diff master #{current_sha} --name-only | grep .rb`
files.tr!("\n", ' ')
@report = 'nada'
if files.present?
puts "Changed files: #{files}"
@report = `rubocop #{files}`
puts "Report: #{@report}"
end
end
it { @report.match('Offenses').should_not be true }
end
7条答案
按热度按时间p1iqtdky1#
你不需要使用github api,甚至ruby(除非你想 Package 响应),你只需要运行:
请参见http://www.red56.uk/2017/03/26/running-rubocop-on-changed-files/,了解有关此问题的更详细说明
i1icjdpr2#
我通过查询api.github.com修复了这个问题。这将在current_sha和master分支之间更改的所有文件上运行rubocop。
swvgeqrz3#
我找到了https://github.com/m4i/rubocop-git,它运行得很好。但是它在你的git diff上运行(可选地使用--cached),所以它不允许你比较分支。
bf1o4zei4#
我没有足够高的声誉来评论一个答案,所以我张贴一个答案,添加一个我认为有用的改进:
--force-exclusion
的添加使RuboCop尊重其配置文件中的Exclude声明(这里使用默认的./.rubocop.yml
)。)falq053o5#
这里有另一个比较当前分支和
origin/master
的方法(应该可以在任何存储库主机上使用a-只是在circleci上用bitbucket存储库尝试了一下),它还传递了一个.rubocop.yml
配置文件选项(如果不需要的话,可以删除这部分)。原文大意如下:https://gist.github.com/djburdick/5104d15f612c15dde65f#gistcomment-2029606
f4t66c6m6#
一个更简单的解决方案:
说明:我很少在本地更新
master
,但是执行git fetch
会更新origin/master
,所以我想对此进行比较。我不能让其他建议的diff-tree
和origin/master
解决方案工作。fkaflof67#
也许你可以利用CircleCI’s dynamic configuration feature。
有一个关于如何根据修改了哪些文件来执行特定工作流或步骤的特定指南(https://circleci.com/docs/using-dynamic-configuration/#execute-specific-workflows-or-steps-based-onwhich-files-are-modified)。