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 'tooling/bin/qa/run_qa_check')
-rwxr-xr-xtooling/bin/qa/run_qa_check45
1 files changed, 45 insertions, 0 deletions
diff --git a/tooling/bin/qa/run_qa_check b/tooling/bin/qa/run_qa_check
new file mode 100755
index 00000000000..5b8844ec4fd
--- /dev/null
+++ b/tooling/bin/qa/run_qa_check
@@ -0,0 +1,45 @@
+#!/usr/bin/env ruby
+# frozen_string_literal: true
+
+require 'pathname'
+
+# This script checks if the code changes justify running the QA suite.
+#
+# It assumes the first argument is a directory of files containing diffs of changes from an MR
+# (e.g., created by tooling/bin/find_change_diffs). It exits with a success code if there are no diffs, or if the diffs
+# are suitable to run QA tests.
+#
+# The script will abort (exit code 1) if the argument is missing.
+#
+# The following condition will result in a failure code (2), indicating that QA tests should not run:
+#
+# - If the changes only include tests being put in quarantine
+
+abort("ERROR: Please specify the directory containing MR diffs.") if ARGV.empty?
+diffs_dir = Pathname.new(ARGV.shift).expand_path
+
+# Run QA tests if there are no diffs. E.g., in scheduled pipelines
+exit 0 if diffs_dir.glob('**/*').empty?
+
+files_count = 0
+specs_count = 0
+quarantine_specs_count = 0
+
+diffs_dir.glob('**/*').each do |path|
+ next if path.directory?
+
+ files_count += 1
+ next unless path.to_s.end_with?('_spec.rb.diff')
+
+ specs_count += 1
+ quarantine_specs_count += 1 if path.read.match?(/^\+.*,? quarantine:/)
+end
+
+# Run QA tests if there are no specs. E.g., when the MR changes QA framework files.
+exit 0 if specs_count == 0
+
+# Skip QA tests if there are only specs being put in quarantine.
+exit 2 if quarantine_specs_count == specs_count && quarantine_specs_count == files_count
+
+# Run QA tests under any other circumstances. E.g., if there are specs being put in quarantine but there are also
+# other changes that might need to be tested.