Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/support/fast_quarantine.rb')
-rw-r--r--spec/support/fast_quarantine.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/spec/support/fast_quarantine.rb b/spec/support/fast_quarantine.rb
new file mode 100644
index 00000000000..b5ed1a2aa96
--- /dev/null
+++ b/spec/support/fast_quarantine.rb
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+return unless ENV['CI']
+return if ENV['FAST_QUARANTINE'] == "false"
+return if ENV['CI_MERGE_REQUEST_LABELS'].to_s.include?('pipeline:run-flaky-tests')
+
+require_relative '../../tooling/lib/tooling/fast_quarantine'
+
+RSpec.configure do |config|
+ fast_quarantine_local_path = ENV.fetch('RSPEC_FAST_QUARANTINE_LOCAL_PATH', 'rspec/fast_quarantine-gitlab.txt')
+ fast_quarantine_path = ENV.fetch(
+ 'RSPEC_FAST_QUARANTINE_PATH',
+ File.expand_path("../../#{fast_quarantine_local_path}", __dir__)
+ )
+ fast_quarantine = Tooling::FastQuarantine.new(fast_quarantine_path: fast_quarantine_path)
+ skipped_examples = []
+
+ config.around do |example|
+ if fast_quarantine.skip_example?(example)
+ skipped_examples << example.id
+ skip "Skipping #{example.id} because it's been fast-quarantined."
+ else
+ example.run
+ end
+ end
+
+ config.after(:suite) do
+ next if skipped_examples.empty?
+
+ skipped_tests_report_path = ENV.fetch(
+ 'SKIPPED_TESTS_REPORT_PATH',
+ File.expand_path("../../rspec/flaky/skipped_tests.txt", __dir__)
+ )
+
+ File.write(skipped_tests_report_path, "#{ENV.fetch('CI_JOB_URL', 'local-run')}\n#{skipped_examples.join("\n")}\n\n")
+ end
+end