From 0b54f87a31c23544ca5917bf772ce9c64a61562c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Thu, 11 May 2023 12:12:30 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- tooling/lib/tooling/fast_quarantine.rb | 57 ++++++++++++++++++++++++++++++++++ tooling/rspec_flaky/config.rb | 4 --- 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 tooling/lib/tooling/fast_quarantine.rb (limited to 'tooling') diff --git a/tooling/lib/tooling/fast_quarantine.rb b/tooling/lib/tooling/fast_quarantine.rb new file mode 100644 index 00000000000..a0dc8bc460b --- /dev/null +++ b/tooling/lib/tooling/fast_quarantine.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module Tooling + class FastQuarantine + def initialize(fast_quarantine_path:) + warn "#{fast_quarantine_path} doesn't exist!" unless File.exist?(fast_quarantine_path.to_s) + + @fast_quarantine_path = fast_quarantine_path + end + + def identifiers + @identifiers ||= begin + quarantined_entity_identifiers = File.read(fast_quarantine_path).lines + quarantined_entity_identifiers.compact! + quarantined_entity_identifiers.map! do |quarantined_entity_identifier| + quarantined_entity_identifier.delete_prefix('./').strip + end + rescue => e # rubocop:disable Style/RescueStandardError + $stdout.puts e + [] + end + end + + def skip_example?(example) + identifiers.find do |quarantined_entity_identifier| + case quarantined_entity_identifier + when /^.+_spec\.rb\[[\d:]+\]$/ # example id, e.g. spec/tasks/gitlab/usage_data_rake_spec.rb[1:5:2:1] + example.id == "./#{quarantined_entity_identifier}" + when /^.+_spec\.rb:\d+$/ # file + line, e.g. spec/tasks/gitlab/usage_data_rake_spec.rb:42 + fetch_metadata_from_ancestors(example, :location) + .any?("./#{quarantined_entity_identifier}") + when /^.+_spec\.rb$/ # whole file, e.g. ee/spec/features/boards/swimlanes/epics_swimlanes_sidebar_spec.rb + fetch_metadata_from_ancestors(example, :file_path) + .any?("./#{quarantined_entity_identifier}") + end + end + end + + private + + attr_reader :fast_quarantine_path + + def fetch_metadata_from_ancestors(example, attribute) + metadata = [example.metadata[attribute]] + example_group = example.metadata[:example_group] + + loop do + break if example_group.nil? + + metadata << example_group[attribute] + example_group = example_group[:parent_example_group] + end + + metadata + end + end +end diff --git a/tooling/rspec_flaky/config.rb b/tooling/rspec_flaky/config.rb index 36e35671587..0e36e985aad 100644 --- a/tooling/rspec_flaky/config.rb +++ b/tooling/rspec_flaky/config.rb @@ -18,10 +18,6 @@ module RspecFlaky ENV['NEW_FLAKY_RSPEC_REPORT_PATH'] || rails_path("rspec/flaky/new-report.json") end - def self.skipped_flaky_tests_report_path - ENV['SKIPPED_FLAKY_TESTS_REPORT_PATH'] || rails_path("rspec/flaky/skipped_flaky_tests_report.txt") - end - def self.rails_path(path) return path unless defined?(Rails) -- cgit v1.2.1