summaryrefslogtreecommitdiff
path: root/tooling
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-05-11 12:12:30 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-11 12:12:30 +0000
commit0b54f87a31c23544ca5917bf772ce9c64a61562c (patch)
tree79d56df6750e84fd4a10205d9dcce293f7c5d491 /tooling
parente348fb4c1b9eaf21655001dc4346ceb0c0c3d5b4 (diff)
downloadgitlab-ce-0b54f87a31c23544ca5917bf772ce9c64a61562c.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'tooling')
-rw-r--r--tooling/lib/tooling/fast_quarantine.rb57
-rw-r--r--tooling/rspec_flaky/config.rb4
2 files changed, 57 insertions, 4 deletions
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)