From 73345d4dd9d284e21fb7072a51fa4cf8d70298bd Mon Sep 17 00:00:00 2001 From: Sergio Bobillier Date: Thu, 31 Oct 2024 11:23:13 +0100 Subject: [PATCH] [ELITERT-1198] Add action to run Ruby linters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The action runs the Ruby linters (Rubocop and Reek) on Pull Requests. * A test file with a fest for the linters! 😋 --- .github/workflows/ruby-linters.yml | 41 ++++++++++++++++++++++ .rubocop.yml | 1 + Gemfile.lint | 5 +++ lib/something.rb | 56 ++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+) create mode 100644 .github/workflows/ruby-linters.yml create mode 100644 Gemfile.lint create mode 100644 lib/something.rb diff --git a/.github/workflows/ruby-linters.yml b/.github/workflows/ruby-linters.yml new file mode 100644 index 0000000..915c179 --- /dev/null +++ b/.github/workflows/ruby-linters.yml @@ -0,0 +1,41 @@ +# This workflow runs Rubocop and Reek on the Pull Requests to make sure +# no linter warnings slip by. + +name: Ruby Linters + +on: + pull_request: + branches: [ "master" ] + +permissions: + contents: read + +jobs: + lint: + + runs-on: ubuntu-latest + strategy: + matrix: + ruby-version: ['2.7'] + + env: + BUNDLE_GEMFILE: Gemfile.lint + + steps: + - uses: actions/checkout@v4 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ matrix.ruby-version }} + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + - name: Run Rubocop + uses: reviewdog/action-rubocop@v2.19.1 + with: + skip_install: true + rubocop_version: gemfile + rubocop_extensions: rubocop-rspec:gemfile + use_bundler: true + - name: Run Reek + uses: reviewdog/action-reek@v1.16.0 + with: + reek_version: gemfile diff --git a/.rubocop.yml b/.rubocop.yml index c59b9e2..1111317 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,5 +1,6 @@ AllCops: Exclude: + - vendor/**/* - spec/spec_helper.rb Metrics/BlockLength: Exclude: diff --git a/Gemfile.lint b/Gemfile.lint new file mode 100644 index 0000000..94a5d93 --- /dev/null +++ b/Gemfile.lint @@ -0,0 +1,5 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +gem 'panolint', '~> 0' diff --git a/lib/something.rb b/lib/something.rb new file mode 100644 index 0000000..0cc3947 --- /dev/null +++ b/lib/something.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +# A class to test the linters +class MyClass + # rubocop:disable Metrics/AbcSize + # rubocop:disable Metrics/CyclomaticComplexity + # rubocop:disable Metrics/MethodLength + # rubocop:disable Metrics/PerceivedComplexity + # rubocop:disable Metrics/ParameterLists + def do_something(one, two, three, four, five, six, seven) + if one.present? && two.present? && three.prsent? && four.present? && five.present? && six.present? && seven.present? + do_something_else_with(one, two, three) + doAnotherThing(four, five, six) + + e = mix(one, two) + + if @valid == TRUE + case five + when 'async' + do_another_thing_with('r', six, seven, e) + when 'sync' + do_another_thing_with('m', seven) + when 'nible' + result = four.map(&:name) + end + end + + five.each do |n| + n += 1 + puts "N is now #{n}" + + next unless seven.start_with?("r") + download(seven) + if six.start_wuth?("w") + upload(siv, seven) + end + end + end + + return result + end + # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/CyclomaticComplexity + # rubocop:enable Metrics/MethodLength + # rubocop:enable Metrics/PerceivedComplexity + # rubocop:enable Metrics/ParameterLists + + def do_something_else_with(one, two, three) + if one == true + puts "Print something here:" + puts '#{two} - #{three}' + + @valid = TRUE + end + end +end