46 lines
1.6 KiB
Text
46 lines
1.6 KiB
Text
|
#!/usr/bin/env ruby
|
||
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'pathname'
|
||
|
|
||
|
# This script checks if the package-and-qa job should trigger downstream pipelines to run 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 package-and-qa 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 package-and-qa 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 package-and-qa if there are no specs. E.g., when the MR changes QA framework files.
|
||
|
exit 0 if specs_count == 0
|
||
|
|
||
|
# Skip package-and-qa if there are only specs being put in quarantine.
|
||
|
exit 2 if quarantine_specs_count == specs_count && quarantine_specs_count == files_count
|
||
|
|
||
|
# Run package-and-qa 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.
|