gitlab-qa 7.34.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab/ci/jobs/registry_with_cdn.gitlab-ci.yml +12 -0
  3. data/.rubocop_todo.yml +15 -30
  4. data/Dangerfile +2 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +3 -2
  7. data/Rakefile +2 -0
  8. data/docs/run_qa_against_gdk.md +5 -0
  9. data/exe/gitlab-qa +1 -0
  10. data/exe/gitlab-qa-report +1 -0
  11. data/gitlab-qa.gemspec +1 -0
  12. data/lib/gitlab/qa/component/base.rb +3 -1
  13. data/lib/gitlab/qa/component/elasticsearch.rb +3 -1
  14. data/lib/gitlab/qa/component/gitlab.rb +42 -24
  15. data/lib/gitlab/qa/component/internet_tunnel.rb +4 -2
  16. data/lib/gitlab/qa/component/jira.rb +4 -2
  17. data/lib/gitlab/qa/component/mail_hog.rb +3 -2
  18. data/lib/gitlab/qa/component/minio.rb +7 -5
  19. data/lib/gitlab/qa/component/postgresql.rb +4 -2
  20. data/lib/gitlab/qa/component/preprod.rb +3 -1
  21. data/lib/gitlab/qa/component/production.rb +3 -1
  22. data/lib/gitlab/qa/component/release.rb +3 -1
  23. data/lib/gitlab/qa/component/saml.rb +4 -2
  24. data/lib/gitlab/qa/component/specs.rb +2 -0
  25. data/lib/gitlab/qa/component/staging.rb +4 -2
  26. data/lib/gitlab/qa/component/staging_ref.rb +4 -2
  27. data/lib/gitlab/qa/docker/command.rb +7 -1
  28. data/lib/gitlab/qa/docker/engine.rb +10 -0
  29. data/lib/gitlab/qa/docker/shellout.rb +24 -14
  30. data/lib/gitlab/qa/docker/volumes.rb +3 -1
  31. data/lib/gitlab/qa/release.rb +6 -4
  32. data/lib/gitlab/qa/report/{junit_test_results.rb → j_unit_test_results.rb} +0 -0
  33. data/lib/gitlab/qa/report/prepare_stage_reports.rb +2 -0
  34. data/lib/gitlab/qa/report/summary_table.rb +2 -0
  35. data/lib/gitlab/qa/report/update_screenshot_path.rb +2 -0
  36. data/lib/gitlab/qa/reporter.rb +2 -0
  37. data/lib/gitlab/qa/runtime/env.rb +9 -4
  38. data/lib/gitlab/qa/scenario/actable.rb +2 -0
  39. data/lib/gitlab/qa/scenario/cli_commands.rb +3 -1
  40. data/lib/gitlab/qa/scenario/template.rb +2 -0
  41. data/lib/gitlab/qa/scenario/test/instance/airgapped.rb +2 -0
  42. data/lib/gitlab/qa/scenario/test/instance/any.rb +2 -0
  43. data/lib/gitlab/qa/scenario/test/instance/deployment_base.rb +2 -0
  44. data/lib/gitlab/qa/scenario/test/instance/geo.rb +2 -0
  45. data/lib/gitlab/qa/scenario/test/instance/image.rb +2 -0
  46. data/lib/gitlab/qa/scenario/test/instance/preprod.rb +2 -0
  47. data/lib/gitlab/qa/scenario/test/instance/production.rb +2 -0
  48. data/lib/gitlab/qa/scenario/test/instance/relative_url.rb +2 -0
  49. data/lib/gitlab/qa/scenario/test/instance/release.rb +2 -0
  50. data/lib/gitlab/qa/scenario/test/instance/repository_storage.rb +2 -0
  51. data/lib/gitlab/qa/scenario/test/instance/smoke.rb +2 -0
  52. data/lib/gitlab/qa/scenario/test/instance/staging.rb +2 -0
  53. data/lib/gitlab/qa/scenario/test/instance/staging_geo.rb +2 -0
  54. data/lib/gitlab/qa/scenario/test/instance/staging_ref.rb +2 -0
  55. data/lib/gitlab/qa/scenario/test/instance/staging_ref_geo.rb +2 -0
  56. data/lib/gitlab/qa/scenario/test/integration/client_ssl.rb +2 -0
  57. data/lib/gitlab/qa/scenario/test/integration/elasticsearch.rb +2 -0
  58. data/lib/gitlab/qa/scenario/test/integration/geo.rb +2 -0
  59. data/lib/gitlab/qa/scenario/test/integration/gitaly_cluster.rb +2 -0
  60. data/lib/gitlab/qa/scenario/test/integration/group_saml.rb +2 -0
  61. data/lib/gitlab/qa/scenario/test/integration/instance_saml.rb +2 -0
  62. data/lib/gitlab/qa/scenario/test/integration/jira.rb +2 -0
  63. data/lib/gitlab/qa/scenario/test/integration/kubernetes.rb +2 -0
  64. data/lib/gitlab/qa/scenario/test/integration/ldap.rb +8 -6
  65. data/lib/gitlab/qa/scenario/test/integration/ldap_no_server.rb +2 -0
  66. data/lib/gitlab/qa/scenario/test/integration/ldap_no_tls.rb +2 -0
  67. data/lib/gitlab/qa/scenario/test/integration/ldap_tls.rb +2 -0
  68. data/lib/gitlab/qa/scenario/test/integration/mattermost.rb +2 -0
  69. data/lib/gitlab/qa/scenario/test/integration/mtls.rb +2 -0
  70. data/lib/gitlab/qa/scenario/test/integration/praefect.rb +2 -0
  71. data/lib/gitlab/qa/scenario/test/integration/saml.rb +2 -0
  72. data/lib/gitlab/qa/scenario/test/integration/smtp.rb +2 -0
  73. data/lib/gitlab/qa/scenario/test/omnibus/image.rb +2 -0
  74. data/lib/gitlab/qa/scenario/test/omnibus/update.rb +2 -0
  75. data/lib/gitlab/qa/scenario/test/omnibus/upgrade.rb +2 -0
  76. data/lib/gitlab/qa/scenario/test/sanity/version.rb +2 -0
  77. data/lib/gitlab/qa/slack/post_to_slack.rb +2 -0
  78. data/lib/gitlab/qa/support/dev_ee_qa_image.rb +3 -1
  79. data/lib/gitlab/qa/support/get_request.rb +2 -0
  80. data/lib/gitlab/qa/support/http_request.rb +2 -0
  81. data/lib/gitlab/qa/support/invalid_response_error.rb +2 -0
  82. data/lib/gitlab/qa/test_logger.rb +1 -1
  83. data/lib/gitlab/qa/version.rb +1 -1
  84. data/lib/gitlab/qa.rb +53 -143
  85. data/scripts/generate-qa-jobs.rb +1 -0
  86. data/support/data/admin_access_token_seed.rb +1 -1
  87. data/support/data/license_usage_seed.rb +2 -1
  88. metadata +17 -3
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open3'
4
- require 'rainbow/refinement'
4
+ require 'active_support/core_ext/string/filters'
5
5
 
6
6
  module Gitlab
7
7
  module QA
@@ -17,16 +17,16 @@ module Gitlab
17
17
  @logger = Runtime::Logger.logger
18
18
  end
19
19
 
20
- attr_reader :command, :logger
20
+ attr_reader :command, :output
21
21
 
22
22
  def execute! # rubocop:disable Metrics/AbcSize
23
- raise StatusError, 'Command already executed' if @output.any?
23
+ raise StatusError, 'Command already executed' if output.any?
24
24
 
25
- logger.info("Docker shell command: `#{@command.mask_secrets.cyan}`")
25
+ logger.info("Docker shell command: `#{command.mask_secrets.cyan}`")
26
26
 
27
27
  Open3.popen2e(@command.to_s) do |_in, out, wait|
28
28
  out.each do |line|
29
- @output.push(line)
29
+ output.push(line)
30
30
 
31
31
  if stream_progress
32
32
  print "."
@@ -36,21 +36,28 @@ module Gitlab
36
36
 
37
37
  yield line, wait if block_given?
38
38
  end
39
- puts if stream_progress
39
+ puts if stream_progress && !output.empty?
40
40
 
41
- if wait.value.exited? && wait.value.exitstatus.nonzero?
42
- logger.error("Docker shell command output:\n#{output}") unless command.stream_output
43
- raise StatusError, "Docker command `#{@command.mask_secrets[0..100]}` failed! ✘"
44
- end
41
+ fail! if wait.value.exited? && wait.value.exitstatus.nonzero?
45
42
 
46
- logger.debug("Docker shell command output:\n#{output}") unless command.stream_output || output.empty?
43
+ logger.debug("Docker shell command output:\n#{string_output}") unless command.stream_output || output.empty?
47
44
  end
48
45
 
49
- output
46
+ string_output
50
47
  end
51
48
 
52
49
  private
53
50
 
51
+ attr_reader :logger
52
+
53
+ # Raise error and print output to error log level
54
+ #
55
+ # @return [void]
56
+ def fail!
57
+ logger.error("Docker shell command output:\n#{string_output}") unless command.stream_output
58
+ raise StatusError, "Docker command `#{command.mask_secrets.truncate(100)}` failed! " + "✘".red
59
+ end
60
+
54
61
  # Stream only command execution progress and log output when command finished
55
62
  #
56
63
  # @return [Boolean]
@@ -58,8 +65,11 @@ module Gitlab
58
65
  !(Runtime::Env.ci || command.stream_output)
59
66
  end
60
67
 
61
- def output
62
- @output.join.chomp
68
+ # Stringified command output
69
+ #
70
+ # @return [String]
71
+ def string_output
72
+ output.join.chomp
63
73
  end
64
74
  end
65
75
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'tmpdir'
2
4
 
3
5
  module Gitlab
@@ -7,7 +9,7 @@ module Gitlab
7
9
  VOLUMES = { 'config' => '/etc/gitlab',
8
10
  'data' => '/var/opt/gitlab' }.freeze
9
11
 
10
- QA_CONTAINER_WORKDIR = '/home/gitlab/qa'.freeze
12
+ QA_CONTAINER_WORKDIR = '/home/gitlab/qa'
11
13
 
12
14
  def initialize(volumes = VOLUMES)
13
15
  @volumes = volumes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  class Release
@@ -49,10 +51,10 @@ module Gitlab
49
51
  \z
50
52
  /xi
51
53
 
52
- DEFAULT_TAG = 'latest'.freeze
53
- DEFAULT_CANONICAL_TAG = 'nightly'.freeze
54
- DEV_REGISTRY = 'dev.gitlab.org:5005'.freeze
55
- COM_REGISTRY = 'registry.gitlab.com'.freeze
54
+ DEFAULT_TAG = 'latest'
55
+ DEFAULT_CANONICAL_TAG = 'nightly'
56
+ DEV_REGISTRY = 'dev.gitlab.org:5005'
57
+ COM_REGISTRY = 'registry.gitlab.com'
56
58
 
57
59
  InvalidImageNameError = Class.new(RuntimeError)
58
60
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'nokogiri'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'nokogiri'
2
4
  require 'table_print'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'nokogiri'
2
4
  require 'json'
3
5
  require 'active_support/core_ext/object/blank'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'optparse'
2
4
 
3
5
  module Gitlab
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/core_ext/object/blank'
2
4
  require 'securerandom'
3
- require 'rainbow/refinement'
4
5
 
5
6
  module Gitlab
6
7
  module QA
@@ -142,7 +143,9 @@ module Gitlab
142
143
  attr_writer(method_name)
143
144
 
144
145
  define_method(method_name) do
145
- env_var_value_if_defined(env_name) || (instance_variable_get("@#{method_name}") if instance_variable_defined?("@#{method_name}"))
146
+ env_var_value_if_defined(env_name) || (if instance_variable_defined?("@#{method_name}")
147
+ instance_variable_get("@#{method_name}")
148
+ end)
146
149
  end
147
150
  end
148
151
 
@@ -220,11 +223,13 @@ module Gitlab
220
223
  end
221
224
 
222
225
  def host_artifacts_dir
223
- @host_artifacts_dir ||= File.join(env_var_value_if_defined('QA_ARTIFACTS_DIR') || '/tmp/gitlab-qa', Runtime::Env.run_id)
226
+ @host_artifacts_dir ||= File.join(
227
+ env_var_value_if_defined('QA_ARTIFACTS_DIR') || '/tmp/gitlab-qa', Runtime::Env.run_id
228
+ )
224
229
  end
225
230
 
226
231
  def elastic_version
227
- env_var_value_if_defined('ELASTIC_VERSION') || '7.17.0'.freeze
232
+ env_var_value_if_defined('ELASTIC_VERSION') || '8.2.0'
228
233
  end
229
234
 
230
235
  def require_license!
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
4
6
  module CLICommands
5
- GIT_LFS_VERSION = '2.8.0'.freeze
7
+ GIT_LFS_VERSION = '2.8.0'
6
8
 
7
9
  def self.git_lfs_install_commands
8
10
  [
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -8,12 +10,12 @@ module Gitlab
8
10
  class LDAP < Scenario::Template
9
11
  LDAP_PORT = 389
10
12
  LDAP_TLS_PORT = 636
11
- BASE_DN = 'dc=example,dc=org'.freeze
12
- BIND_DN = 'cn=admin,dc=example,dc=org'.freeze
13
- GROUP_BASE = 'ou=Global Groups,dc=example,dc=org'.freeze
14
- ADMIN_GROUP = 'AdminGroup'.freeze
15
- ADMIN_USER = 'admin'.freeze
16
- ADMIN_PASSWORD = 'admin'.freeze
13
+ BASE_DN = 'dc=example,dc=org'
14
+ BIND_DN = 'cn=admin,dc=example,dc=org'
15
+ GROUP_BASE = 'ou=Global Groups,dc=example,dc=org'
16
+ ADMIN_GROUP = 'AdminGroup'
17
+ ADMIN_USER = 'admin'
18
+ ADMIN_PASSWORD = 'admin'
17
19
 
18
20
  attr_reader :gitlab_name, :spec_suite, :tls, :ldap_name, :network, :orchestrate_ldap_server
19
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'yaml'
2
4
 
3
5
  module Gitlab
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Scenario
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'tmpdir'
2
4
  require 'fileutils'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'tmpdir'
2
4
  require 'fileutils'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'net/http'
3
5
  require 'cgi'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Slack
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'json'
2
4
  require 'uri'
3
5
 
@@ -7,7 +9,7 @@ module Gitlab
7
9
  class DevEEQAImage
8
10
  attr_reader :base_url
9
11
 
10
- DEV_ADDRESS = 'https://dev.gitlab.org'.freeze
12
+ DEV_ADDRESS = 'https://dev.gitlab.org'
11
13
  GITLAB_EE_QA_REPOSITORY_ID = 55
12
14
  QAImageNotFoundError = Class.new(StandardError)
13
15
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'uri'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'http'
2
4
  require 'json'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Gitlab
2
4
  module QA
3
5
  module Support
@@ -61,7 +61,7 @@ module Gitlab
61
61
  logger.formatter = proc do |severity, datetime, progname, msg|
62
62
  msg_prefix = message_prefix(datetime, source, severity)
63
63
 
64
- "#{msg_prefix}#{msg}\n"
64
+ "#{msg_prefix}#{msg}\n".gsub(/\e\[(\d+)(?:;\d+)*m/, "")
65
65
  end
66
66
  end
67
67
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
- VERSION = '7.34.0'
5
+ VERSION = '8.0.0'
6
6
  end
7
7
  end