Verified Commit eeaccaac authored by Peter Leitzen's avatar Peter Leitzen Committed by GitLab
Browse files

Merge branch 'malvarez-logging-validator-exit-with-code-2' into 'master'

fix: Logging validator exit with code 2

See merge request !302

Merged-by: default avatarPeter Leitzen <pleitzen@gitlab.com>
Approved-by: default avatarPeter Leitzen <pleitzen@gitlab.com>
Reviewed-by: default avatarGitLab Duo <gitlab-duo@gitlab.com>
Reviewed-by: default avatarMatias Alvarez <malvarez@gitlab.com>
Co-authored-by: default avatarMatias Alvarez <malvarez@gitlab.com>
parents 2c13ca1b 8a51c71a
Loading
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -101,7 +101,9 @@ module Labkit
            warn baseline_generation_message(new_offenses)
          else
            warn report_new_offenses(new_offenses)
            raise "New LabKit logging offenses detected"
            # Raise with exit code 2 to bypass the RSpec retry mechanism
            # See https://gitlab.com/gitlab-org/quality/tooling/labkit-spec/-/work_items/2
            raise SystemExit.new(2) # rubocop:disable Style/RaiseArgs
          end
        end

+8 −8
Original line number Diff line number Diff line
@@ -203,13 +203,13 @@ RSpec.describe Labkit::Logging::FieldValidator do
          File.write(config_path, { 'skip_ci_failure' => false, 'offenses' => [] }.to_yaml)
        end

        it 'raises an error for new offenses' do
        it 'exits with status 2 for new offenses' do
          offenses = registry.instance_variable_get(:@offenses)
          offenses << create_offense('app/models/user.rb', 10, 'meta.user_id', 'Labkit::Fields::GL_USER_ID', 'AppLogger')

          expect do
            suppress_output { described_class.process_violations }
          end.to raise_error(RuntimeError, /New LabKit logging offenses detected/)
          end.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }
        end
      end

@@ -218,36 +218,36 @@ RSpec.describe Labkit::Logging::FieldValidator do
          File.write(config_path, { 'offenses' => [] }.to_yaml)
        end

        it 'raises an error for new offenses' do
        it 'exits with status 2 for new offenses' do
          offenses = registry.instance_variable_get(:@offenses)
          offenses << create_offense('app/models/user.rb', 10, 'meta.user_id', 'Labkit::Fields::GL_USER_ID', 'AppLogger')

          expect do
            suppress_output { described_class.process_violations }
          end.to raise_error(RuntimeError, /New LabKit logging offenses detected/)
          end.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }
        end
      end
    end

    context 'with UPDATE not set' do
      it 'raises an error for new offenses' do
      it 'exits with status 2 for new offenses' do
        offenses = registry.instance_variable_get(:@offenses)
        offenses << create_offense('app/models/user.rb', 10, 'meta.user_id', 'Labkit::Fields::GL_USER_ID', 'AppLogger')

        expect do
          suppress_output { described_class.process_violations }
        end.to raise_error(RuntimeError, /New LabKit logging offenses detected/)
        end.to raise_error(SystemExit) { |e| expect(e.status).to eq(2) }

        expect(File.exist?(config_path)).to be(false)
      end

      it 'reports offense details before raising' do
      it 'reports offense details before exiting' do
        offenses = registry.instance_variable_get(:@offenses)
        offenses << create_offense('app/models/user.rb', 10, 'meta.user_id', 'Labkit::Fields::GL_USER_ID', 'AppLogger')

        expect do
          described_class.process_violations
        end.to raise_error(RuntimeError).and output(%r{app/models/user.rb:10.*meta\.user_id.*GL_USER_ID}m).to_stderr
        end.to raise_error(SystemExit).and output(%r{app/models/user.rb:10.*meta\.user_id.*GL_USER_ID}m).to_stderr
      end
    end