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

package_and_qa_check « qa « bin « tooling - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 21deb0fcd2ddb98c920dd9f17747b976944b54c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/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.