gitlab-qa 2.7.3 → 2.8.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.yml +24 -0
- data/bin/notify_upstream_commit +50 -0
- data/fixtures/ldap/1_add_nodes.ldif +7 -0
- data/fixtures/ldap/2_add_users.ldif +237 -0
- data/fixtures/ldap/3_add_groups.ldif +39 -0
- data/lib/gitlab/qa/component/ldap.rb +3 -3
- data/lib/gitlab/qa/scenario/test/integration/ldap_no_tls.rb +2 -0
- data/lib/gitlab/qa/scenario/test/integration/ldap_tls.rb +2 -0
- data/lib/gitlab/qa/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 10cf0ac3fcf95c6576b31b1c1fb0947b6a2f9eb5bb1bfc78281e4375001ecdc4
|
4
|
+
data.tar.gz: 2ed071bfb04c06a6004c1669e981aeb3f3673b1512fde01bf31dadb94a794d0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 597b819e4181911f326165fe5e6e26ded947992e55dbc994cd4568172ba4f9102011fdb7b238f74c4a1a92ee4189658a8d32ccfa98bb9ea944a9cddbc54a8757
|
7
|
+
data.tar.gz: a05d29929286348904d2c12c2d247bf19c2654cb0598512e4ce7b7ba8eb145d2a939fd1a055b63af79060f58f1c0b5ba901a202d65b7d650c8ea24baf59236c3
|
data/.gitlab-ci.yml
CHANGED
@@ -4,12 +4,14 @@ services:
|
|
4
4
|
stages:
|
5
5
|
- check
|
6
6
|
- test
|
7
|
+
- notify
|
7
8
|
|
8
9
|
variables:
|
9
10
|
TEST_IMAGE: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa
|
10
11
|
DOCKER_DRIVER: overlay
|
11
12
|
DOCKER_HOST: tcp://docker:2375
|
12
13
|
QA_ARTIFACTS_DIR: $CI_PROJECT_DIR
|
14
|
+
QA_CAN_TEST_GIT_PROTOCOL_V2: 'false'
|
13
15
|
|
14
16
|
before_script:
|
15
17
|
- bundle install
|
@@ -248,3 +250,25 @@ ee:object_storage:
|
|
248
250
|
<<: *test
|
249
251
|
<<: *high-capacity
|
250
252
|
<<: *ee-qa
|
253
|
+
|
254
|
+
.notify_upstream_commit: ¬ify_upstream_commit
|
255
|
+
stage: notify
|
256
|
+
image: $TEST_IMAGE
|
257
|
+
before_script:
|
258
|
+
- gem install gitlab --no-document
|
259
|
+
only:
|
260
|
+
variables:
|
261
|
+
- $TOP_UPSTREAM_SOURCE_PROJECT
|
262
|
+
- $TOP_UPSTREAM_SOURCE_SHA
|
263
|
+
|
264
|
+
notify_upstream_commit:success:
|
265
|
+
<<: *notify_upstream_commit
|
266
|
+
script:
|
267
|
+
- bin/notify_upstream_commit success
|
268
|
+
when: on_success
|
269
|
+
|
270
|
+
notify_upstream_commit:failure:
|
271
|
+
<<: *notify_upstream_commit
|
272
|
+
script:
|
273
|
+
- bin/notify_upstream_commit failure
|
274
|
+
when: on_failure
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'gitlab'
|
5
|
+
|
6
|
+
# Configure credentials to be used with gitlab gem
|
7
|
+
Gitlab.configure do |config|
|
8
|
+
config.endpoint = 'https://gitlab.com/api/v4'
|
9
|
+
config.private_token = ENV['GITLAB_BOT_MULTI_PROJECT_PIPELINE_POLLING_TOKEN']
|
10
|
+
end
|
11
|
+
|
12
|
+
class CommitComment
|
13
|
+
def self.post!(status)
|
14
|
+
unless ENV['TOP_UPSTREAM_SOURCE_SHA']
|
15
|
+
puts "The 'TOP_UPSTREAM_SOURCE_SHA' environment variable is missing, cannot post a comment on a missing upstream commit."
|
16
|
+
return
|
17
|
+
end
|
18
|
+
|
19
|
+
top_upstream_source_sha = ENV['TOP_UPSTREAM_SOURCE_SHA']
|
20
|
+
|
21
|
+
unless ENV['TOP_UPSTREAM_SOURCE_PROJECT']
|
22
|
+
puts "The 'TOP_UPSTREAM_SOURCE_PROJECT' environment variable is missing, cannot post a comment on the upstream #{top_upstream_source_sha} commit."
|
23
|
+
return
|
24
|
+
end
|
25
|
+
|
26
|
+
top_upstream_source_project = ENV['TOP_UPSTREAM_SOURCE_PROJECT']
|
27
|
+
|
28
|
+
status_with_icon =
|
29
|
+
case status
|
30
|
+
when :success
|
31
|
+
"passed. :white_check_mark:"
|
32
|
+
when :failure
|
33
|
+
"failed! :boom:"
|
34
|
+
end
|
35
|
+
|
36
|
+
Gitlab.create_commit_comment(
|
37
|
+
top_upstream_source_project,
|
38
|
+
top_upstream_source_sha,
|
39
|
+
"The [`gitlab-qa` downstream pipeline](#{ENV['CI_PIPELINE_URL']}) #{status_with_icon}")
|
40
|
+
rescue Gitlab::Error::Error => error
|
41
|
+
puts "Ignoring the following error: #{error}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
status = ARGV[0].to_s.strip
|
46
|
+
if status != ''
|
47
|
+
CommitComment.post!(status.to_sym)
|
48
|
+
else
|
49
|
+
puts "Please provide a status!"
|
50
|
+
end
|
@@ -0,0 +1,237 @@
|
|
1
|
+
|
2
|
+
# 1. Human Resources
|
3
|
+
|
4
|
+
dn: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
|
5
|
+
cn: HR User 1
|
6
|
+
givenName: HR
|
7
|
+
sn: User1
|
8
|
+
uid: hruser1
|
9
|
+
uidNumber: 5000
|
10
|
+
gidNumber: 10000
|
11
|
+
homeDirectory: /home/hruser1
|
12
|
+
mail: hruser1@example.org
|
13
|
+
objectClass: top
|
14
|
+
objectClass: posixAccount
|
15
|
+
objectClass: shadowAccount
|
16
|
+
objectClass: inetOrgPerson
|
17
|
+
objectClass: organizationalPerson
|
18
|
+
objectClass: person
|
19
|
+
loginShell: /bin/bash
|
20
|
+
# hashed value for 'password'
|
21
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
22
|
+
|
23
|
+
dn: uid=hruser2,ou=People,ou=Global Groups,dc=example,dc=org
|
24
|
+
cn: HR User 2
|
25
|
+
givenName: HR
|
26
|
+
sn: User2
|
27
|
+
uid: hruser2
|
28
|
+
uidNumber: 5001
|
29
|
+
gidNumber: 10001
|
30
|
+
homeDirectory: /home/hruser2
|
31
|
+
mail: hruser2@example.org
|
32
|
+
objectClass: top
|
33
|
+
objectClass: posixAccount
|
34
|
+
objectClass: shadowAccount
|
35
|
+
objectClass: inetOrgPerson
|
36
|
+
objectClass: organizationalPerson
|
37
|
+
objectClass: person
|
38
|
+
loginShell: /bin/bash
|
39
|
+
# hashed value for 'password'
|
40
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
41
|
+
|
42
|
+
dn: uid=hruser3,ou=People,ou=Global Groups,dc=example,dc=org
|
43
|
+
cn: HR User 3
|
44
|
+
givenName: HR
|
45
|
+
sn: User3
|
46
|
+
uid: hruser3
|
47
|
+
uidNumber: 5002
|
48
|
+
gidNumber: 10002
|
49
|
+
homeDirectory: /home/hruser3
|
50
|
+
mail: hruser3@example.org
|
51
|
+
objectClass: top
|
52
|
+
objectClass: posixAccount
|
53
|
+
objectClass: shadowAccount
|
54
|
+
objectClass: inetOrgPerson
|
55
|
+
objectClass: organizationalPerson
|
56
|
+
objectClass: person
|
57
|
+
loginShell: /bin/bash
|
58
|
+
# hashed value for 'password'
|
59
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
60
|
+
|
61
|
+
# 2. Engineering
|
62
|
+
|
63
|
+
dn: uid=enguser1,ou=People,ou=Global Groups,dc=example,dc=org
|
64
|
+
cn: ENG User 1
|
65
|
+
givenName: ENG
|
66
|
+
sn: User1
|
67
|
+
uid: enguser1
|
68
|
+
uidNumber: 5003
|
69
|
+
gidNumber: 10003
|
70
|
+
homeDirectory: /home/enguser1
|
71
|
+
mail: enguser1@example.org
|
72
|
+
objectClass: top
|
73
|
+
objectClass: posixAccount
|
74
|
+
objectClass: shadowAccount
|
75
|
+
objectClass: inetOrgPerson
|
76
|
+
objectClass: organizationalPerson
|
77
|
+
objectClass: person
|
78
|
+
loginShell: /bin/bash
|
79
|
+
# hashed value for 'password'
|
80
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
81
|
+
|
82
|
+
dn: uid=enguser2,ou=People,ou=Global Groups,dc=example,dc=org
|
83
|
+
cn: ENG User 2
|
84
|
+
givenName: ENG
|
85
|
+
sn: User2
|
86
|
+
uid: enguser2
|
87
|
+
uidNumber: 5004
|
88
|
+
gidNumber: 10004
|
89
|
+
homeDirectory: /home/enguser2
|
90
|
+
mail: enguser2@example.org
|
91
|
+
objectClass: top
|
92
|
+
objectClass: posixAccount
|
93
|
+
objectClass: shadowAccount
|
94
|
+
objectClass: inetOrgPerson
|
95
|
+
objectClass: organizationalPerson
|
96
|
+
objectClass: person
|
97
|
+
loginShell: /bin/bash
|
98
|
+
# hashed value for 'password'
|
99
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
100
|
+
|
101
|
+
dn: uid=enguser3,ou=People,ou=Global Groups,dc=example,dc=org
|
102
|
+
cn: ENG User 3
|
103
|
+
givenName: ENG
|
104
|
+
sn: User3
|
105
|
+
uid: enguser3
|
106
|
+
uidNumber: 5005
|
107
|
+
gidNumber: 10005
|
108
|
+
homeDirectory: /home/enguser3
|
109
|
+
mail: enguser3@example.org
|
110
|
+
objectClass: top
|
111
|
+
objectClass: posixAccount
|
112
|
+
objectClass: shadowAccount
|
113
|
+
objectClass: inetOrgPerson
|
114
|
+
objectClass: organizationalPerson
|
115
|
+
objectClass: person
|
116
|
+
loginShell: /bin/bash
|
117
|
+
# hashed value for 'password'
|
118
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
119
|
+
|
120
|
+
|
121
|
+
# 3. Security
|
122
|
+
|
123
|
+
dn: uid=securityuser1,ou=People,ou=Global Groups,dc=example,dc=org
|
124
|
+
cn: Security User 1
|
125
|
+
givenName: Security
|
126
|
+
sn: User1
|
127
|
+
uid: securityuser1
|
128
|
+
uidNumber: 5006
|
129
|
+
gidNumber: 10006
|
130
|
+
homeDirectory: /home/securityuser1
|
131
|
+
mail: securityuser1@example.org
|
132
|
+
objectClass: top
|
133
|
+
objectClass: posixAccount
|
134
|
+
objectClass: shadowAccount
|
135
|
+
objectClass: inetOrgPerson
|
136
|
+
objectClass: organizationalPerson
|
137
|
+
objectClass: person
|
138
|
+
loginShell: /bin/bash
|
139
|
+
# hashed value for 'password'
|
140
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
141
|
+
|
142
|
+
dn: uid=securityuser2,ou=People,ou=Global Groups,dc=example,dc=org
|
143
|
+
cn: Security User 2
|
144
|
+
givenName: Security
|
145
|
+
sn: User2
|
146
|
+
uid: securityuser2
|
147
|
+
uidNumber: 5007
|
148
|
+
gidNumber: 10007
|
149
|
+
homeDirectory: /home/securityuser2
|
150
|
+
mail: securityuser1@example.org
|
151
|
+
objectClass: top
|
152
|
+
objectClass: posixAccount
|
153
|
+
objectClass: shadowAccount
|
154
|
+
objectClass: inetOrgPerson
|
155
|
+
objectClass: organizationalPerson
|
156
|
+
objectClass: person
|
157
|
+
loginShell: /bin/bash
|
158
|
+
# hashed value for 'password'
|
159
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
160
|
+
|
161
|
+
dn: uid=securityuser3,ou=People,ou=Global Groups,dc=example,dc=org
|
162
|
+
cn: Security User 3
|
163
|
+
givenName: Security
|
164
|
+
sn: User3
|
165
|
+
uid: securityuser3
|
166
|
+
uidNumber: 5008
|
167
|
+
gidNumber: 10008
|
168
|
+
homeDirectory: /home/securityuser3
|
169
|
+
mail: securityuser3@example.org
|
170
|
+
objectClass: top
|
171
|
+
objectClass: posixAccount
|
172
|
+
objectClass: shadowAccount
|
173
|
+
objectClass: inetOrgPerson
|
174
|
+
objectClass: organizationalPerson
|
175
|
+
objectClass: person
|
176
|
+
loginShell: /bin/bash
|
177
|
+
# hashed value for 'password'
|
178
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
179
|
+
|
180
|
+
# 3. Admin
|
181
|
+
|
182
|
+
dn: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
|
183
|
+
cn: Admin User 1
|
184
|
+
givenName: Admin
|
185
|
+
sn: User1
|
186
|
+
uid: adminuser1
|
187
|
+
uidNumber: 5009
|
188
|
+
gidNumber: 10009
|
189
|
+
homeDirectory: /home/adminuser1
|
190
|
+
mail: adminuser1@example.org
|
191
|
+
objectClass: top
|
192
|
+
objectClass: posixAccount
|
193
|
+
objectClass: shadowAccount
|
194
|
+
objectClass: inetOrgPerson
|
195
|
+
objectClass: organizationalPerson
|
196
|
+
objectClass: person
|
197
|
+
loginShell: /bin/bash
|
198
|
+
# hashed value for 'password'
|
199
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
200
|
+
|
201
|
+
dn: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
|
202
|
+
cn: Admin User 2
|
203
|
+
givenName: Admin
|
204
|
+
sn: User1
|
205
|
+
uid: adminuser2
|
206
|
+
uidNumber: 5010
|
207
|
+
gidNumber: 10010
|
208
|
+
homeDirectory: /home/adminuser2
|
209
|
+
mail: adminuser2@example.org
|
210
|
+
objectClass: top
|
211
|
+
objectClass: posixAccount
|
212
|
+
objectClass: shadowAccount
|
213
|
+
objectClass: inetOrgPerson
|
214
|
+
objectClass: organizationalPerson
|
215
|
+
objectClass: person
|
216
|
+
loginShell: /bin/bash
|
217
|
+
# hashed value for 'password'
|
218
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
219
|
+
|
220
|
+
dn: uid=adminuser3,ou=People,ou=Global Groups,dc=example,dc=org
|
221
|
+
cn: Admin User 3
|
222
|
+
givenName: Admin
|
223
|
+
sn: User1
|
224
|
+
uid: adminuser3
|
225
|
+
uidNumber: 5011
|
226
|
+
gidNumber: 10011
|
227
|
+
homeDirectory: /home/adminuser3
|
228
|
+
mail: adminuser3@example.org
|
229
|
+
objectClass: top
|
230
|
+
objectClass: posixAccount
|
231
|
+
objectClass: shadowAccount
|
232
|
+
objectClass: inetOrgPerson
|
233
|
+
objectClass: organizationalPerson
|
234
|
+
objectClass: person
|
235
|
+
loginShell: /bin/bash
|
236
|
+
# hashed value for 'password'
|
237
|
+
userPassword: {SSHA}ICMhr6Jxt5bk2awD7HL7GxRTM3BZ1pFI
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# 1. Human Resources
|
2
|
+
|
3
|
+
dn: cn=Human Resources,ou=Global Groups,dc=example,dc=org
|
4
|
+
objectClass: groupofnames
|
5
|
+
cn: Human Resources
|
6
|
+
description: Human Resources
|
7
|
+
member: uid=hruser1,ou=People,ou=Global Groups,dc=example,dc=org
|
8
|
+
member: uid=hruser2,ou=People,ou=Global Groups,dc=example,dc=org
|
9
|
+
member: uid=hruser3,ou=People,ou=Global Groups,dc=example,dc=org
|
10
|
+
|
11
|
+
# 2. Engineering
|
12
|
+
|
13
|
+
dn: cn=Engineering,ou=Global Groups,dc=example,dc=org
|
14
|
+
objectClass: groupofnames
|
15
|
+
cn: Engineering
|
16
|
+
description: Engineering
|
17
|
+
member: uid=enguser1,ou=People,ou=Global Groups,dc=example,dc=org
|
18
|
+
member: uid=enguser2,ou=People,ou=Global Groups,dc=example,dc=org
|
19
|
+
member: uid=enguser3,ou=People,ou=Global Groups,dc=example,dc=org
|
20
|
+
|
21
|
+
# 3. Security
|
22
|
+
|
23
|
+
dn: cn=Security,ou=Global Groups,dc=example,dc=org
|
24
|
+
objectClass: groupofnames
|
25
|
+
cn: Security
|
26
|
+
description: Security
|
27
|
+
member: uid=securityuser1,ou=People,ou=Global Groups,dc=example,dc=org
|
28
|
+
member: uid=securityuser2,ou=People,ou=Global Groups,dc=example,dc=org
|
29
|
+
member: uid=securityuser3,ou=People,ou=Global Groups,dc=example,dc=org
|
30
|
+
|
31
|
+
# 4. Admin
|
32
|
+
|
33
|
+
dn: cn=AdminGroup,ou=Global Groups,dc=example,dc=org
|
34
|
+
objectClass: groupofnames
|
35
|
+
cn: AdminGroup
|
36
|
+
description: Human Resources
|
37
|
+
member: uid=adminuser1,ou=People,ou=Global Groups,dc=example,dc=org
|
38
|
+
member: uid=adminuser2,ou=People,ou=Global Groups,dc=example,dc=org
|
39
|
+
member: uid=adminuser3,ou=People,ou=Global Groups,dc=example,dc=org
|
@@ -30,8 +30,8 @@ module Gitlab
|
|
30
30
|
BASE_DN = 'dc=example,dc=org'.freeze
|
31
31
|
BIND_DN = 'cn=admin,dc=example,dc=org'.freeze
|
32
32
|
BOOTSTRAP_LDIF = '/container/service/slapd/assets/config/bootstrap/ldif/custom'.freeze
|
33
|
-
GROUP_BASE = 'ou=
|
34
|
-
ADMIN_GROUP = '
|
33
|
+
GROUP_BASE = 'ou=Global Groups,dc=example,dc=org'.freeze
|
34
|
+
ADMIN_GROUP = 'AdminGroup'.freeze
|
35
35
|
FIXTURE_PATH = File.expand_path('../../../../fixtures/ldap'.freeze, __dir__)
|
36
36
|
|
37
37
|
attr_reader :docker
|
@@ -149,7 +149,7 @@ module Gitlab
|
|
149
149
|
uid: 'uid'
|
150
150
|
bind_dn: #{BIND_DN}
|
151
151
|
password: #{ADMIN_PASSWORD}
|
152
|
-
|
152
|
+
encryption: #{tls? ? 'simple_tls' : 'plain'}
|
153
153
|
verify_certificates: false
|
154
154
|
base: #{BASE_DN}
|
155
155
|
user_filter: ''
|
@@ -16,6 +16,8 @@ module Gitlab
|
|
16
16
|
gitlab.omnibus_config = <<~OMNIBUS
|
17
17
|
gitlab_rails['ldap_enabled'] = true;
|
18
18
|
gitlab_rails['ldap_servers'] = #{ldap.to_config};
|
19
|
+
gitlab_rails['ldap_sync_worker_cron'] = '* * * * *';
|
20
|
+
gitlab_rails['ldap_group_sync_worker_cron'] = '* * * * *';
|
19
21
|
OMNIBUS
|
20
22
|
end
|
21
23
|
end
|
@@ -19,6 +19,8 @@ module Gitlab
|
|
19
19
|
gitlab_rails['ldap_servers'] = #{ldap.to_config};
|
20
20
|
letsencrypt['enable'] = false;
|
21
21
|
external_url '#{gitlab.address}';
|
22
|
+
gitlab_rails['ldap_sync_worker_cron'] = '* * * * *';
|
23
|
+
gitlab_rails['ldap_group_sync_worker_cron'] = '* * * * *';
|
22
24
|
OMNIBUS
|
23
25
|
end
|
24
26
|
end
|
data/lib/gitlab/qa/version.rb
CHANGED
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: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grzegorz Bizon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-11-
|
11
|
+
date: 2018-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: climate_control
|
@@ -130,6 +130,7 @@ files:
|
|
130
130
|
- Rakefile
|
131
131
|
- bin/console
|
132
132
|
- bin/expect_exit_code_and_text
|
133
|
+
- bin/notify_upstream_commit
|
133
134
|
- bin/qa
|
134
135
|
- bin/setup
|
135
136
|
- docs/README.md
|
@@ -140,6 +141,9 @@ files:
|
|
140
141
|
- docs/waits.md
|
141
142
|
- docs/what_tests_can_be_run.md
|
142
143
|
- exe/gitlab-qa
|
144
|
+
- fixtures/ldap/1_add_nodes.ldif
|
145
|
+
- fixtures/ldap/2_add_users.ldif
|
146
|
+
- fixtures/ldap/3_add_groups.ldif
|
143
147
|
- fixtures/ldap/tanuki.ldif
|
144
148
|
- gitlab-qa.gemspec
|
145
149
|
- lib/gitlab/qa.rb
|