gitlab-qa 7.24.1 → 7.24.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16d436d7dcc1ff54323d22b1ced1c4685c78b2ac4290e4deea6f4720b26c7bda
4
- data.tar.gz: 8250c321d7130510768ea563bda98978f9ca53c6eac55344ad7475aa4c771324
3
+ metadata.gz: 86868c3764df21242c8600de6406579ebb747a7d8efcb1aa04393e49af8cf10d
4
+ data.tar.gz: bb659bc291814572d6fdb6f73b77ef6c8a57eb52d10d2412f96b8998f5ba166a
5
5
  SHA512:
6
- metadata.gz: bc86efe53b8067cdf2bcf0788dc9c740bbdf32a8cb0be16d5c3dfee4e5b774f2c4f0ec4787169805d5ca04a075fd0ea3b35bca5b20ae5657906efc8be50eff80
7
- data.tar.gz: 306ee5e2b20f62f50249a5741471a41904e071656b81168e11236398d3b9d3a933419055b84f7667dc23e642163a83ee66aee29c6f3cc0745251cbdcc5b3e696
6
+ metadata.gz: f4e796a110f8044e5eed1b99154672b6371ebb23c41b055e7302295bf2c1cfc5ea8c043c23040385a46340ad02bc07372d307e38e28f1585027047663a824be6
7
+ data.tar.gz: e77ffb360b79a845d000411b55748efa3e7bb4c0bdebfe725ee40dafddc75102cd9cdb86d2e0570c04edb9cad6fbe04193c55a84f35f1304697a505415e32ea6
@@ -0,0 +1,25 @@
1
+ danger-review:
2
+ image: ruby:3.0
3
+ stage: check
4
+ rules:
5
+ - if: '$CI_MERGE_REQUEST_IID'
6
+ needs: []
7
+ retry:
8
+ max: 2
9
+ when:
10
+ - unknown_failure
11
+ - api_failure
12
+ - runner_system_failure
13
+ - stuck_or_timeout_failure
14
+ before_script:
15
+ - bundle install
16
+ script:
17
+ - >
18
+ if [ -z "$DANGER_GITLAB_API_TOKEN" ]; then
19
+ # Force danger to skip CI source GitLab and fallback to "local only git repo".
20
+ unset GITLAB_CI
21
+ # We need the base SHA of the merge request diff to help danger determine the base commit for this shallow clone.
22
+ bundle exec danger dry_run --fail-on-errors=true --verbose --base='$CI_MERGE_REQUEST_DIFF_BASE_SHA' --head='${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-$CI_COMMIT_SHA}'
23
+ else
24
+ bundle exec danger --fail-on-errors=true --verbose
25
+ fi
data/.gitlab-ci.yml CHANGED
@@ -1384,8 +1384,7 @@ generate-knapsack-report:
1384
1384
  include:
1385
1385
  - local: .gitlab/ci/*.gitlab-ci.yml
1386
1386
  - project: 'gitlab-org/quality/pipeline-common'
1387
- file: '/ci/gem-release.yml'
1388
- - project: 'gitlab-org/quality/pipeline-common'
1389
- file: '/ci/allure-report.yml'
1390
- - project: 'gitlab-org/quality/pipeline-common'
1391
- file: '/ci/knapsack-report.yml'
1387
+ file:
1388
+ - '/ci/gem-release.yml'
1389
+ - '/ci/allure-report.yml'
1390
+ - '/ci/knapsack-report.yml'
data/Dangerfile ADDED
@@ -0,0 +1,9 @@
1
+ require 'gitlab-dangerfiles'
2
+
3
+ Gitlab::Dangerfiles.for_project(self) do |dangerfiles|
4
+ # Import all plugins from the gem
5
+ dangerfiles.import_plugins
6
+
7
+ # Import only a subset of rules
8
+ dangerfiles.import_dangerfiles(only: %w[changes_size commit_messages simple_roulette])
9
+ end
data/gitlab-qa.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.require_paths = ['lib']
22
22
 
23
23
  spec.add_development_dependency 'climate_control', '~> 1.0.1'
24
+ spec.add_development_dependency 'gitlab-dangerfiles', '~> 2.10'
24
25
  spec.add_development_dependency 'gitlab-styles', '~> 6.2.1'
25
26
  spec.add_development_dependency 'pry', '~> 0.11'
26
27
  spec.add_development_dependency 'rake', '~> 13.0'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Component
@@ -18,9 +18,7 @@ module Gitlab
18
18
 
19
19
  def_delegators :release, :tag, :image, :edition
20
20
 
21
- AUTHORITY_CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates/authority', __dir__)
22
- GITLAB_CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates/gitlab', __dir__)
23
- GITALY_CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates/gitaly', __dir__)
21
+ CERTIFICATES_PATH = File.expand_path('../../../../tls_certificates', __dir__)
24
22
 
25
23
  SSL_PATH = '/etc/gitlab/ssl'
26
24
  TRUSTED_PATH = '/etc/gitlab/trusted-certs'
@@ -31,10 +29,15 @@ module Gitlab
31
29
  @skip_availability_check = false
32
30
  @omnibus_gitlab_rails_env = {}
33
31
 
34
- @volumes[GITLAB_CERTIFICATES_PATH] = SSL_PATH
35
- @volumes[AUTHORITY_CERTIFICATES_PATH] = TRUSTED_PATH
32
+ @omnibus_configuration = Runtime::OmnibusConfiguration.new(Runtime::Scenario.omnibus_configuration)
36
33
 
37
- @omnibus_configuration ||= Runtime::OmnibusConfiguration.new(Runtime::Scenario.omnibus_configuration)
34
+ @working_dir_tmp_cert_path = Dir.mktmpdir('certs', FileUtils.mkdir_p("#{Dir.pwd}/tmp"))
35
+ @authority_cert_path = "#{@working_dir_tmp_cert_path}/authority"
36
+ @gitlab_cert_path = "#{@working_dir_tmp_cert_path}/gitlab"
37
+ @gitaly_cert_path = "#{@working_dir_tmp_cert_path}/gitaly"
38
+
39
+ @volumes[@gitlab_cert_path] = SSL_PATH
40
+ @volumes[@authority_cert_path] = TRUSTED_PATH
38
41
 
39
42
  self.release = 'CE'
40
43
  end
@@ -77,8 +80,8 @@ module Gitlab
77
80
  end
78
81
 
79
82
  def gitaly_tls
80
- @volumes.delete(GITLAB_CERTIFICATES_PATH)
81
- @volumes[GITALY_CERTIFICATES_PATH] = SSL_PATH
83
+ @volumes.delete(@gitlab_cert_path)
84
+ @volumes[@gitaly_cert_path] = SSL_PATH
82
85
  end
83
86
 
84
87
  def relative_path
@@ -91,6 +94,13 @@ module Gitlab
91
94
 
92
95
  def prepare
93
96
  prepare_gitlab_omnibus_config
97
+ copy_certificates
98
+
99
+ super
100
+ end
101
+
102
+ def teardown!
103
+ FileUtils.rm_rf(@working_dir_tmp_cert_path)
94
104
 
95
105
  super
96
106
  end
@@ -168,6 +178,14 @@ module Gitlab
168
178
 
169
179
  private
170
180
 
181
+ # Copy certs to a temporary directory in current working directory.
182
+ # This is needed for docker-in-docker ci environments where mount points outside of build dir are not accessible
183
+ #
184
+ # @return [void]
185
+ def copy_certificates
186
+ FileUtils.cp_r("#{CERTIFICATES_PATH}/.", @working_dir_tmp_cert_path)
187
+ end
188
+
171
189
  def ensure_configured!
172
190
  raise 'Please configure an instance first!' unless [name, release, network].all?
173
191
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'securerandom'
2
4
 
3
5
  # This component sets up the docker-openldap (https://github.com/osixia/docker-openldap)
@@ -16,18 +18,12 @@ module Gitlab
16
18
  module QA
17
19
  module Component
18
20
  class LDAP < Base
19
- DOCKER_IMAGE = 'osixia/openldap'.freeze
20
- DOCKER_IMAGE_TAG = 'latest'.freeze
21
- LDAP_USER = 'tanuki'.freeze
22
- LDAP_PASSWORD = 'password'.freeze
23
- BOOTSTRAP_LDIF = '/container/service/slapd/assets/config/bootstrap/ldif/custom'.freeze
24
- FIXTURE_PATH = File.expand_path('../../../../fixtures/ldap'.freeze, __dir__)
25
-
26
- def initialize
27
- super
28
-
29
- @volumes[FIXTURE_PATH] = BOOTSTRAP_LDIF
30
- end
21
+ DOCKER_IMAGE = 'osixia/openldap'
22
+ DOCKER_IMAGE_TAG = 'latest'
23
+ LDAP_USER = 'tanuki'
24
+ LDAP_PASSWORD = 'password'
25
+ BOOTSTRAP_LDIF = '/container/service/slapd/assets/config/bootstrap/ldif/custom'
26
+ FIXTURE_PATH = File.expand_path('../../../../fixtures/ldap', __dir__)
31
27
 
32
28
  # LDAP_TLS is true by default
33
29
  def tls=(status)
@@ -59,6 +55,19 @@ module Gitlab
59
55
  super
60
56
  end
61
57
 
58
+ def prepare
59
+ copy_fixtures
60
+ @volumes["#{working_dir_tmp_fixture_path}/ldap"] = BOOTSTRAP_LDIF
61
+
62
+ super
63
+ end
64
+
65
+ def teardown!
66
+ FileUtils.rm_rf(working_dir_tmp_fixture_path)
67
+
68
+ super
69
+ end
70
+
62
71
  # rubocop:disable Metrics/AbcSize
63
72
  def start
64
73
  # copy-service needed for bootstraping LDAP user:
@@ -88,6 +97,23 @@ module Gitlab
88
97
  ::Gitlab::QA::Runtime::Env.ldap_username = username
89
98
  ::Gitlab::QA::Runtime::Env.ldap_password = password
90
99
  end
100
+
101
+ private
102
+
103
+ # Temporary fixture dir in working directory
104
+ #
105
+ # @return [String]
106
+ def working_dir_tmp_fixture_path
107
+ @local_fixture_path ||= Dir.mktmpdir('ldap', FileUtils.mkdir_p("#{Dir.pwd}/tmp"))
108
+ end
109
+
110
+ # Copy fixtures to current working directory
111
+ # This is needed for docker-in-docker ci environments where mount points outside of build dir are not accessible
112
+ #
113
+ # @return [void]
114
+ def copy_fixtures
115
+ FileUtils.cp_r(FIXTURE_PATH, working_dir_tmp_fixture_path)
116
+ end
91
117
  end
92
118
  end
93
119
  end
@@ -106,8 +106,14 @@ module Gitlab
106
106
  def up_to_date_labels(test:, issue: nil, new_labels: Set.new)
107
107
  labels = issue_labels(issue)
108
108
  labels |= new_labels
109
- ee_test?(test) ? labels << "Enterprise Edition" : labels.delete("Enterprise Edition")
110
- quarantine_job? ? labels << "quarantine" : labels.delete("quarantine")
109
+ ee_test?(test) ? labels << 'Enterprise Edition' : labels.delete('Enterprise Edition')
110
+
111
+ if test.quarantine?
112
+ labels << 'quarantine'
113
+ labels << "quarantine::#{test.quarantine_type}"
114
+ else
115
+ labels.delete_if { |label| label.include?('quarantine') }
116
+ end
111
117
 
112
118
  labels
113
119
  end
@@ -133,10 +139,6 @@ module Gitlab
133
139
  test.file =~ %r{features/ee/(api|browser_ui)}
134
140
  end
135
141
 
136
- def quarantine_job?
137
- Runtime::Env.ci_job_name&.include?('quarantine')
138
- end
139
-
140
142
  def partial_file_path(path)
141
143
  path.match(/((api|browser_ui).*)/i)[1]
142
144
  end
@@ -100,7 +100,6 @@ module Gitlab
100
100
 
101
101
  def failure_summary
102
102
  summary = [":x: ~\"#{pipeline}::failed\""]
103
- summary << "~\"quarantine\"" if quarantine_job?
104
103
  summary << "in job `#{Runtime::Env.ci_job_name}` in #{Runtime::Env.ci_job_url}"
105
104
  summary.join(' ')
106
105
  end
@@ -30,6 +30,7 @@ module Gitlab
30
30
 
31
31
  def update_testcase(testcase, test)
32
32
  puts "Test case labels updated." if update_labels(testcase, test)
33
+ puts "Test case quarantine section updated." if update_quarantine_link(testcase, test)
33
34
  end
34
35
 
35
36
  private
@@ -61,7 +62,9 @@ module Gitlab
61
62
  end
62
63
 
63
64
  def new_issue_description(test)
64
- "#{super}\n\n#{execution_graph_section(test)}"
65
+ quarantine_section = test.quarantine? && test.quarantine_issue ? "\n\n### Quarantine issue\n\n#{test.quarantine_issue}" : ''
66
+
67
+ "#{super}#{quarantine_section}\n\n#{execution_graph_section(test)}"
65
68
  end
66
69
 
67
70
  def execution_graph_section(test)
@@ -84,6 +87,24 @@ module Gitlab
84
87
  def issue_title_needs_updating?(testcase, test)
85
88
  super || !testcase.description.include?(execution_graph_section(test)) && !%w[canary production preprod release].include?(pipeline)
86
89
  end
90
+
91
+ def quarantine_link_needs_updating?(testcase, test)
92
+ if test.quarantine? && test.quarantine_issue
93
+ return false if testcase.description.include?(test.quarantine_issue)
94
+ else
95
+ return false unless testcase.description.include?('Quarantine issue')
96
+ end
97
+
98
+ true
99
+ end
100
+
101
+ def update_quarantine_link(testcase, test)
102
+ return unless quarantine_link_needs_updating?(testcase, test)
103
+
104
+ new_description = updated_description(testcase, test)
105
+
106
+ gitlab.edit_issue(iid: testcase.iid, options: { description: new_description })
107
+ end
87
108
  end
88
109
  end
89
110
  end
@@ -87,6 +87,14 @@ module Gitlab
87
87
  report['quarantine'].present?
88
88
  end
89
89
 
90
+ def quarantine_type
91
+ report['quarantine']['type'] if quarantine?
92
+ end
93
+
94
+ def quarantine_issue
95
+ report['quarantine']['issue'] if quarantine?
96
+ end
97
+
90
98
  private
91
99
 
92
100
  # rubocop:disable Metrics/AbcSize
@@ -149,12 +149,14 @@ module Gitlab
149
149
  value = env_var_name_if_defined(name) || send(attribute) # rubocop:disable GitlabSecurity/PublicSend
150
150
  vars[name] = value if value
151
151
  end
152
- qa_variables = ENV.select { |k, _v| k.start_with?('QA_') }
152
+ qa_variables = ENV.each_with_object({}) do |(name, value), vars|
153
+ next unless name.start_with?('QA_')
153
154
 
154
- {
155
- **qa_variables,
156
- **defined_variables
157
- }
155
+ var_name = env_var_name_if_defined(name)
156
+ vars[name] = var_name if var_name
157
+ end
158
+
159
+ qa_variables.merge(defined_variables)
158
160
  end
159
161
 
160
162
  def debug?
@@ -1,34 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'logger'
4
3
  require 'forwardable'
5
- require'rainbow/refinement'
6
4
 
7
5
  module Gitlab
8
6
  module QA
9
7
  module Runtime
10
- module Logger
8
+ class Logger
11
9
  extend SingleForwardable
12
- using Rainbow
13
10
 
14
11
  def_delegators :logger, :debug, :info, :warn, :error, :fatal, :unknown
15
12
 
16
- singleton_class.module_eval do
17
- attr_writer :logger
18
-
19
- def logger
20
- Rainbow.enabled = Runtime::Env.colorized_logs?
21
-
22
- @logger ||= ::Logger.new($stdout).tap do |logger|
23
- logger.level = Runtime::Env.debug? ? ::Logger::DEBUG : ::Logger::INFO
24
-
25
- logger.formatter = proc do |severity, datetime, progname, msg|
26
- date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")
27
-
28
- "[date=#{date_format} from=GitLab QA] #{severity.ljust(5)}-- ".yellow + "#{msg}\n"
29
- end
30
- end
31
- end
13
+ def self.logger
14
+ @logger ||= QA::TestLogger.logger(level: Runtime::Env.debug? ? ::Logger::DEBUG : ::Logger::INFO)
32
15
  end
33
16
  end
34
17
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+ require 'rainbow'
5
+
6
+ module Gitlab
7
+ module QA
8
+ # Common test logger implementation
9
+ #
10
+ class TestLogger
11
+ LEVEL_COLORS = {
12
+ "DEBUG" => :magenta,
13
+ "INFO" => :green,
14
+ "WARN" => :yellow,
15
+ "ERROR" => :red,
16
+ "FATAL" => :indianred
17
+ }.freeze
18
+
19
+ Rainbow.enabled = Runtime::Env.colorized_logs?
20
+
21
+ def self.logger(level: ::Logger::INFO, source: 'Gitlab QA')
22
+ ::Logger.new($stdout).tap do |logger|
23
+ logger.level = level
24
+
25
+ logger.formatter = proc do |severity, datetime, progname, msg|
26
+ date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")
27
+ msg_prefix = "[date=#{date_format} from=#{source}] #{severity.ljust(5)} -- "
28
+
29
+ Rainbow(msg_prefix).public_send(LEVEL_COLORS.fetch(severity, :silver)) + "#{msg}\n" # rubocop:disable GitlabSecurity/PublicSend
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '7.24.1'
5
+ VERSION = '7.24.4'
6
6
  end
7
7
  end
data/lib/gitlab/qa.rb CHANGED
@@ -3,6 +3,7 @@ module Gitlab
3
3
  autoload :Release, 'gitlab/qa/release'
4
4
  autoload :Reporter, 'gitlab/qa/reporter'
5
5
  autoload :Runner, 'gitlab/qa/runner'
6
+ autoload :TestLogger, 'gitlab/qa/test_logger'
6
7
 
7
8
  module Runtime
8
9
  autoload :Env, 'gitlab/qa/runtime/env'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab-qa
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.24.1
4
+ version: 7.24.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitLab Quality
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-02 00:00:00.000000000 Z
11
+ date: 2022-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: climate_control
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: gitlab-dangerfiles
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.10'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: gitlab-styles
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -204,12 +218,14 @@ files:
204
218
  - ".dockerignore"
205
219
  - ".gitignore"
206
220
  - ".gitlab-ci.yml"
221
+ - ".gitlab/ci/danger.gitlab-ci.yml"
207
222
  - ".gitlab/ci/rules.gitlab-ci.yml"
208
223
  - ".gitlab/merge_request_templates/Release.md"
209
224
  - ".rspec"
210
225
  - ".rubocop.yml"
211
226
  - ".rubocop_todo.yml"
212
227
  - CONTRIBUTING.md
228
+ - Dangerfile
213
229
  - Gemfile
214
230
  - LICENSE
215
231
  - README.md
@@ -340,6 +356,7 @@ files:
340
356
  - lib/gitlab/qa/support/get_request.rb
341
357
  - lib/gitlab/qa/support/http_request.rb
342
358
  - lib/gitlab/qa/support/invalid_response_error.rb
359
+ - lib/gitlab/qa/test_logger.rb
343
360
  - lib/gitlab/qa/version.rb
344
361
  - tls_certificates/authority/ca.crt
345
362
  - tls_certificates/authority/ca.key