summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormo khan <mo.khan@gmail.com>2020-09-16 16:06:19 -0600
committermo khan <mo.khan@gmail.com>2020-09-16 16:06:19 -0600
commite1aa5a74d5f9d7bf23d3aaab75e94ae17b96016d (patch)
tree213539e38c7143383dffe91703e2f581cb46662f
parent7f4287f91253c5ea09cb3ff8cd102e3f0b5db373 (diff)
feat: install rubocop linter
-rw-r--r--.rubocop.yml30
-rw-r--r--Gemfile6
-rw-r--r--Gemfile.lock51
-rwxr-xr-xbin/lint8
-rw-r--r--lib/e2e.rb1
-rw-r--r--lib/e2e/dependency_scanning_report.rb1
-rw-r--r--lib/e2e/docker.rb6
-rw-r--r--lib/e2e/x509.rb1
-rw-r--r--spec/gemnasium_maven_spec.rb7
-rw-r--r--spec/spec_helper.rb105
-rw-r--r--spec/spotbugs_spec.rb1
-rw-r--r--spec/support/docker_helper.rb1
-rw-r--r--spec/support/scanner_context.rb5
13 files changed, 162 insertions, 61 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
new file mode 100644
index 0000000..f6d3f57
--- /dev/null
+++ b/.rubocop.yml
@@ -0,0 +1,30 @@
+inherit_gem:
+ gitlab-styles:
+ - rubocop-default.yml
+
+require:
+ - rubocop-rspec
+
+AllCops:
+ TargetRubyVersion: 2.7
+ Exclude:
+ - 'tmp/**/*'
+ - 'spec/fixtures/**/*'
+ - 'vendor/**/*'
+
+Cop/GemFetcher:
+ Enabled: false
+
+Naming/ClassAndModuleCamelCase:
+ Exclude:
+ - 'lib/license/management/report/v1_1.rb'
+ - 'lib/license/management/report/v2_1.rb'
+
+Layout/FirstArrayElementIndentation:
+ EnforcedStyle: consistent
+
+Layout/FirstHashElementIndentation:
+ EnforcedStyle: consistent
+
+Rails/SkipsModelValidations:
+ Enabled: false
diff --git a/Gemfile b/Gemfile
index 91a788b..07a73fa 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,3 +2,9 @@
source "https://rubygems.org"
gem "rspec", "~> 3.9"
+
+group :test do
+ gem "rubocop", "~> 0.82"
+ gem "rubocop-rspec", "~> 1.41"
+ gem 'gitlab-styles', '~> 4.3'
+end
diff --git a/Gemfile.lock b/Gemfile.lock
index bbce5c3..bb83217 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,31 @@
GEM
remote: https://rubygems.org/
specs:
+ activesupport (6.0.3.3)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ i18n (>= 0.7, < 2)
+ minitest (~> 5.1)
+ tzinfo (~> 1.1)
+ zeitwerk (~> 2.2, >= 2.2.2)
+ ast (2.4.1)
+ concurrent-ruby (1.1.7)
diff-lcs (1.4.4)
+ gitlab-styles (4.3.0)
+ rubocop (~> 0.82.0)
+ rubocop-gitlab-security (~> 0.1.0)
+ rubocop-performance (~> 1.5.2)
+ rubocop-rails (~> 2.5)
+ rubocop-rspec (~> 1.36)
+ i18n (1.8.5)
+ concurrent-ruby (~> 1.0)
+ jaro_winkler (1.5.4)
+ minitest (5.14.2)
+ parallel (1.19.2)
+ parser (2.7.1.4)
+ ast (~> 2.4.1)
+ rack (2.2.3)
+ rainbow (3.0.0)
+ rexml (3.2.4)
rspec (3.9.0)
rspec-core (~> 3.9.0)
rspec-expectations (~> 3.9.0)
@@ -15,12 +39,39 @@ GEM
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.9.0)
rspec-support (3.9.3)
+ rubocop (0.82.0)
+ jaro_winkler (~> 1.5.1)
+ parallel (~> 1.10)
+ parser (>= 2.7.0.1)
+ rainbow (>= 2.2.2, < 4.0)
+ rexml
+ ruby-progressbar (~> 1.7)
+ unicode-display_width (>= 1.4.0, < 2.0)
+ rubocop-gitlab-security (0.1.1)
+ rubocop (>= 0.51)
+ rubocop-performance (1.5.2)
+ rubocop (>= 0.71.0)
+ rubocop-rails (2.6.0)
+ activesupport (>= 4.2.0)
+ rack (>= 1.1)
+ rubocop (>= 0.82.0)
+ rubocop-rspec (1.41.0)
+ rubocop (>= 0.68.1)
+ ruby-progressbar (1.10.1)
+ thread_safe (0.3.6)
+ tzinfo (1.2.7)
+ thread_safe (~> 0.1)
+ unicode-display_width (1.7.0)
+ zeitwerk (2.4.0)
PLATFORMS
ruby
DEPENDENCIES
+ gitlab-styles (~> 4.3)
rspec (~> 3.9)
+ rubocop (~> 0.82)
+ rubocop-rspec (~> 1.41)
BUNDLED WITH
2.1.4
diff --git a/bin/lint b/bin/lint
new file mode 100755
index 0000000..7d467b4
--- /dev/null
+++ b/bin/lint
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+set -e
+
+cd "$(dirname "$0")/.."
+
+shellcheck bin/*
+bundle exec rubocop
diff --git a/lib/e2e.rb b/lib/e2e.rb
index 5752453..cbdd9b1 100644
--- a/lib/e2e.rb
+++ b/lib/e2e.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
require 'e2e/dependency_scanning_report'
require 'e2e/docker'
require 'e2e/project'
diff --git a/lib/e2e/dependency_scanning_report.rb b/lib/e2e/dependency_scanning_report.rb
index 9f6e4be..51c35d0 100644
--- a/lib/e2e/dependency_scanning_report.rb
+++ b/lib/e2e/dependency_scanning_report.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
class DependencyScanningReport
def initialize(project_path:)
report_path = project_path.join('gl-dependency-scanning-report.json')
diff --git a/lib/e2e/docker.rb b/lib/e2e/docker.rb
index 3a08c8c..8cd9fbe 100644
--- a/lib/e2e/docker.rb
+++ b/lib/e2e/docker.rb
@@ -22,9 +22,9 @@ class Docker
env_options = DEFAULT_ENV.merge(env).map { |(key, value)| "--env #{key}='#{value}'" }
Dir.chdir pwd do
command = if debug
- expand([:docker, :run, '-it', "--entrypoint=''", '--rm', "--volume=#{project_path}:/tmp/app", '--add-host=maven.test:127.0.0.1', '--network=host', env_options, image, '/bin/bash -l'])
- else
- expand([:docker, :run, '--rm', "--volume=#{project_path}:/tmp/app", '--network=host', '--add-host=maven.test:127.0.0.1', env_options, image, '/analyzer run'])
+ expand([:docker, :run, '-it', "--entrypoint=''", '--rm', "--volume=#{project_path}:/tmp/app", '--add-host=maven.test:127.0.0.1', '--network=host', env_options, image, '/bin/bash -l'])
+ else
+ expand([:docker, :run, '--rm', "--volume=#{project_path}:/tmp/app", '--network=host', '--add-host=maven.test:127.0.0.1', env_options, image, '/analyzer run'])
end
system(command, exception: true)
end
diff --git a/lib/e2e/x509.rb b/lib/e2e/x509.rb
index 898ecc1..820c468 100644
--- a/lib/e2e/x509.rb
+++ b/lib/e2e/x509.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
class X509
def self.self_signed(key: OpenSSL::PKey::RSA.new(4096))
certificate = OpenSSL::X509::Certificate.new
diff --git a/spec/gemnasium_maven_spec.rb b/spec/gemnasium_maven_spec.rb
index 16511ec..b34b02f 100644
--- a/spec/gemnasium_maven_spec.rb
+++ b/spec/gemnasium_maven_spec.rb
@@ -1,15 +1,16 @@
+# frozen_string_literal: true
require 'openssl'
RSpec.describe 'gemnasium-maven' do
let(:scanner) { self.class.description }
- ['8', '13', '11', '14'].each do |java_version|
+ %w[8 13 11 14].each do |java_version|
let(:project_fixture) { 'java/maven/custom-tls' }
let(:env) { { 'ADDITIONAL_CA_CERT_BUNDLE' => X509.self_signed.to_pem, 'DS_JAVA_VERSION' => java_version } }
specify do
- expect(subject.to_h['dependency_files'].count).to eql(1)
- expect(subject.to_h['dependency_files'][0]['dependencies'].count).to eql(1)
+ expect(subject.to_h['dependency_files'].count).to be(1)
+ expect(subject.to_h['dependency_files'][0]['dependencies'].count).to be(1)
expect(subject.to_h['dependency_files'][0]['dependencies'][0]['package']['name']).to eql('com.fasterxml.jackson.core/jackson-core')
expect(subject.to_h['dependency_files'][0]['dependencies'][0]['version']).to eql('2.10.0')
end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 7d513b4..303f328 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
# This file was generated by the `rspec --init` command. Conventionally, all
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
# The generated `.rspec` file contains `--require spec_helper` which will cause
@@ -48,57 +49,55 @@ RSpec.configure do |config|
# triggering implicit auto-inclusion in groups with matching metadata.
config.shared_context_metadata_behavior = :apply_to_host_groups
-# The settings below are suggested to provide a good initial experience
-# with RSpec, but feel free to customize to your heart's content.
-=begin
- # This allows you to limit a spec run to individual examples or groups
- # you care about by tagging them with `:focus` metadata. When nothing
- # is tagged with `:focus`, all examples get run. RSpec also provides
- # aliases for `it`, `describe`, and `context` that include `:focus`
- # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
- config.filter_run_when_matching :focus
-
- # Allows RSpec to persist some state between runs in order to support
- # the `--only-failures` and `--next-failure` CLI options. We recommend
- # you configure your source control system to ignore this file.
- config.example_status_persistence_file_path = "spec/examples.txt"
-
- # Limits the available syntax to the non-monkey patched syntax that is
- # recommended. For more details, see:
- # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
- # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
- # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
- config.disable_monkey_patching!
-
- # This setting enables warnings. It's recommended, but in some cases may
- # be too noisy due to issues in dependencies.
- config.warnings = true
-
- # Many RSpec users commonly either run the entire suite or an individual
- # file, and it's useful to allow more verbose output when running an
- # individual spec file.
- if config.files_to_run.one?
- # Use the documentation formatter for detailed output,
- # unless a formatter has already been configured
- # (e.g. via a command-line flag).
- config.default_formatter = "doc"
- end
-
- # Print the 10 slowest examples and example groups at the
- # end of the spec run, to help surface which specs are running
- # particularly slow.
- config.profile_examples = 10
-
- # Run specs in random order to surface order dependencies. If you find an
- # order dependency and want to debug it, you can fix the order by providing
- # the seed, which is printed after each run.
- # --seed 1234
- config.order = :random
-
- # Seed global randomization in this process using the `--seed` CLI option.
- # Setting this allows you to use `--seed` to deterministically reproduce
- # test failures related to randomization by passing the same `--seed` value
- # as the one that triggered the failure.
- Kernel.srand config.seed
-=end
+ # The settings below are suggested to provide a good initial experience
+ # with RSpec, but feel free to customize to your heart's content.
+ # # This allows you to limit a spec run to individual examples or groups
+ # # you care about by tagging them with `:focus` metadata. When nothing
+ # # is tagged with `:focus`, all examples get run. RSpec also provides
+ # # aliases for `it`, `describe`, and `context` that include `:focus`
+ # # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
+ # config.filter_run_when_matching :focus
+ #
+ # # Allows RSpec to persist some state between runs in order to support
+ # # the `--only-failures` and `--next-failure` CLI options. We recommend
+ # # you configure your source control system to ignore this file.
+ # config.example_status_persistence_file_path = "spec/examples.txt"
+ #
+ # # Limits the available syntax to the non-monkey patched syntax that is
+ # # recommended. For more details, see:
+ # # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
+ # # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
+ # # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
+ # config.disable_monkey_patching!
+ #
+ # # This setting enables warnings. It's recommended, but in some cases may
+ # # be too noisy due to issues in dependencies.
+ # config.warnings = true
+ #
+ # # Many RSpec users commonly either run the entire suite or an individual
+ # # file, and it's useful to allow more verbose output when running an
+ # # individual spec file.
+ # if config.files_to_run.one?
+ # # Use the documentation formatter for detailed output,
+ # # unless a formatter has already been configured
+ # # (e.g. via a command-line flag).
+ # config.default_formatter = "doc"
+ # end
+ #
+ # # Print the 10 slowest examples and example groups at the
+ # # end of the spec run, to help surface which specs are running
+ # # particularly slow.
+ # config.profile_examples = 10
+ #
+ # # Run specs in random order to surface order dependencies. If you find an
+ # # order dependency and want to debug it, you can fix the order by providing
+ # # the seed, which is printed after each run.
+ # # --seed 1234
+ # config.order = :random
+ #
+ # # Seed global randomization in this process using the `--seed` CLI option.
+ # # Setting this allows you to use `--seed` to deterministically reproduce
+ # # test failures related to randomization by passing the same `--seed` value
+ # # as the one that triggered the failure.
+ # Kernel.srand config.seed
end
diff --git a/spec/spotbugs_spec.rb b/spec/spotbugs_spec.rb
index cd2cfc5..6ddb85a 100644
--- a/spec/spotbugs_spec.rb
+++ b/spec/spotbugs_spec.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
RSpec.describe 'spotbugs' do
let(:project_fixture) { 'java/maven/custom-tls' }
let(:scanner) { self.class.description }
diff --git a/spec/support/docker_helper.rb b/spec/support/docker_helper.rb
index 4df1e6e..d1b6c21 100644
--- a/spec/support/docker_helper.rb
+++ b/spec/support/docker_helper.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
RSpec.configure do |config|
config.before(:suite) do
Pathname.pwd.join('src').each_child do |file|
diff --git a/spec/support/scanner_context.rb b/spec/support/scanner_context.rb
index 3252d27..af4e7fc 100644
--- a/spec/support/scanner_context.rb
+++ b/spec/support/scanner_context.rb
@@ -1,3 +1,4 @@
+# frozen_string_literal: true
RSpec.shared_context 'a scanner' do
subject { project.report_for(type: report_type) }
@@ -5,11 +6,11 @@ RSpec.shared_context 'a scanner' do
let(:docker_image) { "#{scanner}:latest" }
let(:scanner) { raise "`scanner` not specified. Choose: #{Pathname.pwd.glob('src/*').map(&:basename).join(', ')}" }
let(:project) { Project.new }
- let(:env) { { } }
+ let(:env) { {} }
let(:report_types) { { 'gemnasium-maven' => :dependency_scanning, 'spotbugs' => :sast } }
let(:report_type) { report_types.fetch(scanner) }
- around :example do |example|
+ around do |example|
project.mount(dir: fixture_file(project_fixture))
docker.run(image: docker_image, project_path: project.path, env: env)
example.run