Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
31979cb323
commit
0851c83c27
59 changed files with 233 additions and 205 deletions
|
@ -1910,20 +1910,3 @@ Rails/SaveBang:
|
||||||
- 'spec/views/projects/imports/new.html.haml_spec.rb'
|
- 'spec/views/projects/imports/new.html.haml_spec.rb'
|
||||||
- 'spec/views/projects/merge_requests/show.html.haml_spec.rb'
|
- 'spec/views/projects/merge_requests/show.html.haml_spec.rb'
|
||||||
- 'spec/views/shared/_label_row.html.haml_spec.rb'
|
- 'spec/views/shared/_label_row.html.haml_spec.rb'
|
||||||
- 'spec/workers/concerns/project_export_options_spec.rb'
|
|
||||||
- 'spec/workers/gitlab/import/stuck_project_import_jobs_worker_spec.rb'
|
|
||||||
- 'spec/workers/gitlab/jira_import/stuck_jira_import_jobs_worker_spec.rb'
|
|
||||||
- 'spec/workers/migrate_external_diffs_worker_spec.rb'
|
|
||||||
- 'spec/workers/namespaceless_project_destroy_worker_spec.rb'
|
|
||||||
- 'spec/workers/namespaces/root_statistics_worker_spec.rb'
|
|
||||||
- 'spec/workers/pages_domain_verification_worker_spec.rb'
|
|
||||||
- 'spec/workers/process_commit_worker_spec.rb'
|
|
||||||
- 'spec/workers/propagate_integration_worker_spec.rb'
|
|
||||||
- 'spec/workers/propagate_service_template_worker_spec.rb'
|
|
||||||
- 'spec/workers/remove_unreferenced_lfs_objects_worker_spec.rb'
|
|
||||||
- 'spec/workers/repository_check/single_repository_worker_spec.rb'
|
|
||||||
- 'spec/workers/repository_cleanup_worker_spec.rb'
|
|
||||||
- 'spec/workers/repository_import_worker_spec.rb'
|
|
||||||
- 'spec/workers/repository_update_remote_mirror_worker_spec.rb'
|
|
||||||
- 'spec/workers/stuck_ci_jobs_worker_spec.rb'
|
|
||||||
- 'spec/workers/update_head_pipeline_for_merge_request_worker_spec.rb'
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
13.3.0-rc3
|
a6091637dcb4c3b601a8860b5f164c0ce90ba0ca
|
||||||
|
|
|
@ -94,7 +94,7 @@ export default {
|
||||||
{{ issue.title }}
|
{{ issue.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
:href="issue.webUrl"
|
:href="issue.webUrl"
|
||||||
>{{ issue.webPath }}</a
|
>{{ issue.webPath }}</a
|
||||||
>
|
>
|
||||||
|
|
|
@ -94,7 +94,7 @@ export default {
|
||||||
{{ issue.title }}
|
{{ issue.title }}
|
||||||
</h2>
|
</h2>
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
:href="issue.webUrl"
|
:href="issue.webUrl"
|
||||||
>{{ issue.webPath }}</a
|
>{{ issue.webPath }}</a
|
||||||
>
|
>
|
||||||
|
|
|
@ -133,12 +133,12 @@ export default {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="table-section section-100 gl-white-space-normal mt-md-3">
|
<div class="table-section section-100 gl-white-space-normal mt-md-3">
|
||||||
<div class="gl-display-flex gl-text-gray-600">
|
<div class="gl-display-flex gl-text-gray-400">
|
||||||
<gl-icon name="issues" class="gl-mr-2" />
|
<gl-icon name="issues" class="gl-mr-2" />
|
||||||
<gl-link
|
<gl-link
|
||||||
data-testid="issue-id-link"
|
data-testid="issue-id-link"
|
||||||
:href="issue.webUrl"
|
:href="issue.webUrl"
|
||||||
class="gl-text-gray-600 gl-mr-5"
|
class="gl-text-gray-400 gl-mr-5"
|
||||||
@click="onIssueLinkClick(issue.iid, issue.title)"
|
@click="onIssueLinkClick(issue.iid, issue.title)"
|
||||||
>#{{ issue.iid }}</gl-link
|
>#{{ issue.iid }}</gl-link
|
||||||
>
|
>
|
||||||
|
|
|
@ -111,7 +111,7 @@ export default {
|
||||||
|
|
||||||
<div class="gl-flex-grow-1 gl-display-flex gl-flex-direction-column">
|
<div class="gl-flex-grow-1 gl-display-flex gl-flex-direction-column">
|
||||||
<span class="gl-font-monospace">{{ item.name }}</span>
|
<span class="gl-font-monospace">{{ item.name }}</span>
|
||||||
<span class="gl-text-gray-600">{{ item.subtitle }}</span>
|
<span class="gl-text-gray-400">{{ item.subtitle }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<gl-badge v-if="item.default" size="sm" variant="info">{{
|
<gl-badge v-if="item.default" size="sm" variant="info">{{
|
||||||
|
|
|
@ -109,7 +109,7 @@ export default {
|
||||||
<template>
|
<template>
|
||||||
<gl-new-dropdown v-bind="$attrs" class="ref-selector" @shown="focusSearchBox">
|
<gl-new-dropdown v-bind="$attrs" class="ref-selector" @shown="focusSearchBox">
|
||||||
<template slot="button-content">
|
<template slot="button-content">
|
||||||
<span class="gl-flex-grow-1 gl-ml-2 gl-text-gray-600" data-testid="button-content">
|
<span class="gl-flex-grow-1 gl-ml-2 gl-text-gray-400" data-testid="button-content">
|
||||||
<span v-if="selectedRef" class="gl-font-monospace">{{ selectedRef }}</span>
|
<span v-if="selectedRef" class="gl-font-monospace">{{ selectedRef }}</span>
|
||||||
<span v-else>{{ i18n.noRefSelected }}</span>
|
<span v-else>{{ i18n.noRefSelected }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -138,7 +138,7 @@ export default {
|
||||||
:aria-label="$options.externalLinkTooltipText"
|
:aria-label="$options.externalLinkTooltipText"
|
||||||
:title="$options.externalLinkTooltipText"
|
:title="$options.externalLinkTooltipText"
|
||||||
data-testid="external-link-indicator"
|
data-testid="external-link-indicator"
|
||||||
class="gl-ml-2 gl-flex-shrink-0 gl-flex-grow-0 gl-text-gray-600"
|
class="gl-ml-2 gl-flex-shrink-0 gl-flex-grow-0 gl-text-gray-400"
|
||||||
/>
|
/>
|
||||||
</gl-link>
|
</gl-link>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -38,7 +38,7 @@ export default {
|
||||||
<div class="inline">
|
<div class="inline">
|
||||||
<label
|
<label
|
||||||
v-tooltip
|
v-tooltip
|
||||||
:class="{ 'gl-text-gray-600': isDisabled }"
|
:class="{ 'gl-text-gray-400': isDisabled }"
|
||||||
data-testid="squashLabel"
|
data-testid="squashLabel"
|
||||||
:data-title="tooltipTitle"
|
:data-title="tooltipTitle"
|
||||||
>
|
>
|
||||||
|
|
|
@ -74,16 +74,16 @@ export default {
|
||||||
</div>
|
</div>
|
||||||
<div class="gl-text-gray-700">
|
<div class="gl-text-gray-700">
|
||||||
<div v-if="user.bio" class="gl-display-flex gl-mb-2">
|
<div v-if="user.bio" class="gl-display-flex gl-mb-2">
|
||||||
<icon name="profile" class="gl-text-gray-600 gl-flex-shrink-0" />
|
<icon name="profile" class="gl-text-gray-400 gl-flex-shrink-0" />
|
||||||
<span ref="bio" class="gl-ml-2" v-html="user.bioHtml"></span>
|
<span ref="bio" class="gl-ml-2" v-html="user.bioHtml"></span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="user.workInformation" class="gl-display-flex gl-mb-2">
|
<div v-if="user.workInformation" class="gl-display-flex gl-mb-2">
|
||||||
<icon name="work" class="gl-text-gray-600 gl-flex-shrink-0" />
|
<icon name="work" class="gl-text-gray-400 gl-flex-shrink-0" />
|
||||||
<span ref="workInformation" class="gl-ml-2">{{ user.workInformation }}</span>
|
<span ref="workInformation" class="gl-ml-2">{{ user.workInformation }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="user.location" class="js-location gl-text-gray-700 gl-display-flex">
|
<div v-if="user.location" class="js-location gl-text-gray-700 gl-display-flex">
|
||||||
<icon name="location" class="gl-text-gray-600 flex-shrink-0" />
|
<icon name="location" class="gl-text-gray-400 flex-shrink-0" />
|
||||||
<span class="gl-ml-2">{{ user.location }}</span>
|
<span class="gl-ml-2">{{ user.location }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="statusHtml" class="js-user-status gl-mt-3">
|
<div v-if="statusHtml" class="js-user-status gl-mt-3">
|
||||||
|
|
|
@ -509,7 +509,7 @@ img.emoji {
|
||||||
}
|
}
|
||||||
|
|
||||||
&.is-dragging {
|
&.is-dragging {
|
||||||
background-color: $gray-600;
|
background-color: $gray-400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -209,7 +209,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.doc-versions {
|
.doc-versions {
|
||||||
color: $gray-600;
|
color: $gray-400;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: $gray-900;
|
color: $gray-900;
|
||||||
|
|
|
@ -227,7 +227,7 @@ label {
|
||||||
right: 0.8em;
|
right: 0.8em;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
transform: translateY(-50%);
|
transform: translateY(-50%);
|
||||||
color: $gray-600;
|
color: $gray-400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-md {
|
.input-md {
|
||||||
|
|
|
@ -326,8 +326,8 @@
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
min-width: 16px;
|
min-width: 16px;
|
||||||
color: $gray-600;
|
color: $gray-400;
|
||||||
fill: $gray-600;
|
fill: $gray-400;
|
||||||
|
|
||||||
.fa {
|
.fa {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
|
@ -168,7 +168,7 @@ $gray-200: #bfbfbf !default;
|
||||||
$gray-300: #999 !default;
|
$gray-300: #999 !default;
|
||||||
$gray-400: #868686 !default;
|
$gray-400: #868686 !default;
|
||||||
$gray-500: #666 !default;
|
$gray-500: #666 !default;
|
||||||
$gray-600: #919191 !default;
|
$gray-600: #5e5e5e !default;
|
||||||
$gray-700: #707070 !default;
|
$gray-700: #707070 !default;
|
||||||
$gray-800: #4f4f4f !default;
|
$gray-800: #4f4f4f !default;
|
||||||
$gray-900: #303030 !default;
|
$gray-900: #303030 !default;
|
||||||
|
@ -351,11 +351,11 @@ $gl-font-weight-normal: 400;
|
||||||
$gl-font-weight-bold: 600;
|
$gl-font-weight-bold: 600;
|
||||||
$gl-text-color: $gray-900;
|
$gl-text-color: $gray-900;
|
||||||
$gl-text-color-secondary: $gray-700;
|
$gl-text-color-secondary: $gray-700;
|
||||||
$gl-text-color-tertiary: $gray-600;
|
$gl-text-color-tertiary: $gray-400;
|
||||||
$gl-text-color-quaternary: #d6d6d6;
|
$gl-text-color-quaternary: #d6d6d6;
|
||||||
$gl-text-color-inverted: $white;
|
$gl-text-color-inverted: $white;
|
||||||
$gl-text-color-secondary-inverted: rgba($white, 0.85);
|
$gl-text-color-secondary-inverted: rgba($white, 0.85);
|
||||||
$gl-text-color-disabled: $gray-600;
|
$gl-text-color-disabled: $gray-400;
|
||||||
$gl-grayish-blue: #7f8fa4;
|
$gl-grayish-blue: #7f8fa4;
|
||||||
$gl-gray-dark: #313236;
|
$gl-gray-dark: #313236;
|
||||||
$gl-gray-light: #5c5c5c;
|
$gl-gray-light: #5c5c5c;
|
||||||
|
|
|
@ -166,6 +166,6 @@
|
||||||
|
|
||||||
.cluster-status-indicator {
|
.cluster-status-indicator {
|
||||||
&.disabled {
|
&.disabled {
|
||||||
background-color: $gray-600;
|
background-color: $gray-400;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
th {
|
th {
|
||||||
@include gl-bg-transparent;
|
@include gl-bg-transparent;
|
||||||
@include gl-font-weight-bold;
|
@include gl-font-weight-bold;
|
||||||
@include gl-text-gray-600;
|
@include gl-text-gray-400;
|
||||||
|
|
||||||
&[aria-sort='none']:hover {
|
&[aria-sort='none']:hover {
|
||||||
background-image: url('data:image/svg+xml, %3csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="4 0 8 16"%3e %3cpath style="fill: %23BABABA;" fill-rule="evenodd" d="M11.707085,11.7071 L7.999975,15.4142 L4.292875,11.7071 C3.902375,11.3166 3.902375, 10.6834 4.292875,10.2929 C4.683375,9.90237 5.316575,9.90237 5.707075,10.2929 L6.999975, 11.5858 L6.999975,2 C6.999975,1.44771 7.447695,1 7.999975,1 C8.552255,1 8.999975,1.44771 8.999975,2 L8.999975,11.5858 L10.292865,10.2929 C10.683395 ,9.90237 11.316555,9.90237 11.707085,10.2929 C12.097605,10.6834 12.097605,11.3166 11.707085,11.7071 Z"/%3e %3c/svg%3e');
|
background-image: url('data:image/svg+xml, %3csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="4 0 8 16"%3e %3cpath style="fill: %23BABABA;" fill-rule="evenodd" d="M11.707085,11.7071 L7.999975,15.4142 L4.292875,11.7071 C3.902375,11.3166 3.902375, 10.6834 4.292875,10.2929 C4.683375,9.90237 5.316575,9.90237 5.707075,10.2929 L6.999975, 11.5858 L6.999975,2 C6.999975,1.44771 7.447695,1 7.999975,1 C8.552255,1 8.999975,1.44771 8.999975,2 L8.999975,11.5858 L10.292865,10.2929 C10.683395 ,9.90237 11.316555,9.90237 11.707085,10.2929 C12.097605,10.6834 12.097605,11.3166 11.707085,11.7071 Z"/%3e %3c/svg%3e');
|
||||||
|
|
|
@ -727,7 +727,7 @@ $note-form-margin-left: 72px;
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
color: $gray-600;
|
color: $gray-400;
|
||||||
|
|
||||||
@include notes-media('max', map-get($grid-breakpoints, sm) - 1) {
|
@include notes-media('max', map-get($grid-breakpoints, sm) - 1) {
|
||||||
float: none;
|
float: none;
|
||||||
|
|
|
@ -809,7 +809,7 @@
|
||||||
|
|
||||||
&.ci-status-icon-created,
|
&.ci-status-icon-created,
|
||||||
&.ci-status-icon-skipped {
|
&.ci-status-icon-skipped {
|
||||||
@include mini-pipeline-graph-color($white, $gray-100, $gray-200, $gray-300, $gray-600, $gray-700);
|
@include mini-pipeline-graph-color($white, $gray-100, $gray-200, $gray-300, $gray-400, $gray-700);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
|
|
||||||
.draggable-remove-link {
|
.draggable-remove-link {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
color: $gray-600;
|
color: $gray-400;
|
||||||
background-color: $white;
|
background-color: $white;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@
|
||||||
|
|
||||||
.prometheus-graph-cursor {
|
.prometheus-graph-cursor {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
background: $gray-600;
|
background: $gray-400;
|
||||||
width: 1px;
|
width: 1px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +290,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
> text {
|
> text {
|
||||||
fill: $gray-600;
|
fill: $gray-400;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
&.ci-preparing {
|
&.ci-preparing {
|
||||||
@include status-color($gray-100, $gray-300, $gray-600);
|
@include status-color($gray-100, $gray-300, $gray-400);
|
||||||
}
|
}
|
||||||
|
|
||||||
&.ci-pending,
|
&.ci-pending,
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
= link_to edit_admin_application_settings_integration_path(service.to_param), class: 'gl-text-blue-300!' do
|
= link_to edit_admin_application_settings_integration_path(service.to_param), class: 'gl-text-blue-300!' do
|
||||||
%strong.has-tooltip{ title: s_('AdminSettings|Moved to integrations'), data: { container: 'body' } }
|
%strong.has-tooltip{ title: s_('AdminSettings|Moved to integrations'), data: { container: 'body' } }
|
||||||
= service.title
|
= service.title
|
||||||
%td.gl-cursor-default.gl-text-gray-600
|
%td.gl-cursor-default.gl-text-gray-400
|
||||||
= service.description
|
= service.description
|
||||||
%td
|
%td
|
||||||
- else
|
- else
|
||||||
|
|
|
@ -27,5 +27,5 @@
|
||||||
Squash commits when merge request is accepted.
|
Squash commits when merge request is accepted.
|
||||||
= link_to icon('question-circle'), help_page_path('user/project/merge_requests/squash_and_merge'), target: '_blank'
|
= link_to icon('question-circle'), help_page_path('user/project/merge_requests/squash_and_merge'), target: '_blank'
|
||||||
- if project.squash_always?
|
- if project.squash_always?
|
||||||
.gl-text-gray-600
|
.gl-text-gray-400
|
||||||
= _('Required in this project.')
|
= _('Required in this project.')
|
||||||
|
|
5
changelogs/unreleased/rails-save-bang-9.yml
Normal file
5
changelogs/unreleased/rails-save-bang-9.yml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: Refactor spec/workers/* to fix SaveBang Cop
|
||||||
|
merge_request: 38399
|
||||||
|
author: Rajendra Kadam
|
||||||
|
type: fixed
|
|
@ -42,7 +42,6 @@
|
||||||
- design_management
|
- design_management
|
||||||
- design_system
|
- design_system
|
||||||
- devops_reports
|
- devops_reports
|
||||||
- digital_experience_management
|
|
||||||
- disaster_recovery
|
- disaster_recovery
|
||||||
- dynamic_application_security_testing
|
- dynamic_application_security_testing
|
||||||
- editor_extension
|
- editor_extension
|
||||||
|
@ -72,7 +71,6 @@
|
||||||
- jupyter_notebooks
|
- jupyter_notebooks
|
||||||
- kanban_boards
|
- kanban_boards
|
||||||
- kubernetes_management
|
- kubernetes_management
|
||||||
- language_specific
|
|
||||||
- license_compliance
|
- license_compliance
|
||||||
- live_preview
|
- live_preview
|
||||||
- load_testing
|
- load_testing
|
||||||
|
|
|
@ -26,7 +26,6 @@ ActiveSupport::Inflector.inflections do |inflect|
|
||||||
project_statistics
|
project_statistics
|
||||||
system_note_metadata
|
system_note_metadata
|
||||||
vulnerabilities_feedback
|
vulnerabilities_feedback
|
||||||
vulnerability_export_registry
|
|
||||||
vulnerability_feedback
|
vulnerability_feedback
|
||||||
)
|
)
|
||||||
inflect.acronym 'EE'
|
inflect.acronym 'EE'
|
||||||
|
|
|
@ -55,7 +55,7 @@ making the software lifecycle faster and radically improving the speed of busine
|
||||||
|
|
||||||
GitLab provides solutions for [each of the stages of the DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/):
|
GitLab provides solutions for [each of the stages of the DevOps lifecycle](https://about.gitlab.com/stages-devops-lifecycle/):
|
||||||
|
|
||||||
![DevOps Stages](img/devops-stages.png)
|
![DevOps Stages](img/devops-stages-13_3.png)
|
||||||
|
|
||||||
GitLab is like a top-of-the-line kitchen for making software. As the executive
|
GitLab is like a top-of-the-line kitchen for making software. As the executive
|
||||||
chef, you decide what software you want to serve. Using your recipe, GitLab handles
|
chef, you decide what software you want to serve. Using your recipe, GitLab handles
|
||||||
|
@ -71,10 +71,11 @@ The following sections provide links to documentation for each DevOps stage:
|
||||||
| [Create](#create) | Source code, data creation, and management features. |
|
| [Create](#create) | Source code, data creation, and management features. |
|
||||||
| [Verify](#verify) | Testing, code quality, and continuous integration features. |
|
| [Verify](#verify) | Testing, code quality, and continuous integration features. |
|
||||||
| [Package](#package) | Docker container registry. |
|
| [Package](#package) | Docker container registry. |
|
||||||
|
| [Secure](#secure) | Security capability features. |
|
||||||
| [Release](#release) | Application release and delivery features. |
|
| [Release](#release) | Application release and delivery features. |
|
||||||
| [Configure](#configure) | Application and infrastructure configuration tools. |
|
| [Configure](#configure) | Application and infrastructure configuration tools. |
|
||||||
| [Monitor](#monitor) | Application monitoring and metrics features. |
|
| [Monitor](#monitor) | Application monitoring and metrics features. |
|
||||||
| [Secure](#secure) | Security capability features. |
|
| [Defend](#defend) | Protection against security intrusions. |
|
||||||
|
|
||||||
<div align="right">
|
<div align="right">
|
||||||
<a type="button" class="btn btn-default" href="#overview">
|
<a type="button" class="btn btn-default" href="#overview">
|
||||||
|
@ -274,6 +275,30 @@ The following documentation relates to the DevOps **Package** stage:
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
### Secure
|
||||||
|
|
||||||
|
Check your application for security vulnerabilities that may lead to unauthorized access, data
|
||||||
|
leaks, or denial of service. GitLab can perform static and dynamic tests on your application's code,
|
||||||
|
looking for known flaws and reporting them in the merge request. You can then fix flaws prior to
|
||||||
|
merge. Security teams can use dashboards to get a high-level view on projects and groups, and start
|
||||||
|
remediation processes when needed.
|
||||||
|
|
||||||
|
The following documentation relates to the DevOps **Secure** stage:
|
||||||
|
|
||||||
|
| Secure topics | Description |
|
||||||
|
|:------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|
|
||||||
|
| [Compliance Dashboard](user/compliance/compliance_dashboard/index.md) **(ULTIMATE)** | View the most recent Merge Request activity in a group. |
|
||||||
|
| [Container Scanning](user/application_security/container_scanning/index.md) **(ULTIMATE)** | Use Clair to scan Docker images for known vulnerabilities. |
|
||||||
|
| [Dependency List](user/application_security/dependency_list/index.md) **(ULTIMATE)** | View your project's dependencies and their known vulnerabilities. |
|
||||||
|
| [Dependency Scanning](user/application_security/dependency_scanning/index.md) **(ULTIMATE)** | Analyze your dependencies for known vulnerabilities. |
|
||||||
|
| [Dynamic Application Security Testing (DAST)](user/application_security/dast/index.md) **(ULTIMATE)** | Analyze running web applications for known vulnerabilities. |
|
||||||
|
| [Group Security Dashboard](user/application_security/security_dashboard/index.md#group-security-dashboard) **(ULTIMATE)** | View vulnerabilities in all the projects in a group and its subgroups. |
|
||||||
|
| [Instance Security Dashboard](user/application_security/security_dashboard/index.md#instance-security-dashboard) **(ULTIMATE)** | View vulnerabilities in all the projects you're interested in. |
|
||||||
|
| [License Compliance](user/compliance/license_compliance/index.md) **(ULTIMATE)** | Search your project's dependencies for their licenses. |
|
||||||
|
| [Pipeline Security](user/application_security/security_dashboard/index.md#pipeline-security) **(ULTIMATE)** | View the security reports for your project's pipelines. |
|
||||||
|
| [Project Security Dashboard](user/application_security/security_dashboard/index.md#project-security-dashboard) **(ULTIMATE)** | View the latest security reports for your project. |
|
||||||
|
| [Static Application Security Testing (SAST)](user/application_security/sast/index.md) **(ULTIMATE)** | Analyze source code for known vulnerabilities. |
|
||||||
|
|
||||||
### Release
|
### Release
|
||||||
|
|
||||||
Spend less time configuring your tools, and more time creating. Whether you’re
|
Spend less time configuring your tools, and more time creating. Whether you’re
|
||||||
|
@ -352,29 +377,21 @@ The following documentation relates to the DevOps **Monitor** stage:
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
### Secure
|
### Defend
|
||||||
|
|
||||||
Check your application for security vulnerabilities that may lead to unauthorized access,
|
GitLab Defend enables organizations to proactively protect cloud-native environments by providing
|
||||||
data leaks, and denial of services. GitLab will perform static and dynamic tests on the
|
context-aware technologies to reduce overall security risk. Defend is a natural extension of your
|
||||||
code of your application, looking for known flaws and report them in the merge request
|
existing operation's practices and provides security visibility across the entire DevSecOps
|
||||||
so you can fix them before merging. Security teams can use dashboards to get a
|
lifecycle. This empowers your organization to apply DevSecOps best practices from the first line of
|
||||||
high-level view on projects and groups, and start remediation processes when needed.
|
code through monitoring and protecting your applications deployed into production.
|
||||||
|
|
||||||
The following documentation relates to the DevOps **Secure** stage:
|
The following documentation relates to the DevOps **Defend** stage:
|
||||||
|
|
||||||
| Secure topics | Description |
|
| Defend topics | Description |
|
||||||
|:------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|
|
|:------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------|
|
||||||
| [Compliance Dashboard](user/compliance/compliance_dashboard/index.md) **(ULTIMATE)** | View the most recent Merge Request activity in a group. |
|
| [Web Application Firewall with ModSecurity](user/compliance/compliance_dashboard/index.md) **(ULTIMATE)** | Filter, monitor, and block HTTP traffic to and from a web application. |
|
||||||
| [Container Scanning](user/application_security/container_scanning/index.md) **(ULTIMATE)** | Use Clair to scan Docker images for known vulnerabilities. |
|
| [Container Host Security](user/clusters/applications.md#install-falco-using-gitlab-cicd) | Detect and respond to security threats at the Kubernetes, network, and host level. |
|
||||||
| [Dependency List](user/application_security/dependency_list/index.md) **(ULTIMATE)** | View your project's dependencies and their known vulnerabilities. |
|
| [Container Network Security](user/clusters/applications.md#install-cilium-using-gitlab-cicd) | Detect and block unauthorized network traffic between pods and to/from the internet.|
|
||||||
| [Dependency Scanning](user/application_security/dependency_scanning/index.md) **(ULTIMATE)** | Analyze your dependencies for known vulnerabilities. |
|
|
||||||
| [Dynamic Application Security Testing (DAST)](user/application_security/dast/index.md) **(ULTIMATE)** | Analyze running web applications for known vulnerabilities. |
|
|
||||||
| [Group Security Dashboard](user/application_security/security_dashboard/index.md#group-security-dashboard) **(ULTIMATE)** | View vulnerabilities in all the projects in a group and its subgroups. |
|
|
||||||
| [Instance Security Dashboard](user/application_security/security_dashboard/index.md#instance-security-dashboard) **(ULTIMATE)** | View vulnerabilities in all the projects you're interested in. |
|
|
||||||
| [License Compliance](user/compliance/license_compliance/index.md) **(ULTIMATE)** | Search your project's dependencies for their licenses. |
|
|
||||||
| [Pipeline Security](user/application_security/security_dashboard/index.md#pipeline-security) **(ULTIMATE)** | View the security reports for your project's pipelines. |
|
|
||||||
| [Project Security Dashboard](user/application_security/security_dashboard/index.md#project-security-dashboard) **(ULTIMATE)** | View the latest security reports for your project. |
|
|
||||||
| [Static Application Security Testing (SAST)](user/application_security/sast/index.md) **(ULTIMATE)** | Analyze source code for known vulnerabilities. |
|
|
||||||
|
|
||||||
## New to Git and GitLab?
|
## New to Git and GitLab?
|
||||||
|
|
||||||
|
|
|
@ -1,45 +1,50 @@
|
||||||
---
|
---
|
||||||
reading_time: true
|
reading_time: true
|
||||||
|
stage: Enablement
|
||||||
|
group: Distribution
|
||||||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
|
||||||
---
|
---
|
||||||
|
|
||||||
# Reference architecture: up to 10,000 users
|
# Reference architecture: up to 10,000 users
|
||||||
|
|
||||||
This page describes GitLab reference architecture for up to 10,000 users.
|
This page describes GitLab reference architecture for up to 10,000 users. For a
|
||||||
For a full list of reference architectures, see
|
full list of reference architectures, see
|
||||||
[Available reference architectures](index.md#available-reference-architectures).
|
[Available reference architectures](index.md#available-reference-architectures).
|
||||||
|
|
||||||
> - **Supported users (approximate):** 10,000
|
> - **Supported users (approximate):** 10,000
|
||||||
> - **High Availability:** True
|
> - **High Availability:** Yes
|
||||||
> - **Test RPS rates:** API: 200 RPS, Web: 20 RPS, Git: 20 RPS
|
> - **Test requests per second (RPS) rates:** API: 200 RPS, Web: 20 RPS, Git: 20 RPS
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
||||||
|--------------------------------------------------------------|-------|---------------------------------|------------------|-----------------------|----------------|
|
|--------------------------------------------|-------------|-------------------------|-----------------|-------------|----------|
|
||||||
| External load balancing node | 1 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| External load balancing node | 1 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Consul | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Consul | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| PostgreSQL | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| PostgreSQL | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| PgBouncer | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| PgBouncer | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Internal load balancing node | 1 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Internal load balancing node | 1 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Redis - Cache | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Cache | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Gitaly | 2 minimum | 16 vCPU, 60GB Memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
|
| Gitaly | 2 (minimum) | 16 vCPU, 60GB memory | n1-standard-16 | m5.4xlarge | D16s v3 |
|
||||||
| Sidekiq | 4 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Sidekiq | 4 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| GitLab Rails | 3 | 32 vCPU, 28.8GB Memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
|
| GitLab Rails | 3 | 32 vCPU, 28.8GB memory | n1-highcpu-32 | c5.9xlarge | F32s v2 |
|
||||||
| Monitoring node | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Monitoring node | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
||||||
| NFS Server | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| NFS Server | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
|
|
||||||
The architectures were built and tested with the [Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
The Google Cloud Platform (GCP) architectures were built and tested using the
|
||||||
CPU platform on GCP. On different hardware you may find that adjustments, either lower
|
[Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
||||||
or higher, are required for your CPU or Node counts accordingly. For more information, a
|
CPU platform. On different hardware you may find that adjustments, either lower
|
||||||
[Sysbench](https://github.com/akopytov/sysbench) benchmark of the CPU can be found
|
or higher, are required for your CPU or node counts. For more information, see
|
||||||
[here](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
our [Sysbench](https://github.com/akopytov/sysbench)-based
|
||||||
|
[CPU benchmark](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
||||||
|
|
||||||
For data objects such as LFS, Uploads, Artifacts, etc., an [object storage service](#configure-the-object-storage)
|
For data objects (such as LFS, Uploads, or Artifacts), an
|
||||||
is recommended over NFS where possible, due to better performance and availability.
|
[object storage service](#configure-the-object-storage) is recommended instead
|
||||||
Since this doesn't require a node to be set up, it's marked as not applicable (n/a)
|
of NFS where possible, due to better performance and availability. Since this
|
||||||
in the table above.
|
doesn't require a node to be set up, *Object Storage* is noted as not
|
||||||
|
applicable (n/a) in the previous table.
|
||||||
|
|
||||||
## Setup components
|
## Setup components
|
||||||
|
|
||||||
|
|
|
@ -1,45 +1,50 @@
|
||||||
---
|
---
|
||||||
reading_time: true
|
reading_time: true
|
||||||
|
stage: Enablement
|
||||||
|
group: Distribution
|
||||||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
|
||||||
---
|
---
|
||||||
|
|
||||||
# Reference architecture: up to 25,000 users
|
# Reference architecture: up to 25,000 users
|
||||||
|
|
||||||
This page describes GitLab reference architecture for up to 25,000 users.
|
This page describes GitLab reference architecture for up to 25,000 users. For a
|
||||||
For a full list of reference architectures, see
|
full list of reference architectures, see
|
||||||
[Available reference architectures](index.md#available-reference-architectures).
|
[Available reference architectures](index.md#available-reference-architectures).
|
||||||
|
|
||||||
> - **Supported users (approximate):** 25,000
|
> - **Supported users (approximate):** 25,000
|
||||||
> - **High Availability:** True
|
> - **High Availability:** Yes
|
||||||
> - **Test RPS rates:** API: 500 RPS, Web: 50 RPS, Git: 50 RPS
|
> - **Test requests per second (RPS) rates:** API: 500 RPS, Web: 50 RPS, Git: 50 RPS
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
||||||
|--------------------------------------------------------------|-------|---------------------------------|------------------|-----------------------|----------------|
|
|-----------------------------------------|-------------|-------------------------|-----------------|-------------|----------|
|
||||||
| External load balancing node | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| External load balancing node | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
| Consul | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Consul | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| PostgreSQL | 3 | 8 vCPU, 30GB Memory | `n1-standard-8` | `m5.2xlarge` | `D8s v3` |
|
| PostgreSQL | 3 | 8 vCPU, 30GB memory | n1-standard-8 | m5.2xlarge | D8s v3 |
|
||||||
| PgBouncer | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| PgBouncer | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Internal load balancing node | 1 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Internal load balancing node | 1 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Redis - Cache | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Cache | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Gitaly | 2 minimum | 32 vCPU, 120GB Memory | `n1-standard-32` | `m5.8xlarge` | `D32s v3` |
|
| Gitaly | 2 (minimum) | 32 vCPU, 120GB memory | n1-standard-32 | m5.8xlarge | D32s v3 |
|
||||||
| Sidekiq | 4 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Sidekiq | 4 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| GitLab Rails | 5 | 32 vCPU, 28.8GB Memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
|
| GitLab Rails | 5 | 32 vCPU, 28.8GB memory | n1-highcpu-32 | c5.9xlarge | F32s v2 |
|
||||||
| Monitoring node | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Monitoring node | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
||||||
| NFS Server | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| NFS Server | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
|
|
||||||
The architectures were built and tested with the [Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
The Google Cloud Platform (GCP) architectures were built and tested using the
|
||||||
CPU platform on GCP. On different hardware you may find that adjustments, either lower
|
[Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
||||||
or higher, are required for your CPU or Node counts accordingly. For more information, a
|
CPU platform. On different hardware you may find that adjustments, either lower
|
||||||
[Sysbench](https://github.com/akopytov/sysbench) benchmark of the CPU can be found
|
or higher, are required for your CPU or node counts. For more information, see
|
||||||
[here](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
our [Sysbench](https://github.com/akopytov/sysbench)-based
|
||||||
|
[CPU benchmark](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
||||||
|
|
||||||
For data objects such as LFS, Uploads, Artifacts, etc., an [object storage service](#configure-the-object-storage)
|
For data objects (such as LFS, Uploads, or Artifacts), an
|
||||||
is recommended over NFS where possible, due to better performance and availability.
|
[object storage service](#configure-the-object-storage) is recommended instead
|
||||||
Since this doesn't require a node to be set up, it's marked as not applicable (n/a)
|
of NFS where possible, due to better performance and availability. Since this
|
||||||
in the table above.
|
doesn't require a node to be set up, *Object Storage* is noted as not
|
||||||
|
applicable (n/a) in the previous table.
|
||||||
|
|
||||||
## Setup components
|
## Setup components
|
||||||
|
|
||||||
|
|
|
@ -1,45 +1,50 @@
|
||||||
---
|
---
|
||||||
reading_time: true
|
reading_time: true
|
||||||
|
stage: Enablement
|
||||||
|
group: Distribution
|
||||||
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#designated-technical-writers
|
||||||
---
|
---
|
||||||
|
|
||||||
# Reference architecture: up to 50,000 users
|
# Reference architecture: up to 50,000 users
|
||||||
|
|
||||||
This page describes GitLab reference architecture for up to 50,000 users.
|
This page describes GitLab reference architecture for up to 50,000 users. For a
|
||||||
For a full list of reference architectures, see
|
full list of reference architectures, see
|
||||||
[Available reference architectures](index.md#available-reference-architectures).
|
[Available reference architectures](index.md#available-reference-architectures).
|
||||||
|
|
||||||
> - **Supported users (approximate):** 50,000
|
> - **Supported users (approximate):** 50,000
|
||||||
> - **High Availability:** True
|
> - **High Availability:** Yes
|
||||||
> - **Test RPS rates:** API: 1000 RPS, Web: 100 RPS, Git: 100 RPS
|
> - **Test requests per second (RPS) rates:** API: 1000 RPS, Web: 100 RPS, Git: 100 RPS
|
||||||
|
|
||||||
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
| Service | Nodes | Configuration | GCP | AWS | Azure |
|
||||||
|--------------------------------------------------------------|-------|---------------------------------|------------------|-----------------------|----------------|
|
|-----------------------------------------|-------------|-------------------------|-----------------|--------------|----------|
|
||||||
| External load balancing node | 1 | 8 vCPU, 7.2GB Memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
|
| External load balancing node | 1 | 8 vCPU, 7.2GB memory | n1-highcpu-8 | c5.2xlarge | F8s v2 |
|
||||||
| Consul | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| Consul | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| PostgreSQL | 3 | 16 vCPU, 60GB Memory | `n1-standard-16` | `m5.4xlarge` | `D16s v3` |
|
| PostgreSQL | 3 | 16 vCPU, 60GB memory | n1-standard-16 | m5.4xlarge | D16s v3 |
|
||||||
| PgBouncer | 3 | 2 vCPU, 1.8GB Memory | `n1-highcpu-2` | `c5.large` | `F2s v2` |
|
| PgBouncer | 3 | 2 vCPU, 1.8GB memory | n1-highcpu-2 | c5.large | F2s v2 |
|
||||||
| Internal load balancing node | 1 | 8 vCPU, 7.2GB Memory | `n1-highcpu-8` | `c5.2xlarge` | `F8s v2` |
|
| Internal load balancing node | 1 | 8 vCPU, 7.2GB memory | n1-highcpu-8 | c5.2xlarge | F8s v2 |
|
||||||
| Redis - Cache | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Cache | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Redis - Queues / Shared State | 3 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Cache | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB Memory | `g1-small` | `t2.small` | `B1MS` |
|
| Redis Sentinel - Queues / Shared State | 3 | 1 vCPU, 1.7GB memory | g1-small | t2.small | B1MS |
|
||||||
| Gitaly | 2 minimum | 64 vCPU, 240GB Memory | `n1-standard-64` | `m5.16xlarge` | `D64s v3` |
|
| Gitaly | 2 (minimum) | 64 vCPU, 240GB memory | n1-standard-64 | m5.16xlarge | D64s v3 |
|
||||||
| Sidekiq | 4 | 4 vCPU, 15GB Memory | `n1-standard-4` | `m5.xlarge` | `D4s v3` |
|
| Sidekiq | 4 | 4 vCPU, 15GB memory | n1-standard-4 | m5.xlarge | D4s v3 |
|
||||||
| GitLab Rails | 12 | 32 vCPU, 28.8GB Memory | `n1-highcpu-32` | `c5.9xlarge` | `F32s v2` |
|
| GitLab Rails | 12 | 32 vCPU, 28.8GB memory | n1-highcpu-32 | c5.9xlarge | F32s v2 |
|
||||||
| Monitoring node | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| Monitoring node | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
| Object Storage | n/a | n/a | n/a | n/a | n/a |
|
||||||
| NFS Server | 1 | 4 vCPU, 3.6GB Memory | `n1-highcpu-4` | `c5.xlarge` | `F4s v2` |
|
| NFS Server | 1 | 4 vCPU, 3.6GB memory | n1-highcpu-4 | c5.xlarge | F4s v2 |
|
||||||
|
|
||||||
The architectures were built and tested with the [Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
The Google Cloud Platform (GCP) architectures were built and tested using the
|
||||||
CPU platform on GCP. On different hardware you may find that adjustments, either lower
|
[Intel Xeon E5 v3 (Haswell)](https://cloud.google.com/compute/docs/cpu-platforms)
|
||||||
or higher, are required for your CPU or Node counts accordingly. For more information, a
|
CPU platform. On different hardware you may find that adjustments, either lower
|
||||||
[Sysbench](https://github.com/akopytov/sysbench) benchmark of the CPU can be found
|
or higher, are required for your CPU or node counts. For more information, see
|
||||||
[here](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
our [Sysbench](https://github.com/akopytov/sysbench)-based
|
||||||
|
[CPU benchmark](https://gitlab.com/gitlab-org/quality/performance/-/wikis/Reference-Architectures/GCP-CPU-Benchmarks).
|
||||||
|
|
||||||
For data objects such as LFS, Uploads, Artifacts, etc., an [object storage service](#configure-the-object-storage)
|
For data objects (such as LFS, Uploads, or Artifacts), an
|
||||||
is recommended over NFS where possible, due to better performance and availability.
|
[object storage service](#configure-the-object-storage) is recommended instead
|
||||||
Since this doesn't require a node to be set up, it's marked as not applicable (n/a)
|
of NFS where possible, due to better performance and availability. Since this
|
||||||
in the table above.
|
doesn't require a node to be set up, *Object Storage* is noted as not
|
||||||
|
applicable (n/a) in the previous table.
|
||||||
|
|
||||||
## Setup components
|
## Setup components
|
||||||
|
|
||||||
|
|
BIN
doc/img/devops-stages-13_3.png
Normal file
BIN
doc/img/devops-stages-13_3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
Binary file not shown.
Before Width: | Height: | Size: 10 KiB |
|
@ -140,6 +140,14 @@ Enables the feature for lists of users created [in the Feature Flags UI](#create
|
||||||
Similar to [User IDs](#user-ids), it uses the Unleash [`userWithId`](https://unleash.github.io/docs/activation_strategy#userwithid)
|
Similar to [User IDs](#user-ids), it uses the Unleash [`userWithId`](https://unleash.github.io/docs/activation_strategy#userwithid)
|
||||||
activation strategy.
|
activation strategy.
|
||||||
|
|
||||||
|
It's not possible to *disable* a feature for members of a user list, but you can achieve the same
|
||||||
|
effect by enabling a feature for a user list that doesn't contain the excluded users.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `Full-user-list` = `User1A, User1B, User2A, User2B, User3A, User3B, ...`
|
||||||
|
- `Full-user-list-excluding-B-users` = `User1A, User2A, User3A, ...`
|
||||||
|
|
||||||
#### Create a user list
|
#### Create a user list
|
||||||
|
|
||||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13308) in GitLab 13.3.
|
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/13308) in GitLab 13.3.
|
||||||
|
|
|
@ -608,8 +608,11 @@ Alternatively, you can use the variable `SECURE_ANALYZERS_PREFIX` to override th
|
||||||
> - It's able to be enabled or disabled per-project.
|
> - It's able to be enabled or disabled per-project.
|
||||||
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-on-demand-scans).
|
> - To use it in GitLab self-managed instances, ask a GitLab administrator to [enable it](#enable-or-disable-on-demand-scans).
|
||||||
|
|
||||||
Passive DAST scans may be run on demand against a target website, outside the DevOps lifecycle. These scans will
|
Passive DAST scans may be run on demand against a target website, outside the DevOps lifecycle. These scans are
|
||||||
always be associated with the default or `master` branch of your project and the results can be seen in the project dashboard.
|
always associated with the default or `master` branch of your project and the results can be seen in the project dashboard.
|
||||||
|
|
||||||
|
NOTE: **Note:**
|
||||||
|
You cannot run an on-demand DAST scan against a protected branch unless you have permission to do so. The `master` branch is protected by default. For more details, see [Pipeline security on protected branches](../../../ci/pipelines/index.md#pipeline-security-on-protected-branches).
|
||||||
|
|
||||||
![DAST On-Demand Scan](img/dast_on_demand_v13_2.png)
|
![DAST On-Demand Scan](img/dast_on_demand_v13_2.png)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# Design Management
|
# Design Management
|
||||||
|
|
||||||
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/660) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
|
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/660) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.2.
|
||||||
> - [Moved](https://gitlab.com/gitlab-org/gitlab/-/issues/212566) to GitLab Core in 13.0.
|
> - Support for SVGs was [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/12771) in [GitLab Premium](https://about.gitlab.com/pricing/) 12.4.
|
||||||
|
> - Design Management was [moved](https://gitlab.com/gitlab-org/gitlab/-/issues/212566) to GitLab Core in 13.0.
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
|
@ -41,10 +42,9 @@ If the requirements are not met, the **Designs** tab displays a message to the u
|
||||||
## Supported files
|
## Supported files
|
||||||
|
|
||||||
Files uploaded must have a file extension of either `png`, `jpg`, `jpeg`,
|
Files uploaded must have a file extension of either `png`, `jpg`, `jpeg`,
|
||||||
`gif`, `bmp`, `tiff` or `ico`.
|
`gif`, `bmp`, `tiff`, `ico`, or `svg`.
|
||||||
|
|
||||||
Support for [SVG files](https://gitlab.com/gitlab-org/gitlab/-/issues/12771)
|
Support for [PDF](https://gitlab.com/gitlab-org/gitlab/issues/32811) is planned for a future release.
|
||||||
and [PDFs](https://gitlab.com/gitlab-org/gitlab/-/issues/32811) is planned for a future release.
|
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
||||||
|
|
|
@ -22,20 +22,20 @@ visit the [administrator documentation](../../integration/elasticsearch.md).
|
||||||
|
|
||||||
The Advanced Global Search in GitLab is a powerful search service that saves
|
The Advanced Global Search in GitLab is a powerful search service that saves
|
||||||
you time. Instead of creating duplicate code and wasting time, you can
|
you time. Instead of creating duplicate code and wasting time, you can
|
||||||
now search for code within other teams that can help your own project.
|
now search for code within other projects that can help your own project.
|
||||||
|
|
||||||
GitLab leverages the search capabilities of [Elasticsearch](https://www.elastic.co/elasticsearch/) and enables it when
|
GitLab leverages the search capabilities of [Elasticsearch](https://www.elastic.co/elasticsearch/) and enables it when
|
||||||
searching in:
|
searching in:
|
||||||
|
|
||||||
- Projects
|
- Projects
|
||||||
- Repositories
|
|
||||||
- Commits
|
|
||||||
- Issues
|
- Issues
|
||||||
- Merge requests
|
- Merge requests
|
||||||
- Milestones
|
- Milestones
|
||||||
- Notes (comments)
|
- Comments
|
||||||
- Snippets
|
- Code
|
||||||
|
- Commits
|
||||||
- Wiki
|
- Wiki
|
||||||
|
- Users
|
||||||
|
|
||||||
## Use cases
|
## Use cases
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ exports[`Design management design index page renders design index 1`] = `
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
href="full-issue-url"
|
href="full-issue-url"
|
||||||
>
|
>
|
||||||
ull-issue-path
|
ull-issue-path
|
||||||
|
@ -188,7 +188,7 @@ exports[`Design management design index page with error GlAlert is rendered in c
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
href="full-issue-url"
|
href="full-issue-url"
|
||||||
>
|
>
|
||||||
ull-issue-path
|
ull-issue-path
|
||||||
|
|
|
@ -55,7 +55,7 @@ describe('Error message', () => {
|
||||||
'Upload skipped. Some of the designs you tried uploading did not change: 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, and 2 more.',
|
'Upload skipped. Some of the designs you tried uploading did not change: 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, and 2 more.',
|
||||||
],
|
],
|
||||||
])('designUploadSkippedWarning', (uploadedFiles, skippedFiles, expected) => {
|
])('designUploadSkippedWarning', (uploadedFiles, skippedFiles, expected) => {
|
||||||
test('returns expected warning message', () => {
|
it('returns expected warning message', () => {
|
||||||
expect(designUploadSkippedWarning(uploadedFiles, skippedFiles)).toBe(expected);
|
expect(designUploadSkippedWarning(uploadedFiles, skippedFiles)).toBe(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -41,7 +41,7 @@ exports[`Design management design index page renders design index 1`] = `
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
href="full-issue-url"
|
href="full-issue-url"
|
||||||
>
|
>
|
||||||
ull-issue-path
|
ull-issue-path
|
||||||
|
@ -188,7 +188,7 @@ exports[`Design management design index page with error GlAlert is rendered in c
|
||||||
</h2>
|
</h2>
|
||||||
|
|
||||||
<a
|
<a
|
||||||
class="gl-text-gray-600 gl-text-decoration-none gl-mb-6 gl-display-block"
|
class="gl-text-gray-400 gl-text-decoration-none gl-mb-6 gl-display-block"
|
||||||
href="full-issue-url"
|
href="full-issue-url"
|
||||||
>
|
>
|
||||||
ull-issue-path
|
ull-issue-path
|
||||||
|
|
|
@ -9,7 +9,7 @@ describe('tokenization for .vue files', () => {
|
||||||
registerLanguages(vue);
|
registerLanguages(vue);
|
||||||
});
|
});
|
||||||
|
|
||||||
test.each([
|
it.each([
|
||||||
[
|
[
|
||||||
'<div v-if="something">content</div>',
|
'<div v-if="something">content</div>',
|
||||||
[
|
[
|
||||||
|
|
|
@ -436,7 +436,7 @@ describe('Dashboard header', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test.each(systemDashboards)('is rendered for system dashboards', dashboardPath => {
|
it.each(systemDashboards)('is rendered for system dashboards', dashboardPath => {
|
||||||
setupAllDashboards(store, dashboardPath);
|
setupAllDashboards(store, dashboardPath);
|
||||||
|
|
||||||
return wrapper.vm.$nextTick(() => {
|
return wrapper.vm.$nextTick(() => {
|
||||||
|
@ -444,7 +444,7 @@ describe('Dashboard header', () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
test.each(nonSystemDashboards)('is not rendered for non-system dashboards', dashboardPath => {
|
it.each(nonSystemDashboards)('is not rendered for non-system dashboards', dashboardPath => {
|
||||||
setupAllDashboards(store, dashboardPath);
|
setupAllDashboards(store, dashboardPath);
|
||||||
|
|
||||||
return wrapper.vm.$nextTick(() => {
|
return wrapper.vm.$nextTick(() => {
|
||||||
|
|
|
@ -24,7 +24,7 @@ describe('GroupEmptyState', () => {
|
||||||
'FOO STATE', // does not fail with unknown states
|
'FOO STATE', // does not fail with unknown states
|
||||||
];
|
];
|
||||||
|
|
||||||
test.each(supportedStates)('Renders an empty state for %s', selectedState => {
|
it.each(supportedStates)('Renders an empty state for %s', selectedState => {
|
||||||
const wrapper = createComponent({ selectedState });
|
const wrapper = createComponent({ selectedState });
|
||||||
|
|
||||||
expect(wrapper.element).toMatchSnapshot();
|
expect(wrapper.element).toMatchSnapshot();
|
||||||
|
|
|
@ -79,7 +79,7 @@ describe('Squash before merge component', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it(expectation, () => {
|
it(expectation, () => {
|
||||||
expect(findLabel().classes('gl-text-gray-600')).toBe(isDisabled);
|
expect(findLabel().classes('gl-text-gray-400')).toBe(isDisabled);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -10,7 +10,7 @@ RSpec.describe Gitlab::Import::StuckProjectImportJobsWorker do
|
||||||
let(:import_state) { create(:project, :import_scheduled).import_state }
|
let(:import_state) { create(:project, :import_scheduled).import_state }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -20,7 +20,7 @@ RSpec.describe Gitlab::Import::StuckProjectImportJobsWorker do
|
||||||
let(:import_state) { create(:project, :import_started).import_state }
|
let(:import_state) { create(:project, :import_started).import_state }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,7 +12,7 @@ RSpec.describe ::Gitlab::JiraImport::StuckJiraImportJobsWorker do
|
||||||
let(:import_state) { create(:jira_import_state, :scheduled, project: project) }
|
let(:import_state) { create(:jira_import_state, :scheduled, project: project) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -22,7 +22,7 @@ RSpec.describe ::Gitlab::JiraImport::StuckJiraImportJobsWorker do
|
||||||
let(:import_state) { create(:jira_import_state, :started, project: project) }
|
let(:import_state) { create(:jira_import_state, :started, project: project) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -17,7 +17,7 @@ RSpec.describe MigrateExternalDiffsWorker do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does nothing if the diff is missing' do
|
it 'does nothing if the diff is missing' do
|
||||||
diff.destroy
|
diff.destroy!
|
||||||
|
|
||||||
worker.perform(diff.id)
|
worker.perform(diff.id)
|
||||||
end
|
end
|
||||||
|
|
|
@ -60,7 +60,7 @@ RSpec.describe NamespacelessProjectDestroyWorker do
|
||||||
let!(:parent_project) { create(:project) }
|
let!(:parent_project) { create(:project) }
|
||||||
let(:project) do
|
let(:project) do
|
||||||
namespaceless_project = fork_project(parent_project)
|
namespaceless_project = fork_project(parent_project)
|
||||||
namespaceless_project.save
|
namespaceless_project.save!
|
||||||
namespaceless_project
|
namespaceless_project
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ RSpec.describe Namespaces::RootStatisticsWorker, '#perform' do
|
||||||
|
|
||||||
context 'with no namespace' do
|
context 'with no namespace' do
|
||||||
before do
|
before do
|
||||||
group.destroy
|
group.destroy!
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not execute the refresher service' do
|
it 'does not execute the refresher service' do
|
||||||
|
@ -64,7 +64,7 @@ RSpec.describe Namespaces::RootStatisticsWorker, '#perform' do
|
||||||
|
|
||||||
context 'with a namespace with no aggregation scheduled' do
|
context 'with a namespace with no aggregation scheduled' do
|
||||||
before do
|
before do
|
||||||
group.aggregation_schedule.destroy
|
group.aggregation_schedule.destroy!
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not execute the refresher service' do
|
it 'does not execute the refresher service' do
|
||||||
|
|
|
@ -16,7 +16,7 @@ RSpec.describe PagesDomainVerificationWorker do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does nothing for a non-existent domain' do
|
it 'does nothing for a non-existent domain' do
|
||||||
domain.destroy
|
domain.destroy!
|
||||||
|
|
||||||
expect(VerifyPagesDomainService).not_to receive(:new)
|
expect(VerifyPagesDomainService).not_to receive(:new)
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ RSpec.describe ProcessCommitWorker do
|
||||||
|
|
||||||
context 'when issue has first_mentioned_in_commit_at earlier than given committed_date' do
|
context 'when issue has first_mentioned_in_commit_at earlier than given committed_date' do
|
||||||
before do
|
before do
|
||||||
issue.metrics.update(first_mentioned_in_commit_at: commit.committed_date - 1.day)
|
issue.metrics.update!(first_mentioned_in_commit_at: commit.committed_date - 1.day)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't update issue metrics" do
|
it "doesn't update issue metrics" do
|
||||||
|
@ -170,7 +170,7 @@ RSpec.describe ProcessCommitWorker do
|
||||||
|
|
||||||
context 'when issue has first_mentioned_in_commit_at later than given committed_date' do
|
context 'when issue has first_mentioned_in_commit_at later than given committed_date' do
|
||||||
before do
|
before do
|
||||||
issue.metrics.update(first_mentioned_in_commit_at: commit.committed_date + 1.day)
|
issue.metrics.update!(first_mentioned_in_commit_at: commit.committed_date + 1.day)
|
||||||
end
|
end
|
||||||
|
|
||||||
it "doesn't update issue metrics" do
|
it "doesn't update issue metrics" do
|
||||||
|
|
|
@ -5,7 +5,7 @@ require 'spec_helper'
|
||||||
RSpec.describe PropagateIntegrationWorker do
|
RSpec.describe PropagateIntegrationWorker do
|
||||||
describe '#perform' do
|
describe '#perform' do
|
||||||
let(:integration) do
|
let(:integration) do
|
||||||
PushoverService.create(
|
PushoverService.create!(
|
||||||
template: true,
|
template: true,
|
||||||
active: true,
|
active: true,
|
||||||
device: 'MyDevice',
|
device: 'MyDevice',
|
||||||
|
|
|
@ -7,7 +7,7 @@ RSpec.describe PropagateServiceTemplateWorker do
|
||||||
|
|
||||||
describe '#perform' do
|
describe '#perform' do
|
||||||
it 'calls the propagate service with the template' do
|
it 'calls the propagate service with the template' do
|
||||||
template = PushoverService.create(
|
template = PushoverService.create!(
|
||||||
template: true,
|
template: true,
|
||||||
active: true,
|
active: true,
|
||||||
properties: {
|
properties: {
|
||||||
|
|
|
@ -46,7 +46,7 @@ RSpec.describe RemoveUnreferencedLfsObjectsWorker do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'removes unreferenced lfs objects after project removal' do
|
it 'removes unreferenced lfs objects after project removal' do
|
||||||
project1.destroy
|
project1.destroy!
|
||||||
|
|
||||||
worker.perform
|
worker.perform
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ RSpec.describe RepositoryCheck::SingleRepositoryWorker do
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_push_event(project)
|
def create_push_event(project)
|
||||||
project.events.create(action: :pushed, author_id: create(:user).id)
|
project.events.create!(action: :pushed, author_id: create(:user).id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def break_wiki(project)
|
def break_wiki(project)
|
||||||
|
|
|
@ -25,13 +25,13 @@ RSpec.describe RepositoryCleanupWorker do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error if the project cannot be found' do
|
it 'raises an error if the project cannot be found' do
|
||||||
project.destroy
|
project.destroy!
|
||||||
|
|
||||||
expect { worker.perform(project.id, user.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { worker.perform(project.id, user.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'raises an error if the user cannot be found' do
|
it 'raises an error if the user cannot be found' do
|
||||||
user.destroy
|
user.destroy!
|
||||||
|
|
||||||
expect { worker.perform(project.id, user.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
expect { worker.perform(project.id, user.id) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||||
end
|
end
|
||||||
|
|
|
@ -49,7 +49,7 @@ RSpec.describe RepositoryImportWorker do
|
||||||
it 'hide the credentials that were used in the import URL' do
|
it 'hide the credentials that were used in the import URL' do
|
||||||
error = %q{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
|
error = %q{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
|
||||||
|
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
expect_next_instance_of(Projects::ImportService) do |instance|
|
expect_next_instance_of(Projects::ImportService) do |instance|
|
||||||
expect(instance).to receive(:execute).and_return({ status: :error, message: error })
|
expect(instance).to receive(:execute).and_return({ status: :error, message: error })
|
||||||
end
|
end
|
||||||
|
@ -63,8 +63,8 @@ RSpec.describe RepositoryImportWorker do
|
||||||
it 'updates the error on Import/Export' do
|
it 'updates the error on Import/Export' do
|
||||||
error = %q{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
|
error = %q{remote: Not Found fatal: repository 'https://user:pass@test.com/root/repoC.git/' not found }
|
||||||
|
|
||||||
project.update(import_type: 'gitlab_project')
|
project.update!(import_type: 'gitlab_project')
|
||||||
import_state.update(jid: '123')
|
import_state.update!(jid: '123')
|
||||||
expect_next_instance_of(Projects::ImportService) do |instance|
|
expect_next_instance_of(Projects::ImportService) do |instance|
|
||||||
expect(instance).to receive(:execute).and_return({ status: :error, message: error })
|
expect(instance).to receive(:execute).and_return({ status: :error, message: error })
|
||||||
end
|
end
|
||||||
|
|
|
@ -26,7 +26,7 @@ RSpec.describe RepositoryUpdateRemoteMirrorWorker, :clean_gitlab_redis_shared_st
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not do anything if the mirror was already updated' do
|
it 'does not do anything if the mirror was already updated' do
|
||||||
remote_mirror.update(last_update_started_at: Time.current, update_status: :finished)
|
remote_mirror.update!(last_update_started_at: Time.current, update_status: :finished)
|
||||||
|
|
||||||
expect(Projects::UpdateRemoteMirrorService).not_to receive(:new)
|
expect(Projects::UpdateRemoteMirrorService).not_to receive(:new)
|
||||||
|
|
||||||
|
|
|
@ -132,7 +132,7 @@ RSpec.describe StuckCiJobsWorker do
|
||||||
let(:updated_at) { 2.days.ago }
|
let(:updated_at) { 2.days.ago }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
job.project.update(pending_delete: true)
|
job.project.update!(pending_delete: true)
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does drop job' do
|
it 'does drop job' do
|
||||||
|
|
|
@ -29,7 +29,7 @@ RSpec.describe UpdateHeadPipelineForMergeRequestWorker do
|
||||||
|
|
||||||
context 'when merge request sha does not equal pipeline sha' do
|
context 'when merge request sha does not equal pipeline sha' do
|
||||||
before do
|
before do
|
||||||
merge_request.merge_request_diff.update(head_commit_sha: Digest::SHA1.hexdigest(SecureRandom.hex))
|
merge_request.merge_request_diff.update!(head_commit_sha: Digest::SHA1.hexdigest(SecureRandom.hex))
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'does not update head pipeline' do
|
it 'does not update head pipeline' do
|
||||||
|
|
Loading…
Reference in a new issue