#!/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.