gitlab-qa 0.1.0 → 0.2.0

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
  SHA1:
3
- metadata.gz: b0ad531bf801a69e5e18a9df200d92235791d228
4
- data.tar.gz: da43c04b1a583bede10237208f3c44df8000413a
3
+ metadata.gz: 135c315ae52f0c26c6396ae05622c69176605014
4
+ data.tar.gz: fe7a1a622a1544afb8ab978906d001a25ce2eb6e
5
5
  SHA512:
6
- metadata.gz: 55271d4161762055138ace63cef2aa27d481e56017253516d1c3d2719c540d715ff32541268bbd8d6ac80ce5aca0477c2be1c496035ef909aad28c4cf05acf08
7
- data.tar.gz: 494d2e9284a7bd9a2053482bd055ede19579be96325fa83ca011977019ff328458f55541ddb2895163de0ae74af83633144eede41c5eb80905236626e3b4748d
6
+ metadata.gz: 4e7901ebf2d0cf186ac438e78b722fd2019316df5f632c5120ab4b8fe8279b34583760ca52ee6b47b6e4f41e82e41507f6422f3153562a2f89efa387ec56f06b
7
+ data.tar.gz: 7064f957c43c827e1562380c7d002179948704e6e32e2d489f5fa213f7f330070201a720753513340ad9a759569823fe52d8e4c775a8702511bada9d7d3c28c7
data/.gitlab-ci.yml CHANGED
@@ -10,6 +10,7 @@ variables:
10
10
  TEST_IMAGE: registry.gitlab.com/gitlab-org/gitlab-build-images:gitlab-qa
11
11
  DOCKER_DRIVER: overlay
12
12
  DOCKER_HOST: tcp://docker:2375
13
+ QA_SCREENSHOTS_DIR: $CI_PROJECT_DIR/screenshots
13
14
 
14
15
  before_script:
15
16
  - bundle install
@@ -41,7 +42,7 @@ check:rspec:
41
42
  when: on_failure
42
43
  expire_in: 30d
43
44
  paths:
44
- - /tmp/gitlab-qa-screenshots/*.png
45
+ - screenshots/*.png
45
46
 
46
47
  ce:instance:
47
48
  script: bin/qa Test::Instance::Image CE
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,647 @@
1
+ ## Contributor license agreement
2
+
3
+ By submitting code as an individual you agree to the
4
+ [individual contributor license agreement](doc/legal/individual_contributor_license_agreement.md).
5
+ By submitting code as an entity you agree to the
6
+ [corporate contributor license agreement](doc/legal/corporate_contributor_license_agreement.md).
7
+
8
+ _This notice should stay as the first item in the CONTRIBUTING.MD file._
9
+
10
+ ---
11
+
12
+ <!-- START doctoc generated TOC please keep comment here to allow auto update -->
13
+ <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
14
+ **Table of Contents** *generated with [DocToc](https://github.com/thlorenz/doctoc)*
15
+
16
+ - [Contribute to GitLab](#contribute-to-gitlab)
17
+ - [Security vulnerability disclosure](#security-vulnerability-disclosure)
18
+ - [Closing policy for issues and merge requests](#closing-policy-for-issues-and-merge-requests)
19
+ - [Helping others](#helping-others)
20
+ - [I want to contribute!](#i-want-to-contribute)
21
+ - [Workflow labels](#workflow-labels)
22
+ - [Type labels (~"feature proposal", ~bug, ~customer, etc.)](#type-labels-feature-proposal-bug-customer-etc)
23
+ - [Subject labels (~wiki, ~"container registry", ~ldap, ~api, etc.)](#subject-labels-wiki-container-registry-ldap-api-etc)
24
+ - [Team labels (~CI, ~Discussion, ~Edge, ~Platform, etc.)](#team-labels-ci-discussion-edge-platform-etc)
25
+ - [Priority labels (~Deliverable and ~Stretch)](#priority-labels-deliverable-and-stretch)
26
+ - [Label for community contributors (~"Accepting Merge Requests")](#label-for-community-contributors-accepting-merge-requests)
27
+ - [Implement design & UI elements](#implement-design--ui-elements)
28
+ - [Issue tracker](#issue-tracker)
29
+ - [Issue triaging](#issue-triaging)
30
+ - [Feature proposals](#feature-proposals)
31
+ - [Issue tracker guidelines](#issue-tracker-guidelines)
32
+ - [Issue weight](#issue-weight)
33
+ - [Regression issues](#regression-issues)
34
+ - [Technical debt](#technical-debt)
35
+ - [Stewardship](#stewardship)
36
+ - [Merge requests](#merge-requests)
37
+ - [Merge request guidelines](#merge-request-guidelines)
38
+ - [Contribution acceptance criteria](#contribution-acceptance-criteria)
39
+ - [Definition of done](#definition-of-done)
40
+ - [Style guides](#style-guides)
41
+ - [Code of conduct](#code-of-conduct)
42
+
43
+ <!-- END doctoc generated TOC please keep comment here to allow auto update -->
44
+
45
+ ---
46
+
47
+ ## Contribute to GitLab
48
+
49
+ Thank you for your interest in contributing to GitLab. This guide details how
50
+ to contribute to GitLab in a way that is efficient for everyone.
51
+
52
+ GitLab comes into two flavors, GitLab Community Edition (CE) our free and open
53
+ source edition, and GitLab Enterprise Edition (EE) which is our commercial
54
+ edition. Throughout this guide you will see references to CE and EE for
55
+ abbreviation.
56
+
57
+ If you have read this guide and want to know how the GitLab [core team]
58
+ operates please see [the GitLab contributing process](PROCESS.md).
59
+
60
+ - [GitLab Inc engineers should refer to the engineering workflow document](https://about.gitlab.com/handbook/engineering/workflow/)
61
+
62
+ ## Security vulnerability disclosure
63
+
64
+ Please report suspected security vulnerabilities in private to
65
+ `support@gitlab.com`, also see the
66
+ [disclosure section on the GitLab.com website](https://about.gitlab.com/disclosure/).
67
+ Please do **NOT** create publicly viewable issues for suspected security
68
+ vulnerabilities.
69
+
70
+ ## Closing policy for issues and merge requests
71
+
72
+ GitLab is a popular open source project and the capacity to deal with issues
73
+ and merge requests is limited. Out of respect for our volunteers, issues and
74
+ merge requests not in line with the guidelines listed in this document may be
75
+ closed without notice.
76
+
77
+ Please treat our volunteers with courtesy and respect, it will go a long way
78
+ towards getting your issue resolved.
79
+
80
+ Issues and merge requests should be in English and contain appropriate language
81
+ for audiences of all ages.
82
+
83
+ If a contributor is no longer actively working on a submitted merge request
84
+ we can decide that the merge request will be finished by one of our
85
+ [Merge request coaches][team] or close the merge request. We make this decision
86
+ based on how important the change is for our product vision. If a Merge request
87
+ coach is going to finish the merge request we assign the
88
+ ~"coach will finish" label.
89
+
90
+ ## Helping others
91
+
92
+ Please help other GitLab users when you can. The channels people will reach out
93
+ on can be found on the [getting help page][getting-help].
94
+
95
+ Sign up for the mailing list, answer GitLab questions on StackOverflow or
96
+ respond in the IRC channel. You can also sign up on [CodeTriage][codetriage] to help with
97
+ the remaining issues on the GitHub issue tracker.
98
+
99
+ ## I want to contribute!
100
+
101
+ If you want to contribute to GitLab, but are not sure where to start,
102
+ look for [issues with the label `Accepting Merge Requests` and weight < 5][accepting-mrs-weight].
103
+ These issues will be of reasonable size and challenge, for anyone to start
104
+ contributing to GitLab.
105
+
106
+ ## Workflow labels
107
+
108
+ To allow for asynchronous issue handling, we use [milestones][milestones-page]
109
+ and [labels][labels-page]. Leads and product managers handle most of the
110
+ scheduling into milestones. Labelling is a task for everyone.
111
+
112
+ Most issues will have labels for at least one of the following:
113
+
114
+ - Type: ~"feature proposal", ~bug, ~customer, etc.
115
+ - Subject: ~wiki, ~"container registry", ~ldap, ~api, etc.
116
+ - Team: ~CI, ~Discussion, ~Edge, ~Frontend, ~Platform, etc.
117
+ - Priority: ~Deliverable, ~Stretch
118
+
119
+ All labels, their meaning and priority are defined on the
120
+ [labels page][labels-page].
121
+
122
+ If you come across an issue that has none of these, and you're allowed to set
123
+ labels, you can _always_ add the team and type, and often also the subject.
124
+
125
+ [milestones-page]: https://gitlab.com/gitlab-org/gitlab-ce/milestones
126
+ [labels-page]: https://gitlab.com/gitlab-org/gitlab-ce/labels
127
+
128
+ ### Type labels (~"feature proposal", ~bug, ~customer, etc.)
129
+
130
+ Type labels are very important. They define what kind of issue this is. Every
131
+ issue should have one or more.
132
+
133
+ Examples of type labels are ~"feature proposal", ~bug, ~customer, ~security,
134
+ and ~"direction".
135
+
136
+ A number of type labels have a priority assigned to them, which automatically
137
+ makes them float to the top, depending on their importance.
138
+
139
+ Type labels are always lowercase, and can have any color, besides blue (which is
140
+ already reserved for subject labels).
141
+
142
+ The descriptions on the [labels page][labels-page] explain what falls under each type label.
143
+
144
+ ### Subject labels (~wiki, ~"container registry", ~ldap, ~api, etc.)
145
+
146
+ Subject labels are labels that define what area or feature of GitLab this issue
147
+ hits. They are not always necessary, but very convenient.
148
+
149
+ If you are an expert in a particular area, it makes it easier to find issues to
150
+ work on. You can also subscribe to those labels to receive an email each time an
151
+ issue is labelled with a subject label corresponding to your expertise.
152
+
153
+ Examples of subject labels are ~wiki, ~"container registry", ~ldap, ~api,
154
+ ~issues, ~"merge requests", ~labels, and ~"container registry".
155
+
156
+ Subject labels are always all-lowercase.
157
+
158
+ ### Team labels (~CI, ~Discussion, ~Edge, ~Platform, etc.)
159
+
160
+ Team labels specify what team is responsible for this issue.
161
+ Assigning a team label makes sure issues get the attention of the appropriate
162
+ people.
163
+
164
+ The current team labels are ~Build, ~CI, ~Discussion, ~Documentation, ~Edge,
165
+ ~Gitaly, ~Platform, ~Prometheus, ~Release, and ~"UX".
166
+
167
+ The descriptions on the [labels page][labels-page] explain what falls under the
168
+ responsibility of each team.
169
+
170
+ Within those team labels, we also have the ~backend and ~frontend labels to
171
+ indicate if an issue needs backend work, frontend work, or both.
172
+
173
+ Team labels are always capitalized so that they show up as the first label for
174
+ any issue.
175
+
176
+ ### Priority labels (~Deliverable and ~Stretch)
177
+
178
+ Priority labels help us clearly communicate expectations of the work for the
179
+ release. There are two levels of priority labels:
180
+
181
+ - ~Deliverable: Issues that are expected to be delivered in the current
182
+ milestone.
183
+ - ~Stretch: Issues that are a stretch goal for delivering in the current
184
+ milestone. If these issues are not done in the current release, they will
185
+ strongly be considered for the next release.
186
+
187
+ ### Label for community contributors (~"Accepting Merge Requests")
188
+
189
+ Issues that are beneficial to our users, 'nice to haves', that we currently do
190
+ not have the capacity for or want to give the priority to, are labeled as
191
+ ~"Accepting Merge Requests", so the community can make a contribution.
192
+
193
+ Community contributors can submit merge requests for any issue they want, but
194
+ the ~"Accepting Merge Requests" label has a special meaning. It points to
195
+ changes that:
196
+
197
+ 1. We already agreed on,
198
+ 1. Are well-defined,
199
+ 1. Are likely to get accepted by a maintainer.
200
+
201
+ We want to avoid a situation when a contributor picks an
202
+ ~"Accepting Merge Requests" issue and then their merge request gets closed,
203
+ because we realize that it does not fit our vision, or we want to solve it in a
204
+ different way.
205
+
206
+ We add the ~"Accepting Merge Requests" label to:
207
+
208
+ - Low priority ~bug issues (i.e. we do not add it to the bugs that we want to
209
+ solve in the ~"Next Patch Release")
210
+ - Small ~"feature proposal" that do not need ~UX / ~"Product work", or for which
211
+ the ~UX / ~"Product work" is already done
212
+ - Small ~"technical debt" issues
213
+
214
+ After adding the ~"Accepting Merge Requests" label, we try to estimate the
215
+ [weight](#issue-weight) of the issue. We use issue weight to let contributors
216
+ know how difficult the issue is. Additionally:
217
+
218
+ - We advertise [~"Accepting Merge Requests" issues with weight < 5][up-for-grabs]
219
+ as suitable for people that have never contributed to GitLab before on the
220
+ [Up For Grabs campaign](http://up-for-grabs.net)
221
+ - We encourage people that have never contributed to any open source project to
222
+ look for [~"Accepting Merge Requests" issues with a weight of 1][firt-timers]
223
+
224
+ [up-for-grabs]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name=Accepting+Merge+Requests&scope=all&sort=weight_asc&state=opened
225
+ [firt-timers]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name%5B%5D=Accepting+Merge+Requests&scope=all&sort=upvotes_desc&state=opened&weight=1
226
+
227
+ ## Implement design & UI elements
228
+
229
+ Please see the [UX Guide for GitLab].
230
+
231
+ ## Issue tracker
232
+
233
+ To get support for your particular problem please use the
234
+ [getting help channels](https://about.gitlab.com/getting-help/).
235
+
236
+ The [GitLab CE issue tracker on GitLab.com][ce-tracker] is for bugs concerning
237
+ the latest GitLab release and [feature proposals](#feature-proposals).
238
+
239
+ When submitting an issue please conform to the issue submission guidelines
240
+ listed below. Not all issues will be addressed and your issue is more likely to
241
+ be addressed if you submit a merge request which partially or fully solves
242
+ the issue.
243
+
244
+ If you're unsure where to post, post to the [mailing list][google-group] or
245
+ [Stack Overflow][stackoverflow] first. There are a lot of helpful GitLab users
246
+ there who may be able to help you quickly. If your particular issue turns out
247
+ to be a bug, it will find its way from there.
248
+
249
+ If it happens that you know the solution to an existing bug, please first
250
+ open the issue in order to keep track of it and then open the relevant merge
251
+ request that potentially fixes it.
252
+
253
+ ### Issue triaging
254
+
255
+ Our issue triage policies are [described in our handbook]. You are very welcome
256
+ to help the GitLab team triage issues. We also organize [issue bash events] once
257
+ every quarter.
258
+
259
+ The most important thing is making sure valid issues receive feedback from the
260
+ development team. Therefore the priority is mentioning developers that can help
261
+ on those issues. Please select someone with relevant experience from the
262
+ [GitLab team][team]. If there is nobody mentioned with that expertise look in
263
+ the commit history for the affected files to find someone.
264
+
265
+ [described in our handbook]: https://about.gitlab.com/handbook/engineering/issues/issue-triage-policies/
266
+ [issue bash events]: https://gitlab.com/gitlab-org/gitlab-ce/issues/17815
267
+
268
+ ### Feature proposals
269
+
270
+ To create a feature proposal for CE, open an issue on the
271
+ [issue tracker of CE][ce-tracker].
272
+
273
+ For feature proposals for EE, open an issue on the
274
+ [issue tracker of EE][ee-tracker].
275
+
276
+ In order to help track the feature proposals, we have created a
277
+ [`feature proposal`][fpl] label. For the time being, users that are not members
278
+ of the project cannot add labels. You can instead ask one of the [core team]
279
+ members to add the label `feature proposal` to the issue or add the following
280
+ code snippet right after your description in a new line: `~"feature proposal"`.
281
+
282
+ Please keep feature proposals as small and simple as possible, complex ones
283
+ might be edited to make them small and simple.
284
+
285
+ Please submit Feature Proposals using the ['Feature Proposal' issue template](.gitlab/issue_templates/Feature Proposal.md) provided on the issue tracker.
286
+
287
+ For changes in the interface, it can be helpful to create a mockup first.
288
+ If you want to create something yourself, consider opening an issue first to
289
+ discuss whether it is interesting to include this in GitLab.
290
+
291
+ ### Issue tracker guidelines
292
+
293
+ **[Search the issue tracker][ce-tracker]** for similar entries before
294
+ submitting your own, there's a good chance somebody else had the same issue or
295
+ feature proposal. Show your support with an award emoji and/or join the
296
+ discussion.
297
+
298
+ Please submit bugs using the ['Bug' issue template](.gitlab/issue_templates/Bug.md) provided on the issue tracker.
299
+ The text in the parenthesis is there to help you with what to include. Omit it
300
+ when submitting the actual issue. You can copy-paste it and then edit as you
301
+ see fit.
302
+
303
+ ### Issue weight
304
+
305
+ Issue weight allows us to get an idea of the amount of work required to solve
306
+ one or multiple issues. This makes it possible to schedule work more accurately.
307
+
308
+ You are encouraged to set the weight of any issue. Following the guidelines
309
+ below will make it easy to manage this, without unnecessary overhead.
310
+
311
+ 1. Set weight for any issue at the earliest possible convenience
312
+ 1. If you don't agree with a set weight, discuss with other developers until
313
+ consensus is reached about the weight
314
+ 1. Issue weights are an abstract measurement of complexity of the issue. Do not
315
+ relate issue weight directly to time. This is called [anchoring](https://en.wikipedia.org/wiki/Anchoring)
316
+ and something you want to avoid.
317
+ 1. Something that has a weight of 1 (or no weight) is really small and simple.
318
+ Something that is 9 is rewriting a large fundamental part of GitLab,
319
+ which might lead to many hard problems to solve. Changing some text in GitLab
320
+ is probably 1, adding a new Git Hook maybe 4 or 5, big features 7-9.
321
+ 1. If something is very large, it should probably be split up in multiple
322
+ issues or chunks. You can simply not set the weight of a parent issue and set
323
+ weights to children issues.
324
+
325
+ ### Regression issues
326
+
327
+ Every monthly release has a corresponding issue on the CE issue tracker to keep
328
+ track of functionality broken by that release and any fixes that need to be
329
+ included in a patch release (see [8.3 Regressions] as an example).
330
+
331
+ As outlined in the issue description, the intended workflow is to post one note
332
+ with a reference to an issue describing the regression, and then to update that
333
+ note with a reference to the merge request that fixes it as it becomes available.
334
+
335
+ If you're a contributor who doesn't have the required permissions to update
336
+ other users' notes, please post a new note with a reference to both the issue
337
+ and the merge request.
338
+
339
+ The release manager will [update the notes] in the regression issue as fixes are
340
+ addressed.
341
+
342
+ [8.3 Regressions]: https://gitlab.com/gitlab-org/gitlab-ce/issues/4127
343
+ [update the notes]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/pro-tips.md#update-the-regression-issue
344
+
345
+ ### Technical debt
346
+
347
+ In order to track things that can be improved in GitLab's codebase, we created
348
+ the ~"technical debt" label in [GitLab's issue tracker][ce-tracker].
349
+
350
+ This label should be added to issues that describe things that can be improved,
351
+ shortcuts that have been taken, code that needs refactoring, features that need
352
+ additional attention, and all other things that have been left behind due to
353
+ high velocity of development.
354
+
355
+ Everyone can create an issue, though you may need to ask for adding a specific
356
+ label, if you do not have permissions to do it by yourself. Additional labels
357
+ can be combined with the `technical debt` label, to make it easier to schedule
358
+ the improvements for a release.
359
+
360
+ Issues tagged with the `technical debt` label have the same priority like issues
361
+ that describe a new feature to be introduced in GitLab, and should be scheduled
362
+ for a release by the appropriate person.
363
+
364
+ Make sure to mention the merge request that the `technical debt` issue is
365
+ associated with in the description of the issue.
366
+
367
+ ### Stewardship
368
+
369
+ For issues related to the open source stewardship of GitLab,
370
+ there is the ~"stewardship" label.
371
+
372
+ This label is to be used for issues in which the stewardship of GitLab
373
+ is a topic of discussion. For instance if GitLab Inc. is planning to remove
374
+ features from GitLab CE to make exclusive in GitLab EE, related issues
375
+ would be labelled with ~"stewardship".
376
+
377
+ A recent example of this was the issue for
378
+ [bringing the time tracking API to GitLab CE][time-tracking-issue].
379
+
380
+ [time-tracking-issue]: https://gitlab.com/gitlab-org/gitlab-ce/issues/25517#note_20019084
381
+
382
+ ## Merge requests
383
+
384
+ We welcome merge requests with fixes and improvements to GitLab code, tests,
385
+ and/or documentation. The issues that are specifically suitable for
386
+ community contributions are listed with the label
387
+ [`Accepting Merge Requests` on our issue tracker for CE][accepting-mrs-ce]
388
+ and [EE][accepting-mrs-ee], but you are free to contribute to any other issue
389
+ you want.
390
+
391
+ Please note that if an issue is marked for the current milestone either before
392
+ or while you are working on it, a team member may take over the merge request
393
+ in order to ensure the work is finished before the release date.
394
+
395
+ If you want to add a new feature that is not labeled it is best to first create
396
+ a feedback issue (if there isn't one already) and leave a comment asking for it
397
+ to be marked as `Accepting Merge Requests`. Please include screenshots or
398
+ wireframes if the feature will also change the UI.
399
+
400
+ Merge requests should be opened at [GitLab.com][gitlab-mr-tracker].
401
+
402
+ If you are new to GitLab development (or web development in general), see the
403
+ [I want to contribute!](#i-want-to-contribute) section to get you started with
404
+ some potentially easy issues.
405
+
406
+ To start with GitLab development download the [GitLab Development Kit][gdk] and
407
+ see the [Development section](doc/development/README.md) for some guidelines.
408
+
409
+ ### Merge request guidelines
410
+
411
+ If you can, please submit a merge request with the fix or improvements
412
+ including tests. If you don't know how to fix the issue but can write a test
413
+ that exposes the issue we will accept that as well. In general bug fixes that
414
+ include a regression test are merged quickly while new features without proper
415
+ tests are least likely to receive timely feedback. The workflow to make a merge
416
+ request is as follows:
417
+
418
+ 1. Fork the project into your personal space on GitLab.com
419
+ 1. Create a feature branch, branch away from `master`
420
+ 1. Write [tests](https://gitlab.com/gitlab-org/gitlab-development-kit#running-the-tests) and code
421
+ 1. [Generate a changelog entry with `bin/changelog`][changelog]
422
+ 1. If you are writing documentation, make sure to follow the
423
+ [documentation styleguide][doc-styleguide]
424
+ 1. If you have multiple commits please combine them into a few logically
425
+ organized commits by [squashing them][git-squash]
426
+ 1. Push the commit(s) to your fork
427
+ 1. Submit a merge request (MR) to the `master` branch
428
+ 1. Your merge request needs at least 1 approval but feel free to require more.
429
+ For instance if you're touching backend and frontend code, it's a good idea
430
+ to require 2 approvals: 1 from a backend maintainer and 1 from a frontend
431
+ maintainer
432
+ 1. You don't have to select any approvers, but you can if you really want
433
+ specific people to approve your merge request
434
+ 1. The MR title should describe the change you want to make
435
+ 1. The MR description should give a motive for your change and the method you
436
+ used to achieve it.
437
+ 1. If you are contributing code, fill in the template already provided in the
438
+ "Description" field.
439
+ 1. If you are contributing documentation, choose `Documentation` from the
440
+ "Choose a template" menu and fill in the template.
441
+ 1. Mention the issue(s) your merge request solves, using the `Solves #XXX` or
442
+ `Closes #XXX` syntax to auto-close the issue(s) once the merge request will
443
+ be merged.
444
+ 1. If you're allowed to, set a relevant milestone and labels
445
+ 1. If the MR changes the UI it should include *Before* and *After* screenshots
446
+ 1. If the MR changes CSS classes please include the list of affected pages,
447
+ `grep css-class ./app -R`
448
+ 1. Be prepared to answer questions and incorporate feedback even if requests
449
+ for this arrive weeks or months after your MR submission
450
+ 1. If a discussion has been addressed, select the "Resolve discussion" button
451
+ beneath it to mark it resolved.
452
+ 1. If your MR touches code that executes shell commands, reads or opens files or
453
+ handles paths to files on disk, make sure it adheres to the
454
+ [shell command guidelines](doc/development/shell_commands.md)
455
+ 1. If your code creates new files on disk please read the
456
+ [shared files guidelines](doc/development/shared_files.md).
457
+ 1. When writing commit messages please follow
458
+ [these](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
459
+ [guidelines](http://chris.beams.io/posts/git-commit/).
460
+ 1. If your merge request adds one or more migrations, make sure to execute all
461
+ migrations on a fresh database before the MR is reviewed. If the review leads
462
+ to large changes in the MR, do this again once the review is complete.
463
+ 1. For more complex migrations, write tests.
464
+ 1. Merge requests **must** adhere to the [merge request performance
465
+ guidelines](doc/development/merge_request_performance_guidelines.md).
466
+ 1. For tests that use Capybara or PhantomJS, see this [article on how
467
+ to write reliable asynchronous tests](https://robots.thoughtbot.com/write-reliable-asynchronous-integration-tests-with-capybara).
468
+
469
+ Please keep the change in a single MR **as small as possible**. If you want to
470
+ contribute a large feature think very hard what the minimum viable change is.
471
+ Can you split the functionality? Can you only submit the backend/API code? Can
472
+ you start with a very simple UI? Can you do part of the refactor? The increased
473
+ reviewability of small MRs that leads to higher code quality is more important
474
+ to us than having a minimal commit log. The smaller an MR is the more likely it
475
+ is it will be merged (quickly). After that you can send more MRs to enhance it.
476
+ The ['How to get faster PR reviews' document of Kubernetes](https://github.com/kubernetes/community/blob/master/contributors/devel/faster_reviews.md) also has some great points regarding this.
477
+
478
+ For examples of feedback on merge requests please look at already
479
+ [closed merge requests][closed-merge-requests]. If you would like quick feedback
480
+ on your merge request feel free to mention someone from the [core team] or one
481
+ of the [Merge request coaches][team].
482
+ Please ensure that your merge request meets the contribution acceptance criteria.
483
+
484
+ When having your code reviewed and when reviewing merge requests please take the
485
+ [code review guidelines](doc/development/code_review.md) into account.
486
+
487
+ ### Contribution acceptance criteria
488
+
489
+ 1. The change is as small as possible
490
+ 1. Include proper tests and make all tests pass (unless it contains a test
491
+ exposing a bug in existing code). Every new class should have corresponding
492
+ unit tests, even if the class is exercised at a higher level, such as a feature test.
493
+ 1. If you suspect a failing CI build is unrelated to your contribution, you may
494
+ try and restart the failing CI job or ask a developer to fix the
495
+ aforementioned failing test
496
+ 1. Your MR initially contains a single commit (please use `git rebase -i` to
497
+ squash commits)
498
+ 1. Your changes can merge without problems (if not please rebase if you're the
499
+ only one working on your feature branch, otherwise, merge `master`)
500
+ 1. Does not break any existing functionality
501
+ 1. Fixes one specific issue or implements one specific feature (do not combine
502
+ things, send separate merge requests if needed)
503
+ 1. Migrations should do only one thing (e.g., either create a table, move data
504
+ to a new table or remove an old table) to aid retrying on failure
505
+ 1. Keeps the GitLab code base clean and well structured
506
+ 1. Contains functionality we think other users will benefit from too
507
+ 1. Doesn't add configuration options or settings options since they complicate
508
+ making and testing future changes
509
+ 1. Changes do not adversely degrade performance.
510
+ - Avoid repeated polling of endpoints that require a significant amount of overhead
511
+ - Check for N+1 queries via the SQL log or [`QueryRecorder`](https://docs.gitlab.com/ce/development/merge_request_performance_guidelines.html)
512
+ - Avoid repeated access of filesystem
513
+ 1. If you need polling to support real-time features, please use
514
+ [polling with ETag caching][polling-etag].
515
+ 1. Changes after submitting the merge request should be in separate commits
516
+ (no squashing).
517
+ 1. It conforms to the [style guides](#style-guides) and the following:
518
+ - If your change touches a line that does not follow the style, modify the
519
+ entire line to follow it. This prevents linting tools from generating warnings.
520
+ - Don't touch neighbouring lines. As an exception, automatic mass
521
+ refactoring modifications may leave style non-compliant.
522
+ 1. If the merge request adds any new libraries (gems, JavaScript libraries,
523
+ etc.), they should conform to our [Licensing guidelines][license-finder-doc].
524
+ See the instructions in that document for help if your MR fails the
525
+ "license-finder" test with a "Dependencies that need approval" error.
526
+
527
+ ## Definition of done
528
+
529
+ If you contribute to GitLab please know that changes involve more than just
530
+ code. We have the following [definition of done][definition-of-done]. Please ensure you support
531
+ the feature you contribute through all of these steps.
532
+
533
+ 1. Description explaining the relevancy (see following item)
534
+ 1. Working and clean code that is commented where needed
535
+ 1. [Unit and system tests][testing] that pass on the CI server
536
+ 1. Performance/scalability implications have been considered, addressed, and tested
537
+ 1. [Documented][doc-styleguide] in the `/doc` directory
538
+ 1. [Changelog entry added][changelog], if necessary
539
+ 1. Reviewed and any concerns are addressed
540
+ 1. Merged by a project maintainer
541
+ 1. Added to the release blog article, if relevant
542
+ 1. Added to [the website](https://gitlab.com/gitlab-com/www-gitlab-com/), if relevant
543
+ 1. Community questions answered
544
+ 1. Answers to questions radiated (in docs/wiki/support etc.)
545
+
546
+ If you add a dependency in GitLab (such as an operating system package) please
547
+ consider updating the following and note the applicability of each in your
548
+ merge request:
549
+
550
+ 1. Note the addition in the release blog post (create one if it doesn't exist yet) https://gitlab.com/gitlab-com/www-gitlab-com/merge_requests/
551
+ 1. Upgrade guide, for example https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/7.5-to-7.6.md
552
+ 1. Upgrader https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/upgrader.md#2-run-gitlab-upgrade-tool
553
+ 1. Installation guide https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md#1-packages-dependencies
554
+ 1. GitLab Development Kit https://gitlab.com/gitlab-org/gitlab-development-kit
555
+ 1. Test suite https://gitlab.com/gitlab-org/gitlab-ce/blob/master/scripts/prepare_build.sh
556
+ 1. Omnibus package creator https://gitlab.com/gitlab-org/omnibus-gitlab
557
+
558
+ ## Style guides
559
+
560
+ 1. [Ruby](https://github.com/bbatsov/ruby-style-guide).
561
+ Important sections include [Source Code Layout][rss-source] and
562
+ [Naming][rss-naming]. Use:
563
+ - multi-line method chaining style **Option A**: dot `.` on the second line
564
+ - string literal quoting style **Option A**: single quoted by default
565
+ 1. [Rails](https://github.com/bbatsov/rails-style-guide)
566
+ 1. [Newlines styleguide][newlines-styleguide]
567
+ 1. [Testing][testing]
568
+ 1. [JavaScript styleguide][js-styleguide]
569
+ 1. [SCSS styleguide][scss-styleguide]
570
+ 1. [Shell commands](doc/development/shell_commands.md) created by GitLab
571
+ contributors to enhance security
572
+ 1. [Database Migrations](doc/development/migration_style_guide.md)
573
+ 1. [Markdown](http://www.cirosantilli.com/markdown-styleguide)
574
+ 1. [Documentation styleguide][doc-styleguide]
575
+ 1. Interface text should be written subjectively instead of objectively. It
576
+ should be the GitLab core team addressing a person. It should be written in
577
+ present time and never use past tense (has been/was). For example instead
578
+ of _prohibited this user from being saved due to the following errors:_ the
579
+ text should be _sorry, we could not create your account because:_
580
+
581
+ This is also the style used by linting tools such as
582
+ [RuboCop](https://github.com/bbatsov/rubocop),
583
+ [PullReview](https://www.pullreview.com/) and [Hound CI](https://houndci.com).
584
+
585
+ ## Code of conduct
586
+
587
+ As contributors and maintainers of this project, we pledge to respect all
588
+ people who contribute through reporting issues, posting feature requests,
589
+ updating documentation, submitting pull requests or patches, and other
590
+ activities.
591
+
592
+ We are committed to making participation in this project a harassment-free
593
+ experience for everyone, regardless of level of experience, gender, gender
594
+ identity and expression, sexual orientation, disability, personal appearance,
595
+ body size, race, ethnicity, age, or religion.
596
+
597
+ Examples of unacceptable behavior by participants include the use of sexual
598
+ language or imagery, derogatory comments or personal attacks, trolling, public
599
+ or private harassment, insults, or other unprofessional conduct.
600
+
601
+ Project maintainers have the right and responsibility to remove, edit, or
602
+ reject comments, commits, code, wiki edits, issues, and other contributions
603
+ that are not aligned to this Code of Conduct. Project maintainers who do not
604
+ follow the Code of Conduct may be removed from the project team.
605
+
606
+ This code of conduct applies both within project spaces and in public spaces
607
+ when an individual is representing the project or its community.
608
+
609
+ Instances of abusive, harassing, or otherwise unacceptable behavior can be
610
+ reported by emailing `contact@gitlab.com`.
611
+
612
+ This Code of Conduct is adapted from the [Contributor Covenant][contributor-covenant], version 1.1.0,
613
+ available at [http://contributor-covenant.org/version/1/1/0/](http://contributor-covenant.org/version/1/1/0/).
614
+
615
+ [core team]: https://about.gitlab.com/core-team/
616
+ [team]: https://about.gitlab.com/team/
617
+ [getting-help]: https://about.gitlab.com/getting-help/
618
+ [codetriage]: http://www.codetriage.com/gitlabhq/gitlabhq
619
+ [accepting-mrs-weight]: https://gitlab.com/gitlab-org/gitlab-ce/issues?assignee_id=0&label_name[]=Accepting%20Merge%20Requests&sort=weight_asc
620
+ [ce-tracker]: https://gitlab.com/gitlab-org/gitlab-ce/issues
621
+ [ee-tracker]: https://gitlab.com/gitlab-org/gitlab-ee/issues
622
+ [google-group]: https://groups.google.com/forum/#!forum/gitlabhq
623
+ [stackoverflow]: https://stackoverflow.com/questions/tagged/gitlab
624
+ [fpl]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name=feature+proposal
625
+ [accepting-mrs-ce]: https://gitlab.com/gitlab-org/gitlab-ce/issues?label_name=Accepting+Merge+Requests
626
+ [accepting-mrs-ee]: https://gitlab.com/gitlab-org/gitlab-ee/issues?label_name=Accepting+Merge+Requests
627
+ [gitlab-mr-tracker]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests
628
+ [gdk]: https://gitlab.com/gitlab-org/gitlab-development-kit
629
+ [git-squash]: https://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits
630
+ [closed-merge-requests]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests?assignee_id=&label_name=&milestone_id=&scope=&sort=&state=closed
631
+ [definition-of-done]: http://guide.agilealliance.org/guide/definition-of-done.html
632
+ [contributor-covenant]: http://contributor-covenant.org
633
+ [rss-source]: https://github.com/bbatsov/ruby-style-guide/blob/master/README.md#source-code-layout
634
+ [rss-naming]: https://github.com/bbatsov/ruby-style-guide/blob/master/README.md#naming
635
+ [changelog]: doc/development/changelog.md "Generate a changelog entry"
636
+ [doc-styleguide]: doc/development/doc_styleguide.md "Documentation styleguide"
637
+ [js-styleguide]: doc/development/fe_guide/style_guide_js.md "JavaScript styleguide"
638
+ [scss-styleguide]: doc/development/fe_guide/style_guide_scss.md "SCSS styleguide"
639
+ [newlines-styleguide]: doc/development/newlines_styleguide.md "Newlines styleguide"
640
+ [UX Guide for GitLab]: http://docs.gitlab.com/ce/development/ux_guide/
641
+ [license-finder-doc]: doc/development/licensing.md
642
+ [GitLab Inc engineering workflow]: https://about.gitlab.com/handbook/engineering/workflow/#labelling-issues
643
+ [polling-etag]: https://docs.gitlab.com/ce/development/polling.html
644
+ [testing]: doc/development/testing.md
645
+
646
+ [^1]: Please note that specs other than JavaScript specs are considered backend
647
+ code.
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Gem Version](https://badge.fury.io/rb/gitlab-qa.svg)](https://rubygems.org/gems/gitlab-qa)
2
+ [![build status](https://gitlab.com/gitlab-org/gitlab-qa/badges/master/build.svg)](https://gitlab.com/gitlab-org/gitlab-qa/pipelines)
3
+
1
4
  # GitLab end-to-end tests
2
5
 
3
6
  End-to-end test suite that verifies GitLab as a whole.
@@ -7,6 +10,31 @@ GitLab consists of multiple pieces configured and packaged by
7
10
 
8
11
  The purpose of this test suite is to verify that all pieces do integrate well together.
9
12
 
10
- ## How we use it
13
+ ## How do we use it
11
14
 
12
15
  Currently we trigger test suite against GitLab Docker images created by Omnibus nightly.
16
+
17
+ ## How can you use it
18
+
19
+ GitLab QA tool is published as a [Ruby Gem](https://rubygems.org/gems/gitlab-qa).
20
+
21
+ You can install it with `gem install gitlab-qa`. It will expose a `gitlab-qa`
22
+ command in your system.
23
+
24
+ 1. Run tests against a Docker image with GitLab:
25
+
26
+ `gitlab-qa Test::Instance::Image CE|EE`
27
+
28
+ 1. Test upgrade process:
29
+
30
+ `gitlab-qa Test::Omnibus::Upgrade CE|EE`
31
+
32
+ 1. Run tests against any existing instance:
33
+
34
+ `gitlab-qa Test::Instance::Any CE|EE nightly|latest http://your.instance.gitlab`
35
+
36
+ ## Supported environment variables
37
+
38
+ * `GITLAB_USERNAME` - username to use when signing in to GitLab
39
+ * `GITLAB_PASSWORD` - password to use when signing in to GitLab
40
+ * `EE_LICENSE` - Enterprise Edition license
data/lib/gitlab/qa.rb CHANGED
@@ -2,6 +2,12 @@ $LOAD_PATH << File.expand_path(File.dirname(__FILE__))
2
2
 
3
3
  module Gitlab
4
4
  module QA
5
+ autoload :Release, 'qa/release'
6
+
7
+ module Runtime
8
+ autoload :Env, 'qa/runtime/env'
9
+ end
10
+
5
11
  module Scenario
6
12
  autoload :Actable, 'qa/scenario/actable'
7
13
  autoload :Template, 'qa/scenario/template'
@@ -27,6 +27,10 @@ module Gitlab
27
27
  Docker::Command.execute("attach --sig-proxy=false #{name}", &block)
28
28
  end
29
29
 
30
+ def restart(name)
31
+ Docker::Command.execute("restart #{name}")
32
+ end
33
+
30
34
  def stop(name)
31
35
  Docker::Command.execute("stop #{name}")
32
36
  end
@@ -10,8 +10,8 @@ module Gitlab
10
10
 
11
11
  # rubocop:disable Style/Semicolon
12
12
 
13
- attr_accessor :release, :image, :tag, :volumes, :network
14
- attr_reader :name
13
+ attr_accessor :image, :tag, :volumes, :network
14
+ attr_reader :name, :release
15
15
 
16
16
  def initialize
17
17
  @docker = Docker::Engine.new
@@ -21,6 +21,10 @@ module Gitlab
21
21
  @name = "#{name}-#{SecureRandom.hex(4)}"
22
22
  end
23
23
 
24
+ def release=(release)
25
+ @release ||= Release.new(release)
26
+ end
27
+
24
28
  def address
25
29
  "http://#{hostname}"
26
30
  end
@@ -69,6 +73,10 @@ module Gitlab
69
73
  end
70
74
  end
71
75
 
76
+ def restart
77
+ @docker.restart(@name)
78
+ end
79
+
72
80
  def teardown
73
81
  raise 'Invalid instance name!' unless @name
74
82
 
@@ -6,35 +6,31 @@ module Gitlab
6
6
 
7
7
  IMAGE_NAME = 'gitlab/gitlab-qa'.freeze
8
8
 
9
- ENVS = %w(GITLAB_USERNAME GITLAB_PASSWORD
10
- GITLAB_URL EE_LICENSE).freeze
11
-
12
9
  def initialize
13
10
  @docker = Docker::Engine.new
14
11
  end
15
12
 
16
13
  def test(gitlab)
17
- test_address(gitlab.release, gitlab.tag, gitlab.address,
14
+ test_address(gitlab.release.edition, gitlab.tag, gitlab.address,
18
15
  "#{gitlab.name}-specs", gitlab.network)
19
16
  end
20
17
 
21
18
  # rubocop:disable Metrics/MethodLength
22
19
  #
23
- def test_address(release, tag, address, name = nil, network = nil)
20
+ def test_address(edition, tag, address, name = nil, network = nil)
24
21
  puts 'Running instance test scenarios for Gitlab ' \
25
- "#{release.upcase} at #{address}"
22
+ "#{edition.upcase} at #{address}"
26
23
 
27
24
  args = ['Test::Instance', address]
28
25
 
29
- @docker.run(IMAGE_NAME, "#{release}-#{tag}", *args) do |command|
30
- command << %(-t --rm)
31
- command << "--net=#{network}" if network
26
+ @docker.run(IMAGE_NAME, "#{edition}-#{tag}", *args) do |command|
27
+ command << "-t --rm --net=#{network || 'bridge'}"
32
28
 
33
- ENVS.each do |env|
29
+ Runtime::Env.delegated.each do |env|
34
30
  command << %(-e #{env}="$#{env}") if ENV[env]
35
31
  end
36
32
 
37
- command << '-v /tmp/gitlab-qa-screenshots:/home/qa/tmp/'
33
+ command << "-v #{Runtime::Env.screenshots_dir}:/home/qa/tmp"
38
34
  command << "--name #{name || ('gitlab-specs-' + Time.now.to_i)}"
39
35
  end
40
36
  end
@@ -0,0 +1,44 @@
1
+ module Gitlab
2
+ module QA
3
+ class Release
4
+ CUSTOM_GITLAB_IMAGE_REGEX = /gitlab-([ce]e):(\w+)/
5
+ DEFAULT_TAG = 'nightly'.freeze
6
+
7
+ attr_reader :release
8
+
9
+ def initialize(release)
10
+ @release = release.to_s
11
+ end
12
+
13
+ def edition
14
+ if canonical?
15
+ release.downcase.to_sym
16
+ else
17
+ release.match(CUSTOM_GITLAB_IMAGE_REGEX)[1].to_sym
18
+ end
19
+ end
20
+
21
+ def image
22
+ if canonical?
23
+ "gitlab/gitlab-#{edition}"
24
+ else
25
+ release.sub(/:\w+/, '')
26
+ end
27
+ end
28
+
29
+ def tag
30
+ if canonical?
31
+ DEFAULT_TAG
32
+ else
33
+ release.match(CUSTOM_GITLAB_IMAGE_REGEX)[2]
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def canonical?
40
+ %w(ce ee).include?(release.downcase)
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,17 @@
1
+ module Gitlab
2
+ module QA
3
+ module Runtime
4
+ module Env
5
+ extend self
6
+
7
+ def screenshots_dir
8
+ ENV['QA_SCREENSHOTS_DIR'] || '/tmp/gitlab-qa-screenshots'
9
+ end
10
+
11
+ def delegated
12
+ %w(GITLAB_USERNAME GITLAB_PASSWORD GITLAB_URL EE_LICENSE).freeze
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -7,22 +7,17 @@ module Gitlab
7
7
  attr_writer :tag, :volumes
8
8
 
9
9
  def initialize
10
- @tag = 'nightly'
11
10
  @volumes = {}
12
11
  end
13
12
 
14
13
  # rubocop:disable Metrics/MethodLength
15
14
  #
16
- def perform(version)
17
- unless %w(CE EE).include?(version)
18
- raise 'Unknown GitLab release type specified!'
19
- end
20
-
15
+ def perform(release)
21
16
  Docker::Gitlab.perform do |gitlab|
22
- gitlab.release = version.downcase.to_sym
23
- gitlab.name = "gitlab-qa-#{gitlab.release}"
24
- gitlab.image = "gitlab/gitlab-#{gitlab.release}"
25
- gitlab.tag = @tag
17
+ gitlab.release = release
18
+ gitlab.name = "gitlab-qa-#{gitlab.release.edition}"
19
+ gitlab.image = gitlab.release.image
20
+ gitlab.tag = gitlab.release.tag
26
21
  gitlab.volumes = @volumes
27
22
  gitlab.network = 'test'
28
23
 
@@ -5,15 +5,19 @@ module Gitlab
5
5
  module Omnibus
6
6
  class Image < Scenario::Template
7
7
  # rubocop:disable Style/Semicolon
8
-
9
- def perform(version)
8
+ # rubocop:disable Metrics/MethodLength
9
+ def perform(release)
10
10
  Docker::Gitlab.perform do |instance|
11
- instance.name = "gitlab-qa-#{version.downcase}"
12
- instance.image = "gitlab/gitlab-#{version.downcase}"
13
- instance.tag = 'nightly'
11
+ instance.release = release
12
+ instance.name = "gitlab-qa-#{instance.release.edition}"
13
+ instance.image = instance.release.image
14
+ instance.tag = instance.release.tag
14
15
  instance.network = 'bridge'
15
16
 
16
- instance.act { prepare; start; reconfigure; teardown }
17
+ instance.act do
18
+ prepare; start; reconfigure
19
+ restart; wait; teardown
20
+ end
17
21
  end
18
22
  end
19
23
  end
@@ -11,15 +11,17 @@ module Gitlab
11
11
  'logs' => '/var/log/gitlab',
12
12
  'data' => '/var/opt/gitlab' }.freeze
13
13
 
14
- def perform(version)
14
+ # rubocop:disable Metrics/MethodLength
15
+ def perform(release)
15
16
  with_temporary_volumes do |volumes|
16
- Scenario::Test::Instance::Image.perform(version) do |scenario|
17
+ Scenario::Test::Instance::Image
18
+ .perform(Release.new(release).edition) do |scenario|
17
19
  scenario.tag = 'latest'
18
20
  scenario.volumes = volumes
19
21
  end
20
22
 
21
- Scenario::Test::Instance::Image.perform(version) do |scenario|
22
- scenario.tag = 'nightly'
23
+ Scenario::Test::Instance::Image
24
+ .perform(release) do |scenario|
23
25
  scenario.volumes = volumes
24
26
  end
25
27
  end
@@ -1,5 +1,5 @@
1
1
  module Gitlab
2
2
  module QA
3
- VERSION = '0.1.0'.freeze
3
+ VERSION = '0.2.0'.freeze
4
4
  end
5
5
  end
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: 0.1.0
4
+ version: 0.2.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: 2017-03-20 00:00:00.000000000 Z
11
+ date: 2017-06-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,7 @@ files:
94
94
  - ".rspec"
95
95
  - ".rubocop.yml"
96
96
  - ".travis.yml"
97
+ - CONTRIBUTING.md
97
98
  - Gemfile
98
99
  - LICENSE
99
100
  - README.md
@@ -109,6 +110,8 @@ files:
109
110
  - lib/gitlab/qa/docker/engine.rb
110
111
  - lib/gitlab/qa/docker/gitlab.rb
111
112
  - lib/gitlab/qa/docker/specs.rb
113
+ - lib/gitlab/qa/release.rb
114
+ - lib/gitlab/qa/runtime/env.rb
112
115
  - lib/gitlab/qa/scenario/actable.rb
113
116
  - lib/gitlab/qa/scenario/template.rb
114
117
  - lib/gitlab/qa/scenario/test/instance/any.rb