Add Rubocop cop to enforce default_version in software definitions
Prevent empty build caches caused by a lack of default version. Closes https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/8476 Signed-off-by: Balasankar 'Balu' C <balasankar@gitlab.com>
This commit is contained in:
parent
72c2e00be6
commit
22ae898b24
15
.rubocop.yml
15
.rubocop.yml
|
@ -78,6 +78,21 @@ Cop/AvoidUsingEnv:
|
||||||
- lib/gitlab/util.rb
|
- lib/gitlab/util.rb
|
||||||
- spec/lib/gitlab/util_spec.rb
|
- spec/lib/gitlab/util_spec.rb
|
||||||
|
|
||||||
|
Cop/SpecifyDefaultVersion:
|
||||||
|
Enabled: true
|
||||||
|
Include:
|
||||||
|
- config/software/*.rb
|
||||||
|
Exclude:
|
||||||
|
# These files either use `path` source and doesn't need a default_version
|
||||||
|
# or is just a wrapper around other definitions
|
||||||
|
- config/software/gitlab-config-template.rb
|
||||||
|
- config/software/gitlab-cookbooks.rb
|
||||||
|
- config/software/gitlab-ctl-ee.rb
|
||||||
|
- config/software/gitlab-ctl.rb
|
||||||
|
- config/software/gitlab-scripts.rb
|
||||||
|
- config/software/gitlab-selinux.rb
|
||||||
|
- config/software/openssl.rb
|
||||||
|
|
||||||
Style/MultilineIfModifier:
|
Style/MultilineIfModifier:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
module Rubocop
|
||||||
|
module Cop
|
||||||
|
class SpecifyDefaultVersion < RuboCop::Cop::Base
|
||||||
|
NOTICE_REGEXP = '^ *default_version'.freeze
|
||||||
|
MSG = 'Specify default_version for the component.'.freeze
|
||||||
|
|
||||||
|
def on_new_investigation
|
||||||
|
return if notice_found?(processed_source)
|
||||||
|
|
||||||
|
add_global_offense(format(MSG))
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def notice_found?(processed_source)
|
||||||
|
notice_regexp = Regexp.new(NOTICE_REGEXP)
|
||||||
|
|
||||||
|
notice_found = false
|
||||||
|
processed_source.lines.each do |line|
|
||||||
|
notice_found = notice_regexp.match?(line)
|
||||||
|
break if notice_found
|
||||||
|
end
|
||||||
|
|
||||||
|
notice_found
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -1 +1,2 @@
|
||||||
require_relative 'cop/avoid_using_env'
|
require_relative 'cop/avoid_using_env'
|
||||||
|
require_relative 'cop/specify_default_version'
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'rubocop/rspec/cop_helper'
|
||||||
|
require 'rubocop/rspec/expect_offense'
|
||||||
|
|
||||||
|
require 'rubocop/cop/specify_default_version'
|
||||||
|
|
||||||
|
RSpec.describe Rubocop::Cop::SpecifyDefaultVersion do
|
||||||
|
include CopHelper
|
||||||
|
include RuboCop::RSpec::ExpectOffense
|
||||||
|
|
||||||
|
subject(:cop) { described_class.new }
|
||||||
|
|
||||||
|
it 'flags violation for software definition files without default_version set' do
|
||||||
|
expect_offense(<<~RUBY)
|
||||||
|
name 'sample'
|
||||||
|
^{} Specify default_version for the component.
|
||||||
|
|
||||||
|
license 'MIT'
|
||||||
|
|
||||||
|
build do
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not flag violation for software definition files with default_version set' do
|
||||||
|
expect_no_offenses(<<~RUBY)
|
||||||
|
name 'sample'
|
||||||
|
|
||||||
|
license 'MIT'
|
||||||
|
|
||||||
|
default_version '1.0.0'
|
||||||
|
|
||||||
|
build do
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
end
|
||||||
|
RUBY
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue