From e1aa5a74d5f9d7bf23d3aaab75e94ae17b96016d Mon Sep 17 00:00:00 2001 From: mo khan Date: Wed, 16 Sep 2020 16:06:19 -0600 Subject: feat: install rubocop linter --- .rubocop.yml | 30 ++++++++++ Gemfile | 6 ++ Gemfile.lock | 51 +++++++++++++++++ bin/lint | 8 +++ lib/e2e.rb | 1 + lib/e2e/dependency_scanning_report.rb | 1 + lib/e2e/docker.rb | 6 +- lib/e2e/x509.rb | 1 + spec/gemnasium_maven_spec.rb | 7 ++- spec/spec_helper.rb | 105 +++++++++++++++++----------------- spec/spotbugs_spec.rb | 1 + spec/support/docker_helper.rb | 1 + spec/support/scanner_context.rb | 5 +- 13 files changed, 162 insertions(+), 61 deletions(-) create mode 100644 .rubocop.yml create mode 100755 bin/lint 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 -- cgit v1.2.3