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.
- checksums.yaml +4 -4
- data/.gitlab/ci/jobs/base.gitlab-ci.yml +1 -3
- data/.rubocop_todo.yml +0 -12
- data/Gemfile.lock +1 -1
- data/exe/gitlab-qa +1 -1
- data/lib/gitlab/qa/component/base.rb +2 -2
- data/lib/gitlab/qa/component/gitlab.rb +1 -1
- data/lib/gitlab/qa/component/staging.rb +17 -35
- data/lib/gitlab/qa/component/suggested_reviewer.rb +47 -0
- data/lib/gitlab/qa/docker/command.rb +3 -14
- data/lib/gitlab/qa/docker/engine.rb +1 -1
- data/lib/gitlab/qa/release.rb +6 -2
- data/lib/gitlab/qa/report/results_reporter_shared.rb +1 -1
- data/lib/gitlab/qa/runtime/env.rb +7 -0
- data/lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb +62 -0
- data/lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb +1 -1
- data/lib/gitlab/qa/service/cluster_provider/base.rb +33 -0
- data/lib/gitlab/qa/service/cluster_provider/k3d.rb +141 -0
- data/lib/gitlab/qa/service/kubernetes_cluster.rb +62 -0
- data/lib/gitlab/qa/support/gitlab_version_info.rb +4 -1
- data/lib/gitlab/qa/support/shell_command.rb +98 -0
- data/lib/gitlab/qa/support/shellout.rb +16 -0
- data/lib/gitlab/qa/version.rb +1 -1
- data/lib/gitlab/qa.rb +1 -1
- data/support/manifests/suggested_reviewer/authenticator.yaml +41 -0
- data/support/manifests/suggested_reviewer/postgres.yaml +84 -0
- data/support/manifests/suggested_reviewer/pubsub.yaml +41 -0
- data/support/manifests/suggested_reviewer/recommender-bot.yaml +242 -0
- data/support/manifests/suggested_reviewer/recommender.yaml +52 -0
- metadata +14 -4
- data/lib/gitlab/qa/docker/shellout.rb +0 -77
- data/lib/gitlab/qa/support/dev_ee_qa_image.rb +0 -54
@@ -0,0 +1,98 @@
|
|
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 Support
|
9
|
+
class ShellCommand
|
10
|
+
using Rainbow
|
11
|
+
|
12
|
+
StatusError = Class.new(StandardError)
|
13
|
+
|
14
|
+
# Shell command
|
15
|
+
#
|
16
|
+
# @param [<String, Array>] command
|
17
|
+
# @param [<String, Array>] mask_secrets
|
18
|
+
# @param [Boolean] stream_output stream command output to stdout directly instead of logger
|
19
|
+
def initialize(command = nil, stdin_data: nil, mask_secrets: nil, stream_output: false)
|
20
|
+
@command = command
|
21
|
+
@mask_secrets = Array(mask_secrets)
|
22
|
+
@stream_output = stream_output
|
23
|
+
@output = []
|
24
|
+
@logger = Runtime::Logger.logger
|
25
|
+
@stdin_data = stdin_data
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :command, :output, :stream_output
|
29
|
+
|
30
|
+
def execute! # rubocop:disable Metrics/AbcSize
|
31
|
+
raise StatusError, 'Command already executed' if output.any?
|
32
|
+
|
33
|
+
logger.info("Shell command: `#{mask_secrets(command).cyan}`")
|
34
|
+
|
35
|
+
Open3.popen2e(@command.to_s) do |stdin, out, wait|
|
36
|
+
if @stdin_data
|
37
|
+
stdin.puts(@stdin_data)
|
38
|
+
stdin.close
|
39
|
+
end
|
40
|
+
|
41
|
+
out.each do |line|
|
42
|
+
output.push(line)
|
43
|
+
|
44
|
+
if stream_progress
|
45
|
+
print "."
|
46
|
+
elsif stream_output
|
47
|
+
puts line
|
48
|
+
end
|
49
|
+
|
50
|
+
yield line, wait if block_given?
|
51
|
+
end
|
52
|
+
puts if stream_progress && !output.empty?
|
53
|
+
|
54
|
+
fail! if wait.value.exited? && wait.value.exitstatus.nonzero?
|
55
|
+
|
56
|
+
logger.debug("Shell command output:\n#{string_output}") unless stream_output || output.empty?
|
57
|
+
end
|
58
|
+
|
59
|
+
string_output
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
attr_reader :logger
|
65
|
+
|
66
|
+
# Raise error and print output to error log level
|
67
|
+
#
|
68
|
+
# @return [void]
|
69
|
+
def fail!
|
70
|
+
logger.error("Shell command output:\n#{string_output}") unless stream_output
|
71
|
+
raise StatusError, "Command `#{mask_secrets(command).truncate(100)}` failed! " + "✘".red
|
72
|
+
end
|
73
|
+
|
74
|
+
# Stream only command execution progress and log output when command finished
|
75
|
+
#
|
76
|
+
# @return [Boolean]
|
77
|
+
def stream_progress
|
78
|
+
!(Runtime::Env.ci || stream_output)
|
79
|
+
end
|
80
|
+
|
81
|
+
# Stringified command output
|
82
|
+
#
|
83
|
+
# @return [String]
|
84
|
+
def string_output
|
85
|
+
mask_secrets(output.join.chomp)
|
86
|
+
end
|
87
|
+
|
88
|
+
# Returns a masked string
|
89
|
+
#
|
90
|
+
# @param [String] input the string to mask
|
91
|
+
# @return [String] The masked string
|
92
|
+
def mask_secrets(input)
|
93
|
+
@mask_secrets.each_with_object(+input) { |secret, s| s.gsub!(secret, '*****') }.to_s
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gitlab
|
4
|
+
module QA
|
5
|
+
module Support
|
6
|
+
module Shellout
|
7
|
+
module_function
|
8
|
+
|
9
|
+
def shell(command = nil, stdin_data: nil, mask_secrets: nil, stream_output: false, &block)
|
10
|
+
Support::ShellCommand.new(
|
11
|
+
command, stdin_data: stdin_data, mask_secrets: mask_secrets, stream_output: stream_output).execute!(&block)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/gitlab/qa/version.rb
CHANGED
data/lib/gitlab/qa.rb
CHANGED
@@ -7,9 +7,9 @@ module Gitlab
|
|
7
7
|
module QA
|
8
8
|
loader = Zeitwerk::Loader.new
|
9
9
|
loader.push_dir("#{__dir__}/qa", namespace: Gitlab::QA)
|
10
|
+
loader.ignore("#{__dir__}/qa/version.rb")
|
10
11
|
|
11
12
|
loader.inflector.inflect(
|
12
|
-
'dev_ee_qa_image' => 'DevEEQAImage',
|
13
13
|
'results_in_testcases' => 'ResultsInTestCases',
|
14
14
|
'postgresql' => 'PostgreSQL',
|
15
15
|
'registry_with_cdn' => 'RegistryWithCDN',
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
apiVersion: apps/v1
|
3
|
+
kind: Deployment
|
4
|
+
metadata:
|
5
|
+
name: authenticator-deployment
|
6
|
+
labels:
|
7
|
+
app: authenticator
|
8
|
+
spec:
|
9
|
+
replicas: 1
|
10
|
+
selector:
|
11
|
+
matchLabels:
|
12
|
+
app: authenticator
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
app: authenticator
|
17
|
+
spec:
|
18
|
+
imagePullSecrets:
|
19
|
+
- name: gitlab-registry
|
20
|
+
containers:
|
21
|
+
- name: authenticator
|
22
|
+
image: registry.gitlab.com/gitlab-org/modelops/applied-ml/review-recommender/authenticator:0.1.0
|
23
|
+
imagePullPolicy: Always
|
24
|
+
ports:
|
25
|
+
- containerPort: 8080
|
26
|
+
args: []
|
27
|
+
env:
|
28
|
+
- name: AUTHENTICATOR_SERVICE_PORT
|
29
|
+
value: "8080"
|
30
|
+
---
|
31
|
+
apiVersion: v1
|
32
|
+
kind: Service
|
33
|
+
metadata:
|
34
|
+
name: authenticator-service
|
35
|
+
spec:
|
36
|
+
type: NodePort
|
37
|
+
ports:
|
38
|
+
- port: 8080
|
39
|
+
targetPort: 8080
|
40
|
+
selector:
|
41
|
+
app: authenticator
|
@@ -0,0 +1,84 @@
|
|
1
|
+
---
|
2
|
+
apiVersion: v1
|
3
|
+
kind: Secret
|
4
|
+
metadata:
|
5
|
+
name: postgres-secret
|
6
|
+
type: kubernetes.io/basic-auth
|
7
|
+
stringData:
|
8
|
+
username: reviewer-recommender
|
9
|
+
password: ml4dawin
|
10
|
+
|
11
|
+
---
|
12
|
+
apiVersion: v1
|
13
|
+
kind: PersistentVolumeClaim
|
14
|
+
metadata:
|
15
|
+
name: postgres-pvc
|
16
|
+
spec:
|
17
|
+
storageClassName: local-path
|
18
|
+
accessModes:
|
19
|
+
- ReadWriteOnce
|
20
|
+
resources:
|
21
|
+
requests:
|
22
|
+
storage: 1Gi
|
23
|
+
|
24
|
+
---
|
25
|
+
apiVersion: apps/v1
|
26
|
+
kind: Deployment
|
27
|
+
metadata:
|
28
|
+
name: postgres-deployment
|
29
|
+
spec:
|
30
|
+
replicas: 1
|
31
|
+
selector:
|
32
|
+
matchLabels:
|
33
|
+
app: postgres
|
34
|
+
template:
|
35
|
+
metadata:
|
36
|
+
labels:
|
37
|
+
app: postgres
|
38
|
+
spec:
|
39
|
+
containers:
|
40
|
+
- name: postgres
|
41
|
+
image: postgres:13-alpine
|
42
|
+
imagePullPolicy: IfNotPresent
|
43
|
+
ports:
|
44
|
+
- containerPort: 5432
|
45
|
+
volumeMounts:
|
46
|
+
- name: postgres-pv
|
47
|
+
mountPath: /var/lib/postgresql/data
|
48
|
+
subPath: postgres
|
49
|
+
resources:
|
50
|
+
limits:
|
51
|
+
memory: 256Mi
|
52
|
+
cpu: 250m
|
53
|
+
env:
|
54
|
+
- name: POSTGRES_DB
|
55
|
+
value: reviewer-recommender
|
56
|
+
- name: POSTGRES_USER
|
57
|
+
valueFrom:
|
58
|
+
secretKeyRef:
|
59
|
+
name: postgres-secret
|
60
|
+
key: username
|
61
|
+
- name: POSTGRES_PASSWORD
|
62
|
+
valueFrom:
|
63
|
+
secretKeyRef:
|
64
|
+
name: postgres-secret
|
65
|
+
key: password
|
66
|
+
volumes:
|
67
|
+
- name: postgres-pv
|
68
|
+
persistentVolumeClaim:
|
69
|
+
claimName: postgres-pvc
|
70
|
+
|
71
|
+
---
|
72
|
+
apiVersion: v1
|
73
|
+
kind: Service
|
74
|
+
metadata:
|
75
|
+
name: postgres
|
76
|
+
labels:
|
77
|
+
app: postgres
|
78
|
+
spec:
|
79
|
+
type: ClusterIP
|
80
|
+
selector:
|
81
|
+
app: postgres
|
82
|
+
ports:
|
83
|
+
- port: 5432
|
84
|
+
targetPort: 5432
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
apiVersion: apps/v1
|
3
|
+
kind: Deployment
|
4
|
+
metadata:
|
5
|
+
name: pubsub-deployment
|
6
|
+
labels:
|
7
|
+
app: pubsub
|
8
|
+
spec:
|
9
|
+
replicas: 1
|
10
|
+
selector:
|
11
|
+
matchLabels:
|
12
|
+
app: pubsub
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
app: pubsub
|
17
|
+
spec:
|
18
|
+
containers:
|
19
|
+
- name: pubsub
|
20
|
+
image: singularities/pubsub-emulator:latest
|
21
|
+
imagePullPolicy: IfNotPresent
|
22
|
+
env:
|
23
|
+
- name: PUBSUB_PROJECT_ID
|
24
|
+
value: project-test
|
25
|
+
- name: PUBSUB_LISTEN_ADDRESS
|
26
|
+
value: 0.0.0.0:8432
|
27
|
+
|
28
|
+
---
|
29
|
+
apiVersion: v1
|
30
|
+
kind: Service
|
31
|
+
metadata:
|
32
|
+
name: pubsub
|
33
|
+
labels:
|
34
|
+
app: pubsub
|
35
|
+
spec:
|
36
|
+
type: ClusterIP
|
37
|
+
selector:
|
38
|
+
app: pubsub
|
39
|
+
ports:
|
40
|
+
- port: 8432
|
41
|
+
targetPort: 8432
|
@@ -0,0 +1,242 @@
|
|
1
|
+
---
|
2
|
+
apiVersion: v1
|
3
|
+
kind: Secret
|
4
|
+
metadata:
|
5
|
+
name: gcp-credentials
|
6
|
+
type: Opaque
|
7
|
+
data:
|
8
|
+
gcp_json: "ewogICJjbGllbnRfaWQiOiAiMTIzNDU2Nzg5YWJjZGVmZy5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsCiAgImNsaWVudF9zZWNyZXQiOiAiZC1GTHlld3VxeWV1cXciLAogICJxdW90YV9wcm9qZWN0X2lkIjogInN1Z2dlc3RlZC1yZXZpZXdlci0xNTA0MDBlNiIsCiAgInJlZnJlc2hfdG9rZW4iOiAiMS8vMTIzNDU2NzhhYmNkZWZnIiwKICAidHlwZSI6ICJhdXRob3JpemVkX3VzZXIiCn0K"
|
9
|
+
|
10
|
+
---
|
11
|
+
apiVersion: v1
|
12
|
+
kind: ConfigMap
|
13
|
+
metadata:
|
14
|
+
name: recommender-bot-envoy-sidecar-config
|
15
|
+
labels:
|
16
|
+
app: recommender-bot
|
17
|
+
data:
|
18
|
+
envoy.yaml: |
|
19
|
+
static_resources:
|
20
|
+
listeners:
|
21
|
+
- name: "recommender-bot-http-listener"
|
22
|
+
address:
|
23
|
+
socket_address: { address: "0.0.0.0", port_value: 8282 }
|
24
|
+
filter_chains:
|
25
|
+
- filters:
|
26
|
+
- name: "envoy.filters.network.http_connection_manager"
|
27
|
+
typed_config:
|
28
|
+
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
|
29
|
+
stat_prefix: "grpc_json"
|
30
|
+
codec_type: "AUTO"
|
31
|
+
route_config:
|
32
|
+
name: "local_route"
|
33
|
+
virtual_hosts:
|
34
|
+
- name: "local_service"
|
35
|
+
domains: [ "*" ]
|
36
|
+
routes:
|
37
|
+
- match: { prefix: "/", grpc: {} }
|
38
|
+
route: { cluster: "recommender-bot", timeout: 60s }
|
39
|
+
http_filters:
|
40
|
+
- name: "envoy.filters.http.grpc_json_transcoder"
|
41
|
+
typed_config:
|
42
|
+
"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
|
43
|
+
proto_descriptor: "/data/protos/recommender-bot.protoset.pb"
|
44
|
+
services: [ "bot.RecommenderService" ]
|
45
|
+
print_options:
|
46
|
+
add_whitespace: true
|
47
|
+
always_print_primitive_fields: true
|
48
|
+
always_print_enums_as_ints: false
|
49
|
+
preserve_proto_field_names: false
|
50
|
+
convert_grpc_status: true
|
51
|
+
request_validation_options:
|
52
|
+
reject_unknown_method: true
|
53
|
+
reject_unknown_query_parameters: true
|
54
|
+
- name: "envoy.filters.http.router"
|
55
|
+
- name: "recommender-bot-http-auth-listener"
|
56
|
+
address:
|
57
|
+
socket_address: { address: "0.0.0.0", port_value: 8484 }
|
58
|
+
filter_chains:
|
59
|
+
- filters:
|
60
|
+
- name: "envoy.filters.network.http_connection_manager"
|
61
|
+
typed_config:
|
62
|
+
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
|
63
|
+
stat_prefix: "grpc_json"
|
64
|
+
codec_type: "AUTO"
|
65
|
+
route_config:
|
66
|
+
name: "local_route"
|
67
|
+
virtual_hosts:
|
68
|
+
- name: "local_service"
|
69
|
+
domains: [ "*" ]
|
70
|
+
routes:
|
71
|
+
- match: { prefix: "/", grpc: {} }
|
72
|
+
route: { cluster: "recommender-bot", timeout: 60s }
|
73
|
+
http_filters:
|
74
|
+
- name: "envoy.filters.http.grpc_json_transcoder"
|
75
|
+
typed_config:
|
76
|
+
"@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
|
77
|
+
proto_descriptor: "/data/protos/recommender-bot.protoset.pb"
|
78
|
+
services: [ "bot.RecommenderService" ]
|
79
|
+
print_options:
|
80
|
+
add_whitespace: true
|
81
|
+
always_print_primitive_fields: true
|
82
|
+
always_print_enums_as_ints: false
|
83
|
+
preserve_proto_field_names: false
|
84
|
+
convert_grpc_status: true
|
85
|
+
request_validation_options:
|
86
|
+
reject_unknown_method: true
|
87
|
+
reject_unknown_query_parameters: true
|
88
|
+
- name: "envoy.filters.http.ext_authz"
|
89
|
+
typed_config:
|
90
|
+
"@type": type.googleapis.com/envoy.extensions.filters.http.ext_authz.v3.ExtAuthz
|
91
|
+
http_service:
|
92
|
+
server_uri:
|
93
|
+
uri: "http://authenticator-service:8080"
|
94
|
+
cluster: "ext-auth"
|
95
|
+
timeout: 60s
|
96
|
+
authorization_request:
|
97
|
+
allowed_headers:
|
98
|
+
patterns:
|
99
|
+
- { exact: "Job-Token", ignore_case: true }
|
100
|
+
- { exact: "Project-Id", ignore_case: true }
|
101
|
+
failure_mode_allow: false
|
102
|
+
- name: "envoy.filters.http.router"
|
103
|
+
|
104
|
+
clusters:
|
105
|
+
- name: "recommender-bot"
|
106
|
+
connect_timeout: "1.25s"
|
107
|
+
type: "STATIC"
|
108
|
+
lb_policy: "ROUND_ROBIN"
|
109
|
+
dns_lookup_family: V4_ONLY
|
110
|
+
typed_extension_protocol_options:
|
111
|
+
envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
|
112
|
+
"@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
|
113
|
+
explicit_http_config:
|
114
|
+
http2_protocol_options: { }
|
115
|
+
load_assignment:
|
116
|
+
cluster_name: "recommender-bot"
|
117
|
+
endpoints:
|
118
|
+
- lb_endpoints:
|
119
|
+
- endpoint:
|
120
|
+
address:
|
121
|
+
socket_address:
|
122
|
+
address: "127.0.0.1"
|
123
|
+
port_value: 8080
|
124
|
+
- name: "ext-auth"
|
125
|
+
connect_timeout: "1.25s"
|
126
|
+
type: "LOGICAL_DNS"
|
127
|
+
lb_policy: "ROUND_ROBIN"
|
128
|
+
load_assignment:
|
129
|
+
cluster_name: "ext-auth"
|
130
|
+
endpoints:
|
131
|
+
- lb_endpoints:
|
132
|
+
- endpoint:
|
133
|
+
address:
|
134
|
+
socket_address:
|
135
|
+
address: "authenticator-service"
|
136
|
+
port_value: 8080
|
137
|
+
|
138
|
+
---
|
139
|
+
apiVersion: apps/v1
|
140
|
+
kind: Deployment
|
141
|
+
metadata:
|
142
|
+
name: recommender-bot-deployment
|
143
|
+
labels:
|
144
|
+
app: recommender-bot
|
145
|
+
spec:
|
146
|
+
replicas: 1
|
147
|
+
selector:
|
148
|
+
matchLabels:
|
149
|
+
app: recommender-bot
|
150
|
+
template:
|
151
|
+
metadata:
|
152
|
+
labels:
|
153
|
+
app: recommender-bot
|
154
|
+
spec:
|
155
|
+
initContainers:
|
156
|
+
- name: protosets
|
157
|
+
image: recommender-bot-service:dev
|
158
|
+
imagePullPolicy: Never
|
159
|
+
command: [sh, -c]
|
160
|
+
args: [cp /app/recommender-bot.protoset.pb /data/protos]
|
161
|
+
volumeMounts:
|
162
|
+
- name: grpc-protosets
|
163
|
+
mountPath: /data/protos
|
164
|
+
containers:
|
165
|
+
- name: recommender-bot-envoy-sidecar
|
166
|
+
image: envoyproxy/envoy-alpine:v1.19-latest
|
167
|
+
imagePullPolicy: IfNotPresent
|
168
|
+
ports:
|
169
|
+
- containerPort: 8282
|
170
|
+
- containerPort: 8484
|
171
|
+
volumeMounts:
|
172
|
+
- name: recommender-bot-envoy-sidecar-config
|
173
|
+
mountPath: /etc/envoy
|
174
|
+
- name: grpc-protosets
|
175
|
+
mountPath: /data/protos
|
176
|
+
readOnly: true
|
177
|
+
- name: recommender-bot
|
178
|
+
image: recommender-bot-service:dev
|
179
|
+
imagePullPolicy: Never
|
180
|
+
ports:
|
181
|
+
- containerPort: 8080
|
182
|
+
env:
|
183
|
+
- name: RECOMMENDER_BOT_SERVICE_PORT
|
184
|
+
value: "8080"
|
185
|
+
- name: RECOMMENDER_BOT_GITLAB_TOKEN
|
186
|
+
valueFrom:
|
187
|
+
secretKeyRef:
|
188
|
+
name: recommender-bot-gitlab-token
|
189
|
+
key: token
|
190
|
+
- name: RECOMMENDER_BOT_GRPC_SERVICE_URL
|
191
|
+
value: recommender-service:8080
|
192
|
+
- name: RECOMMENDER_BOT_PG_CONN_STRING
|
193
|
+
valueFrom:
|
194
|
+
secretKeyRef:
|
195
|
+
name: recommender-bot-pg-conn-string
|
196
|
+
key: pg-conn
|
197
|
+
- name: PUBSUB_EMULATOR_HOST
|
198
|
+
value: pubsub:8432
|
199
|
+
- name: GOOGLE_APPLICATION_CREDENTIALS
|
200
|
+
value: /data/gcp/gcp_credentials.json
|
201
|
+
- name: RECOMMENDER_BOT_PUBSUB_PROJECT_ID
|
202
|
+
value: project-test
|
203
|
+
- name: RECOMMENDER_BOT_PUBSUB_TOPIC_RECOMMENDATIONS
|
204
|
+
value: gitlab.merge-request-recommendations-test.1
|
205
|
+
volumeMounts:
|
206
|
+
- name: gcp-secrets
|
207
|
+
mountPath: /data/gcp
|
208
|
+
readOnly: true
|
209
|
+
volumes:
|
210
|
+
- name: grpc-protosets
|
211
|
+
emptyDir: {}
|
212
|
+
- name: recommender-bot-envoy-sidecar-config
|
213
|
+
configMap:
|
214
|
+
name: recommender-bot-envoy-sidecar-config
|
215
|
+
- name: gcp-secrets
|
216
|
+
secret:
|
217
|
+
secretName: gcp-credentials
|
218
|
+
items:
|
219
|
+
- key: gcp_json
|
220
|
+
path: gcp_credentials.json
|
221
|
+
|
222
|
+
---
|
223
|
+
apiVersion: v1
|
224
|
+
kind: Service
|
225
|
+
metadata:
|
226
|
+
name: recommender-bot-service
|
227
|
+
labels:
|
228
|
+
app: recommender-bot
|
229
|
+
spec:
|
230
|
+
type: NodePort
|
231
|
+
ports:
|
232
|
+
- name: http-plain
|
233
|
+
port: 8282
|
234
|
+
targetPort: 8282
|
235
|
+
- name: http-auth
|
236
|
+
port: 8484
|
237
|
+
targetPort: 8484
|
238
|
+
- name: grpc
|
239
|
+
port: 8080
|
240
|
+
targetPort: 8080
|
241
|
+
selector:
|
242
|
+
app: recommender-bot
|
@@ -0,0 +1,52 @@
|
|
1
|
+
---
|
2
|
+
apiVersion: apps/v1
|
3
|
+
kind: Deployment
|
4
|
+
metadata:
|
5
|
+
name: recommender-deployment
|
6
|
+
labels:
|
7
|
+
app: recommender
|
8
|
+
spec:
|
9
|
+
replicas: 1
|
10
|
+
selector:
|
11
|
+
matchLabels:
|
12
|
+
app: recommender
|
13
|
+
template:
|
14
|
+
metadata:
|
15
|
+
labels:
|
16
|
+
app: recommender
|
17
|
+
spec:
|
18
|
+
containers:
|
19
|
+
- name: recommender
|
20
|
+
image: recommender-service:dev
|
21
|
+
imagePullPolicy: Never
|
22
|
+
ports:
|
23
|
+
- containerPort: 8080
|
24
|
+
volumeMounts:
|
25
|
+
- name: models-mount
|
26
|
+
mountPath: /app/data/models
|
27
|
+
env:
|
28
|
+
- name: RECOMMENDER_SERVICE_PORT
|
29
|
+
value: "8080"
|
30
|
+
- name: RECOMMENDER_MODELS_STORAGE
|
31
|
+
value: local
|
32
|
+
- name: GRPC_VERBOSITY
|
33
|
+
value: debug
|
34
|
+
volumes:
|
35
|
+
- name: models-mount
|
36
|
+
hostPath:
|
37
|
+
path: /tmp/gitlab-qa/suggested_reviewer/data/models
|
38
|
+
|
39
|
+
---
|
40
|
+
apiVersion: v1
|
41
|
+
kind: Service
|
42
|
+
metadata:
|
43
|
+
name: recommender-service
|
44
|
+
labels:
|
45
|
+
app: recommender
|
46
|
+
spec:
|
47
|
+
type: ClusterIP
|
48
|
+
ports:
|
49
|
+
- port: 8080
|
50
|
+
targetPort: 8080
|
51
|
+
selector:
|
52
|
+
app: recommender
|
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: 8.
|
4
|
+
version: 8.5.0
|
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-09-
|
11
|
+
date: 2022-09-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -327,10 +327,10 @@ files:
|
|
327
327
|
- lib/gitlab/qa/component/specs.rb
|
328
328
|
- lib/gitlab/qa/component/staging.rb
|
329
329
|
- lib/gitlab/qa/component/staging_ref.rb
|
330
|
+
- lib/gitlab/qa/component/suggested_reviewer.rb
|
330
331
|
- lib/gitlab/qa/component/telegraf.rb
|
331
332
|
- lib/gitlab/qa/docker/command.rb
|
332
333
|
- lib/gitlab/qa/docker/engine.rb
|
333
|
-
- lib/gitlab/qa/docker/shellout.rb
|
334
334
|
- lib/gitlab/qa/docker/volumes.rb
|
335
335
|
- lib/gitlab/qa/release.rb
|
336
336
|
- lib/gitlab/qa/report/base_test_results.rb
|
@@ -408,23 +408,33 @@ files:
|
|
408
408
|
- lib/gitlab/qa/scenario/test/integration/service_ping_disabled.rb
|
409
409
|
- lib/gitlab/qa/scenario/test/integration/smtp.rb
|
410
410
|
- lib/gitlab/qa/scenario/test/integration/ssh_tunnel.rb
|
411
|
+
- lib/gitlab/qa/scenario/test/integration/suggested_reviewer.rb
|
411
412
|
- lib/gitlab/qa/scenario/test/omnibus/image.rb
|
412
413
|
- lib/gitlab/qa/scenario/test/omnibus/update.rb
|
413
414
|
- lib/gitlab/qa/scenario/test/omnibus/update_from_previous.rb
|
414
415
|
- lib/gitlab/qa/scenario/test/omnibus/upgrade.rb
|
415
416
|
- lib/gitlab/qa/scenario/test/sanity/version.rb
|
417
|
+
- lib/gitlab/qa/service/cluster_provider/base.rb
|
418
|
+
- lib/gitlab/qa/service/cluster_provider/k3d.rb
|
419
|
+
- lib/gitlab/qa/service/kubernetes_cluster.rb
|
416
420
|
- lib/gitlab/qa/slack/post_to_slack.rb
|
417
|
-
- lib/gitlab/qa/support/dev_ee_qa_image.rb
|
418
421
|
- lib/gitlab/qa/support/get_request.rb
|
419
422
|
- lib/gitlab/qa/support/gitlab_upgrade_path.rb
|
420
423
|
- lib/gitlab/qa/support/gitlab_version_info.rb
|
421
424
|
- lib/gitlab/qa/support/http_request.rb
|
422
425
|
- lib/gitlab/qa/support/invalid_response_error.rb
|
426
|
+
- lib/gitlab/qa/support/shell_command.rb
|
427
|
+
- lib/gitlab/qa/support/shellout.rb
|
423
428
|
- lib/gitlab/qa/test_logger.rb
|
424
429
|
- lib/gitlab/qa/version.rb
|
425
430
|
- scripts/generate-qa-jobs.rb
|
426
431
|
- support/data/admin_access_token_seed.rb
|
427
432
|
- support/data/license_usage_seed.rb
|
433
|
+
- support/manifests/suggested_reviewer/authenticator.yaml
|
434
|
+
- support/manifests/suggested_reviewer/postgres.yaml
|
435
|
+
- support/manifests/suggested_reviewer/pubsub.yaml
|
436
|
+
- support/manifests/suggested_reviewer/recommender-bot.yaml
|
437
|
+
- support/manifests/suggested_reviewer/recommender.yaml
|
428
438
|
- tls_certificates/authority/ca.crt
|
429
439
|
- tls_certificates/authority/ca.key
|
430
440
|
- tls_certificates/authority/ca.pem
|