gitlab-qa 8.4.1 → 8.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.gitlab/ci/jobs/base.gitlab-ci.yml +1 -3
  3. data/.rubocop_todo.yml +0 -12
  4. data/Gemfile.lock +1 -1
  5. data/exe/gitlab-qa +1 -1
  6. data/lib/gitlab/qa/component/base.rb +2 -2
  7. data/lib/gitlab/qa/component/gitlab.rb +1 -1
  8. data/lib/gitlab/qa/component/staging.rb +17 -35
  9. data/lib/gitlab/qa/component/suggested_reviewer.rb +47 -0
  10. data/lib/gitlab/qa/docker/command.rb +3 -14
  11. data/lib/gitlab/qa/docker/engine.rb +1 -1
  12. data/lib/gitlab/qa/release.rb +6 -2
  13. data/lib/gitlab/qa/report/results_reporter_shared.rb +1 -1
  14. data/lib/gitlab/qa/runtime/env.rb +7 -0
  15. data/lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb +62 -0
  16. data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +1 -1
  17. data/lib/gitlab/qa/service/cluster_provider/base.rb +33 -0
  18. data/lib/gitlab/qa/service/cluster_provider/k3d.rb +141 -0
  19. data/lib/gitlab/qa/service/kubernetes_cluster.rb +62 -0
  20. data/lib/gitlab/qa/support/gitlab_version_info.rb +4 -1
  21. data/lib/gitlab/qa/support/shell_command.rb +98 -0
  22. data/lib/gitlab/qa/support/shellout.rb +16 -0
  23. data/lib/gitlab/qa/version.rb +1 -1
  24. data/lib/gitlab/qa.rb +1 -1
  25. data/support/manifests/suggested_reviewer/authenticator.yaml +41 -0
  26. data/support/manifests/suggested_reviewer/postgres.yaml +84 -0
  27. data/support/manifests/suggested_reviewer/pubsub.yaml +41 -0
  28. data/support/manifests/suggested_reviewer/recommender-bot.yaml +242 -0
  29. data/support/manifests/suggested_reviewer/recommender.yaml +52 -0
  30. metadata +14 -4
  31. data/lib/gitlab/qa/docker/shellout.rb +0 -77
  32. data/lib/gitlab/qa/support/dev_ee_qa_image.rb +0 -54
@@ -1,77 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'open3'
4
- require 'active_support/core_ext/string/filters'
5
-
6
- module Gitlab
7
- module QA
8
- module Docker
9
- class Shellout
10
- using Rainbow
11
-
12
- StatusError = Class.new(StandardError)
13
-
14
- def initialize(command)
15
- @command = command
16
- @output = []
17
- @logger = Runtime::Logger.logger
18
- end
19
-
20
- attr_reader :command, :output
21
-
22
- def execute! # rubocop:disable Metrics/AbcSize
23
- raise StatusError, 'Command already executed' if output.any?
24
-
25
- logger.info("Docker shell command: `#{command.mask_secrets.cyan}`")
26
-
27
- Open3.popen2e(@command.to_s) do |_in, out, wait|
28
- out.each do |line|
29
- output.push(line)
30
-
31
- if stream_progress
32
- print "."
33
- elsif command.stream_output
34
- puts line
35
- end
36
-
37
- yield line, wait if block_given?
38
- end
39
- puts if stream_progress && !output.empty?
40
-
41
- fail! if wait.value.exited? && wait.value.exitstatus.nonzero?
42
-
43
- logger.debug("Docker shell command output:\n#{string_output}") unless command.stream_output || output.empty?
44
- end
45
-
46
- string_output
47
- end
48
-
49
- private
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
-
61
- # Stream only command execution progress and log output when command finished
62
- #
63
- # @return [Boolean]
64
- def stream_progress
65
- !(Runtime::Env.ci || command.stream_output)
66
- end
67
-
68
- # Stringified command output
69
- #
70
- # @return [String]
71
- def string_output
72
- output.join.chomp
73
- end
74
- end
75
- end
76
- end
77
- end
@@ -1,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
- require 'uri'
5
-
6
- module Gitlab
7
- module QA
8
- module Support
9
- class DevEEQAImage
10
- attr_reader :base_url
11
-
12
- DEV_ADDRESS = 'https://dev.gitlab.org'
13
- GITLAB_EE_QA_REPOSITORY_ID = 55
14
- QAImageNotFoundError = Class.new(StandardError)
15
-
16
- def initialize
17
- @base_url = "#{DEV_ADDRESS}/api/v4/projects/gitlab%2Fomnibus-gitlab/registry/repositories/#{GITLAB_EE_QA_REPOSITORY_ID}/tags?per_page=100"
18
-
19
- Runtime::Env.require_qa_dev_access_token!
20
- end
21
-
22
- def retrieve_image_from_container_registry!(revision)
23
- request_url = base_url
24
-
25
- begin
26
- response = api_get!(URI.parse(request_url))
27
- tags = JSON.parse(response.body)
28
-
29
- matching_qa_image_tag = find_matching_qa_image_tag(tags, revision)
30
- return matching_qa_image_tag['location'] if matching_qa_image_tag
31
-
32
- request_url = next_page_url_from_response(response)
33
- end while request_url
34
-
35
- raise QAImageNotFoundError, "No `gitlab-ee-qa` image could be found for the revision `#{revision}`."
36
- end
37
-
38
- private
39
-
40
- def api_get!(uri)
41
- Support::GetRequest.new(uri, Runtime::Env.qa_dev_access_token).execute!
42
- end
43
-
44
- def next_page_url_from_response(response)
45
- response['x-next-page'].to_s != '' ? "#{base_url}&page=#{response['x-next-page']}" : nil
46
- end
47
-
48
- def find_matching_qa_image_tag(tags, revision)
49
- tags.find { |tag| tag['name'].end_with?(revision) }
50
- end
51
- end
52
- end
53
- end
54
- end