Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2020-08-03 18:10:05 +00:00
parent 31979cb323
commit 0851c83c27
59 changed files with 233 additions and 205 deletions

View file

@ -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'

View file

@ -1 +1 @@
13.3.0-rc3 a6091637dcb4c3b601a8860b5f164c0ce90ba0ca

View file

@ -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
> >

View file

@ -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
> >

View file

@ -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
> >

View file

@ -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">{{

View file

@ -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>

View file

@ -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>

View file

@ -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"
> >

View file

@ -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">

View file

@ -509,7 +509,7 @@ img.emoji {
} }
&.is-dragging { &.is-dragging {
background-color: $gray-600; background-color: $gray-400;
} }
} }

View file

@ -209,7 +209,7 @@
} }
.doc-versions { .doc-versions {
color: $gray-600; color: $gray-400;
&:hover { &:hover {
color: $gray-900; color: $gray-900;

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -166,6 +166,6 @@
.cluster-status-indicator { .cluster-status-indicator {
&.disabled { &.disabled {
background-color: $gray-600; background-color: $gray-400;
} }
} }

View file

@ -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');

View file

@ -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;

View file

@ -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);
} }
} }

View file

@ -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;
} }
} }

View file

@ -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,

View file

@ -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

View file

@ -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.')

View file

@ -0,0 +1,5 @@
---
title: Refactor spec/workers/* to fix SaveBang Cop
merge_request: 38399
author: Rajendra Kadam
type: fixed

View file

@ -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

View file

@ -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'

View file

@ -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 youre Spend less time configuring your tools, and more time creating. Whether youre
@ -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?

View file

@ -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

View file

@ -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

View file

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

View file

@ -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.

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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);
}); });
}); });

View file

@ -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

View file

@ -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>',
[ [

View file

@ -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(() => {

View file

@ -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();

View file

@ -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);
}); });
}); });
}); });

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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',

View file

@ -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: {

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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