Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
e04b8c1e60
commit
431b84710e
|
|
@ -1564,7 +1564,6 @@ RSpec/ContextWording:
|
|||
- 'spec/lib/api/entities/application_setting_spec.rb'
|
||||
- 'spec/lib/api/entities/basic_project_details_spec.rb'
|
||||
- 'spec/lib/api/entities/clusters/agent_authorization_spec.rb'
|
||||
- 'spec/lib/api/entities/merge_request_basic_spec.rb'
|
||||
- 'spec/lib/api/entities/nuget/dependency_group_spec.rb'
|
||||
- 'spec/lib/api/entities/user_spec.rb'
|
||||
- 'spec/lib/api/every_api_endpoint_spec.rb'
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
15.8.0
|
||||
15.9.0-rc1
|
||||
|
|
|
|||
|
|
@ -323,6 +323,7 @@ export default {
|
|||
>
|
||||
<deployment
|
||||
:deployment="upcomingDeployment"
|
||||
:visible="visible"
|
||||
:class="{ 'gl-ml-7': inFolder }"
|
||||
class="gl-pl-4"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
import { s__ } from '~/locale';
|
||||
|
||||
export const DEFAULT_ITEM_LENGTH = 10;
|
||||
export const MAX_ITEM_LENGTH = 100;
|
||||
|
||||
const header = s__('GlobalSearch|Language');
|
||||
|
||||
const scopes = {
|
||||
BLOBS: 'blobs',
|
||||
};
|
||||
|
||||
const filterParam = 'language';
|
||||
|
||||
export const languageFilterData = {
|
||||
header,
|
||||
scopes,
|
||||
filterParam,
|
||||
};
|
||||
|
|
@ -6,7 +6,13 @@ import { logError } from '~/lib/logger';
|
|||
import { __ } from '~/locale';
|
||||
import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY, SIDEBAR_PARAMS } from './constants';
|
||||
import * as types from './mutation_types';
|
||||
import { loadDataFromLS, setFrequentItemToLS, mergeById, isSidebarDirty } from './utils';
|
||||
import {
|
||||
loadDataFromLS,
|
||||
setFrequentItemToLS,
|
||||
mergeById,
|
||||
isSidebarDirty,
|
||||
getAggregationsUrl,
|
||||
} from './utils';
|
||||
|
||||
export const fetchGroups = ({ commit }, search) => {
|
||||
commit(types.REQUEST_GROUPS);
|
||||
|
|
@ -95,7 +101,7 @@ export const setQuery = ({ state, commit }, { key, value }) => {
|
|||
};
|
||||
|
||||
export const applyQuery = ({ state }) => {
|
||||
visitUrl(setUrlParams({ ...state.query, page: null }));
|
||||
visitUrl(setUrlParams({ ...state.query, page: null }, window.location.href, false, true));
|
||||
};
|
||||
|
||||
export const resetQuery = ({ state }) => {
|
||||
|
|
@ -117,3 +123,16 @@ export const fetchSidebarCount = ({ commit, state }) => {
|
|||
});
|
||||
return Promise.all(promises);
|
||||
};
|
||||
|
||||
export const fetchLanguageAggregation = ({ commit }) => {
|
||||
commit(types.REQUEST_AGGREGATIONS);
|
||||
return axios
|
||||
.get(getAggregationsUrl())
|
||||
.then(({ data }) => {
|
||||
commit(types.RECEIVE_AGGREGATIONS_SUCCESS, data);
|
||||
})
|
||||
.catch((e) => {
|
||||
logError(e);
|
||||
commit(types.RECEIVE_AGGREGATIONS_ERROR);
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { stateFilterData } from '~/search/sidebar/constants/state_filter_data';
|
||||
import { confidentialFilterData } from '~/search/sidebar/constants/confidential_filter_data';
|
||||
import { languageFilterData } from '~/search/sidebar/constants/language_filter_data';
|
||||
|
||||
export const MAX_FREQUENT_ITEMS = 5;
|
||||
|
||||
|
|
@ -9,6 +10,10 @@ export const GROUPS_LOCAL_STORAGE_KEY = 'global-search-frequent-groups';
|
|||
|
||||
export const PROJECTS_LOCAL_STORAGE_KEY = 'global-search-frequent-projects';
|
||||
|
||||
export const SIDEBAR_PARAMS = [stateFilterData.filterParam, confidentialFilterData.filterParam];
|
||||
export const SIDEBAR_PARAMS = [
|
||||
stateFilterData.filterParam,
|
||||
confidentialFilterData.filterParam,
|
||||
languageFilterData.filterParam,
|
||||
];
|
||||
|
||||
export const NUMBER_FORMATING_OPTIONS = { notation: 'compact', compactDisplay: 'short' };
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
import { languageFilterData } from '~/search/sidebar/constants/language_filter_data';
|
||||
import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY } from './constants';
|
||||
|
||||
export const frequentGroups = (state) => {
|
||||
|
|
@ -7,3 +8,11 @@ export const frequentGroups = (state) => {
|
|||
export const frequentProjects = (state) => {
|
||||
return state.frequentItems[PROJECTS_LOCAL_STORAGE_KEY];
|
||||
};
|
||||
|
||||
export const langugageAggregationBuckets = (state) => {
|
||||
return (
|
||||
state.aggregations.data.find(
|
||||
(aggregation) => aggregation.name === languageFilterData.filterParam,
|
||||
)?.buckets || []
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,3 +11,7 @@ export const SET_SIDEBAR_DIRTY = 'SET_SIDEBAR_DIRTY';
|
|||
|
||||
export const LOAD_FREQUENT_ITEMS = 'LOAD_FREQUENT_ITEMS';
|
||||
export const RECEIVE_NAVIGATION_COUNT = 'RECEIVE_NAVIGATION_COUNT';
|
||||
|
||||
export const REQUEST_AGGREGATIONS = 'REQUEST_AGGREGATIONS';
|
||||
export const RECEIVE_AGGREGATIONS_SUCCESS = 'RECEIVE_AGGREGATIONS_SUCCESS';
|
||||
export const RECEIVE_AGGREGATIONS_ERROR = 'RECEIVE_AGGREGATIONS_ERROR';
|
||||
|
|
|
|||
|
|
@ -36,4 +36,13 @@ export default {
|
|||
const item = { ...state.navigation[key], count };
|
||||
state.navigation = { ...state.navigation, [key]: item };
|
||||
},
|
||||
[types.REQUEST_AGGREGATIONS](state) {
|
||||
state.aggregations = { fetching: true, error: false, data: [] };
|
||||
},
|
||||
[types.RECEIVE_AGGREGATIONS_SUCCESS](state, data) {
|
||||
state.aggregations = { fetching: false, error: false, data: [...data] };
|
||||
},
|
||||
[types.RECEIVE_AGGREGATIONS_ERROR](state) {
|
||||
state.aggregations = { fetching: false, error: true, data: [] };
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -14,5 +14,11 @@ const createState = ({ query, navigation }) => ({
|
|||
},
|
||||
sidebarDirty: false,
|
||||
navigation,
|
||||
aggregations: {
|
||||
error: false,
|
||||
fetching: false,
|
||||
data: [],
|
||||
},
|
||||
});
|
||||
|
||||
export default createState;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ export default {
|
|||
</gl-intersection-observer>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isLoggedIn" class="gl-display-flex gl-justify-content-end">
|
||||
<div v-if="isLoggedIn" class="gl-display-flex gl-justify-content-end gl-p-5">
|
||||
<form v-if="permissions.canDecline" method="post" :action="paths.decline">
|
||||
<gl-button type="submit">{{ $options.i18n.decline }}</gl-button>
|
||||
<input :value="$options.csrf.token" type="hidden" name="authenticity_token" />
|
||||
|
|
|
|||
|
|
@ -8,7 +8,11 @@
|
|||
}
|
||||
|
||||
.terms-fade {
|
||||
background: linear-gradient(0deg, $white 0%, rgba($white, 0.5) 100%);
|
||||
background: linear-gradient(rgba($white, 0), $white);
|
||||
|
||||
.gl-dark & {
|
||||
background: linear-gradient(rgba($gray-900, 0), $gray-900);
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
|
|
|
|||
|
|
@ -163,6 +163,7 @@ module VerifiesWithEmail
|
|||
end
|
||||
|
||||
def require_email_verification_enabled?(user)
|
||||
Feature.enabled?(:require_email_verification, user)
|
||||
Feature.enabled?(:require_email_verification, user) &&
|
||||
Feature.disabled?(:skip_require_email_verification, user, type: :ops)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -65,9 +65,9 @@ module Types
|
|||
field :tags,
|
||||
[Types::DeploymentTagType],
|
||||
description: 'Git tags that contain this deployment. ' \
|
||||
'This field can only be resolved for one deployment in any single request.',
|
||||
'This field can only be resolved for two deployments in any single request.',
|
||||
calls_gitaly: true do
|
||||
extension ::Gitlab::Graphql::Limit::FieldCallCount, limit: 1
|
||||
extension ::Gitlab::Graphql::Limit::FieldCallCount, limit: 2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -213,9 +213,9 @@ module Types
|
|||
field :security_auto_fix, GraphQL::Types::Boolean, null: true,
|
||||
description: 'Indicates if the merge request is created by @GitLab-Security-Bot.'
|
||||
field :squash, GraphQL::Types::Boolean, null: false,
|
||||
description: 'Indicates if squash on merge is enabled.'
|
||||
description: 'Indicates if the merge request is set to be squashed when merged. [Project settings](https://docs.gitlab.com/ee/user/project/merge_requests/squash_and_merge.html#configure-squash-options-for-a-project) may override this value. Use `squash_on_merge` instead to take project squash options into account.'
|
||||
field :squash_on_merge, GraphQL::Types::Boolean, null: false, method: :squash_on_merge?,
|
||||
description: 'Indicates if squash on merge is enabled.'
|
||||
description: 'Indicates if the merge request will be squashed when merged.'
|
||||
field :timelogs, Types::TimelogType.connection_type, null: false,
|
||||
description: 'Timelogs on the merge request.'
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,10 @@ module RegistrationsHelper
|
|||
qa_selector: 'new_user_username_field'
|
||||
}
|
||||
end
|
||||
|
||||
def arkose_labs_challenge_enabled?
|
||||
false
|
||||
end
|
||||
end
|
||||
|
||||
RegistrationsHelper.prepend_mod_with('RegistrationsHelper')
|
||||
|
|
|
|||
|
|
@ -45,8 +45,9 @@ module RequireEmailVerification
|
|||
private
|
||||
|
||||
def override_devise_lockable?
|
||||
strong_memoize(:override_devise_lockable) do
|
||||
Feature.enabled?(:require_email_verification, self) && !two_factor_enabled?
|
||||
end
|
||||
Feature.enabled?(:require_email_verification, self) &&
|
||||
!two_factor_enabled? &&
|
||||
Feature.disabled?(:skip_require_email_verification, self, type: :ops)
|
||||
end
|
||||
strong_memoize_attr :override_devise_lockable?
|
||||
end
|
||||
|
|
|
|||
|
|
@ -72,7 +72,9 @@ class Todo < ApplicationRecord
|
|||
scope :for_type, -> (type) { where(target_type: type) }
|
||||
scope :for_target, -> (id) { where(target_id: id) }
|
||||
scope :for_commit, -> (id) { where(commit_id: id) }
|
||||
scope :with_entity_associations, -> { preload(:target, :author, :note, group: :route, project: [:route, { namespace: [:route, :owner] }]) }
|
||||
scope :with_entity_associations, -> do
|
||||
preload(:target, :author, :note, group: :route, project: [:route, { namespace: [:route, :owner] }, :project_setting])
|
||||
end
|
||||
scope :joins_issue_and_assignees, -> { left_joins(issue: :assignees) }
|
||||
scope :for_internal_notes, -> { joins(:note).where(note: { confidential: true }) }
|
||||
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
= render_if_exists 'devise/shared/phone_verification', form: f
|
||||
%div
|
||||
|
||||
- if Feature.enabled?(:arkose_labs_signup_challenge)
|
||||
- if arkose_labs_challenge_enabled?
|
||||
= render_if_exists 'devise/registrations/arkose_labs'
|
||||
- elsif show_recaptcha_sign_up?
|
||||
= recaptcha_tags nonce: content_security_policy_nonce
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: use_primary_and_secondary_stores_for_rate_limiting
|
||||
introduced_by_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106123"
|
||||
rollout_issue_url: "https://gitlab.com/gitlab-org/gitlab/-/issues/385681"
|
||||
milestone: '15.9'
|
||||
type: development
|
||||
group: group::scalability
|
||||
default_enabled: false
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: use_primary_store_as_default_for_rate_limiting
|
||||
introduced_by_url: "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106123"
|
||||
rollout_issue_url: "https://gitlab.com/gitlab-org/gitlab/-/issues/385681"
|
||||
milestone: '15.9'
|
||||
type: development
|
||||
group: group::scalability
|
||||
default_enabled: false
|
||||
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: arkose_labs_signup_challenge
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/95560
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/370932
|
||||
milestone: '15.4'
|
||||
type: development
|
||||
name: skip_require_email_verification
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/110010
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/389235
|
||||
milestone: '15.9'
|
||||
type: ops
|
||||
group: group::anti-abuse
|
||||
default_enabled: false
|
||||
|
|
@ -1216,6 +1216,9 @@ NOTE:
|
|||
Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management. Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/index.md#before-deploying-gitaly-cluster).
|
||||
For implementations with sharded Gitaly, use the same Gitaly specs. Follow the [separate Gitaly documentation](../gitaly/configure_gitaly.md) instead of this section.
|
||||
|
||||
NOTE:
|
||||
For guidance on how to migrate existing repositories from NFS to Gitaly Cluster, [follow the main documentation](../gitaly/index.md#migrate-to-gitaly-cluster).
|
||||
|
||||
NOTE:
|
||||
Gitaly has been designed and tested with repositories of varying sizes that follow best practices.
|
||||
However, large repositories or monorepos not following these practices can significantly
|
||||
|
|
@ -1756,7 +1759,10 @@ To configure Praefect with TLS:
|
|||
|
||||
Sidekiq requires connection to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
- `10.6.0.101`: Sidekiq 1
|
||||
|
|
@ -1925,7 +1931,13 @@ run [multiple Sidekiq processes](../sidekiq/extra_sidekiq_processes.md).
|
|||
## Configure GitLab Rails
|
||||
|
||||
This section describes how to configure the GitLab application (Rails) component.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
|
||||
Rails requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
The following IPs will be used as an example:
|
||||
|
|
@ -2065,6 +2077,10 @@ On each node perform the following:
|
|||
|
||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from the first Omnibus node you configured and add or replace
|
||||
the file of the same name on this server. If this is the first Omnibus node you are configuring then you can skip this step.
|
||||
1. Copy the SSH host keys (all in the name format `/etc/ssh/ssh_host_*_key*`) from the first Omnibus node you configured and
|
||||
add or replace the files of the same name on this server. This ensures host mismatch errors aren't thrown
|
||||
for your users as they hit the load balanced Rails nodes. If this is the first Omnibus node you are configuring,
|
||||
then you can skip this step.
|
||||
1. To ensure database migrations are only run during reconfigure and not automatically on upgrade, run:
|
||||
|
||||
```shell
|
||||
|
|
@ -2200,16 +2216,10 @@ To configure the Monitoring node:
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -1236,6 +1236,9 @@ NOTE:
|
|||
Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management. Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/index.md#before-deploying-gitaly-cluster).
|
||||
For implementations with sharded Gitaly, use the same Gitaly specs. Follow the [separate Gitaly documentation](../gitaly/configure_gitaly.md) instead of this section.
|
||||
|
||||
NOTE:
|
||||
For guidance on how to migrate existing repositories from NFS to Gitaly Cluster, [follow the main documentation](../gitaly/index.md#migrate-to-gitaly-cluster).
|
||||
|
||||
NOTE:
|
||||
Gitaly has been designed and tested with repositories of varying sizes that follow best practices.
|
||||
However, large repositories or monorepos not following these practices can significantly
|
||||
|
|
@ -1774,7 +1777,10 @@ To configure Praefect with TLS:
|
|||
|
||||
Sidekiq requires connection to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
- `10.6.0.101`: Sidekiq 1
|
||||
|
|
@ -1943,7 +1949,13 @@ run [multiple Sidekiq processes](../sidekiq/extra_sidekiq_processes.md).
|
|||
## Configure GitLab Rails
|
||||
|
||||
This section describes how to configure the GitLab application (Rails) component.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
|
||||
Rails requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
The following IPs will be used as an example:
|
||||
|
|
@ -2085,6 +2097,10 @@ On each node perform the following:
|
|||
|
||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from the first Omnibus node you configured and add or replace
|
||||
the file of the same name on this server. If this is the first Omnibus node you are configuring then you can skip this step.
|
||||
1. Copy the SSH host keys (all in the name format `/etc/ssh/ssh_host_*_key*`) from the first Omnibus node you configured and
|
||||
add or replace the files of the same name on this server. This ensures host mismatch errors aren't thrown
|
||||
for your users as they hit the load balanced Rails nodes. If this is the first Omnibus node you are configuring,
|
||||
then you can skip this step.
|
||||
1. To ensure database migrations are only run during reconfigure and not automatically on upgrade, run:
|
||||
|
||||
```shell
|
||||
|
|
@ -2219,16 +2235,10 @@ To configure the Monitoring node:
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -924,17 +924,10 @@ running [Prometheus](../monitoring/prometheus/index.md) and
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- [Azure Blob storage](https://learn.microsoft.com/en-us/azure/storage/blobs/storage-blobs-introduction)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -1171,6 +1171,9 @@ NOTE:
|
|||
Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management. Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/index.md#before-deploying-gitaly-cluster).
|
||||
For implementations with sharded Gitaly, use the same Gitaly specs. Follow the [separate Gitaly documentation](../gitaly/configure_gitaly.md) instead of this section.
|
||||
|
||||
NOTE:
|
||||
For guidance on how to migrate existing repositories from NFS to Gitaly Cluster, [follow the main documentation](../gitaly/index.md#migrate-to-gitaly-cluster).
|
||||
|
||||
NOTE:
|
||||
Gitaly has been designed and tested with repositories of varying sizes that follow best practices.
|
||||
However, large repositories or monorepos not following these practices can significantly
|
||||
|
|
@ -1708,7 +1711,10 @@ To configure Praefect with TLS:
|
|||
|
||||
Sidekiq requires connection to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
The following IPs will be used as an example:
|
||||
|
|
@ -1876,7 +1882,13 @@ run [multiple Sidekiq processes](../sidekiq/extra_sidekiq_processes.md).
|
|||
## Configure GitLab Rails
|
||||
|
||||
This section describes how to configure the GitLab application (Rails) component.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
|
||||
Rails requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
On each node perform the following:
|
||||
|
|
@ -2016,6 +2028,10 @@ On each node perform the following:
|
|||
|
||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from the first Omnibus node you configured and add or replace
|
||||
the file of the same name on this server. If this is the first Omnibus node you are configuring then you can skip this step.
|
||||
1. Copy the SSH host keys (all in the name format `/etc/ssh/ssh_host_*_key*`) from the first Omnibus node you configured and
|
||||
add or replace the files of the same name on this server. This ensures host mismatch errors aren't thrown
|
||||
for your users as they hit the load balanced Rails nodes. If this is the first Omnibus node you are configuring,
|
||||
then you can skip this step.
|
||||
1. To ensure database migrations are only run during reconfigure and not automatically on upgrade, run:
|
||||
|
||||
```shell
|
||||
|
|
@ -2165,16 +2181,10 @@ running [Prometheus](../monitoring/prometheus/index.md) and
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -1229,6 +1229,9 @@ NOTE:
|
|||
Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management. Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/index.md#before-deploying-gitaly-cluster).
|
||||
For implementations with sharded Gitaly, use the same Gitaly specs. Follow the [separate Gitaly documentation](../gitaly/configure_gitaly.md) instead of this section.
|
||||
|
||||
NOTE:
|
||||
For guidance on how to migrate existing repositories from NFS to Gitaly Cluster, [follow the main documentation](../gitaly/index.md#migrate-to-gitaly-cluster).
|
||||
|
||||
NOTE:
|
||||
Gitaly has been designed and tested with repositories of varying sizes that follow best practices.
|
||||
However, large repositories or monorepos not following these practices can significantly
|
||||
|
|
@ -1769,7 +1772,10 @@ To configure Praefect with TLS:
|
|||
|
||||
Sidekiq requires connection to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
- `10.6.0.101`: Sidekiq 1
|
||||
|
|
@ -1938,7 +1944,13 @@ run [multiple Sidekiq processes](../sidekiq/extra_sidekiq_processes.md).
|
|||
## Configure GitLab Rails
|
||||
|
||||
This section describes how to configure the GitLab application (Rails) component.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
|
||||
Rails requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
The following IPs will be used as an example:
|
||||
|
|
@ -2221,16 +2233,10 @@ To configure the Monitoring node:
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -1167,6 +1167,9 @@ NOTE:
|
|||
Gitaly Cluster provides the benefits of fault tolerance, but comes with additional complexity of setup and management. Review the existing [technical limitations and considerations before deploying Gitaly Cluster](../gitaly/index.md#before-deploying-gitaly-cluster).
|
||||
For implementations with sharded Gitaly, use the same Gitaly specs. Follow the [separate Gitaly documentation](../gitaly/configure_gitaly.md) instead of this section.
|
||||
|
||||
NOTE:
|
||||
For guidance on how to migrate existing repositories from NFS to Gitaly Cluster, [follow the main documentation](../gitaly/index.md#migrate-to-gitaly-cluster).
|
||||
|
||||
NOTE:
|
||||
Gitaly has been designed and tested with repositories of varying sizes that follow best practices.
|
||||
However, large repositories or monorepos not following these practices can significantly
|
||||
|
|
@ -1703,9 +1706,12 @@ To configure Praefect with TLS:
|
|||
|
||||
## Configure Sidekiq
|
||||
|
||||
Sidekiq requires connection to the [Redis](#configure-redis),
|
||||
Sidekiq requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
- `10.6.0.71`: Sidekiq 1
|
||||
|
|
@ -1872,7 +1878,13 @@ run [multiple Sidekiq processes](../sidekiq/extra_sidekiq_processes.md).
|
|||
## Configure GitLab Rails
|
||||
|
||||
This section describes how to configure the GitLab application (Rails) component.
|
||||
Because you must use [Object storage](#configure-the-object-storage) instead of NFS for data objects, the following
|
||||
|
||||
Rails requires connections to the [Redis](#configure-redis),
|
||||
[PostgreSQL](#configure-postgresql) and [Gitaly](#configure-gitaly) instances.
|
||||
It also requires a connection to [Object Storage](#configure-the-object-storage) as recommended.
|
||||
|
||||
NOTE:
|
||||
[Because it's recommended to use Object storage](../object_storage.md) instead of NFS for data objects, the following
|
||||
examples include the Object storage configuration.
|
||||
|
||||
On each node perform the following:
|
||||
|
|
@ -2015,6 +2027,10 @@ On each node perform the following:
|
|||
|
||||
1. Copy the `/etc/gitlab/gitlab-secrets.json` file from the first Omnibus node you configured and add or replace
|
||||
the file of the same name on this server. If this is the first Omnibus node you are configuring then you can skip this step.
|
||||
1. Copy the SSH host keys (all in the name format `/etc/ssh/ssh_host_*_key*`) from the first Omnibus node you configured and
|
||||
add or replace the files of the same name on this server. This ensures host mismatch errors aren't thrown
|
||||
for your users as they hit the load balanced Rails nodes. If this is the first Omnibus node you are configuring,
|
||||
then you can skip this step.
|
||||
1. To ensure database migrations are only run during reconfigure and not automatically on upgrade, run:
|
||||
|
||||
```shell
|
||||
|
|
@ -2164,16 +2180,10 @@ running [Prometheus](../monitoring/prometheus/index.md) and
|
|||
|
||||
## Configure the object storage
|
||||
|
||||
GitLab supports using an object storage service for holding numerous types of data.
|
||||
|
||||
GitLab has been tested on a number of object storage providers:
|
||||
|
||||
- [Amazon S3](https://aws.amazon.com/s3/)
|
||||
- [Google Cloud Storage](https://cloud.google.com/storage)
|
||||
- [Digital Ocean Spaces](https://www.digitalocean.com/products/spaces)
|
||||
- [Oracle Cloud Infrastructure](https://docs.oracle.com/en-us/iaas/Content/Object/Tasks/s3compatibleapi.htm)
|
||||
- [OpenStack Swift (S3 compatibility mode)](https://docs.openstack.org/swift/latest/s3_compat.html)
|
||||
- MinIO. We have [a guide to deploying this](https://docs.gitlab.com/charts/advanced/external-object-storage/minio.html) within our Helm Chart documentation.
|
||||
GitLab supports using an [object storage](../object_storage.md) service for holding numerous types of data.
|
||||
It's recommended over [NFS](../nfs.md) for data objects and in general it's better
|
||||
in larger setups as object storage is typically much more performant, reliable,
|
||||
and scalable.
|
||||
|
||||
There are two ways of specifying object storage configuration in GitLab:
|
||||
|
||||
|
|
|
|||
|
|
@ -12266,7 +12266,7 @@ The deployment of an environment.
|
|||
| <a id="deploymentsha"></a>`sha` | [`String`](#string) | Git-SHA that the deployment ran on. |
|
||||
| <a id="deploymentstatus"></a>`status` | [`DeploymentStatus`](#deploymentstatus) | Status of the deployment. |
|
||||
| <a id="deploymenttag"></a>`tag` | [`Boolean`](#boolean) | True or false if the deployment ran on a Git-tag. |
|
||||
| <a id="deploymenttags"></a>`tags` | [`[DeploymentTag!]`](#deploymenttag) | Git tags that contain this deployment. This field can only be resolved for one deployment in any single request. |
|
||||
| <a id="deploymenttags"></a>`tags` | [`[DeploymentTag!]`](#deploymenttag) | Git tags that contain this deployment. This field can only be resolved for two deployments in any single request. |
|
||||
| <a id="deploymenttriggerer"></a>`triggerer` | [`UserCore`](#usercore) | User who executed the deployment. |
|
||||
| <a id="deploymentupdatedat"></a>`updatedAt` | [`Time`](#time) | When the deployment record was updated. |
|
||||
| <a id="deploymentuserpermissions"></a>`userPermissions` | [`DeploymentPermissions!`](#deploymentpermissions) | Permissions for the current user on the resource. |
|
||||
|
|
@ -15326,8 +15326,8 @@ Defines which user roles, users, or groups can merge into a protected branch.
|
|||
| <a id="mergerequestsourcebranchprotected"></a>`sourceBranchProtected` | [`Boolean!`](#boolean) | Indicates if the source branch is protected. |
|
||||
| <a id="mergerequestsourceproject"></a>`sourceProject` | [`Project`](#project) | Source project of the merge request. |
|
||||
| <a id="mergerequestsourceprojectid"></a>`sourceProjectId` | [`Int`](#int) | ID of the merge request source project. |
|
||||
| <a id="mergerequestsquash"></a>`squash` | [`Boolean!`](#boolean) | Indicates if squash on merge is enabled. |
|
||||
| <a id="mergerequestsquashonmerge"></a>`squashOnMerge` | [`Boolean!`](#boolean) | Indicates if squash on merge is enabled. |
|
||||
| <a id="mergerequestsquash"></a>`squash` | [`Boolean!`](#boolean) | Indicates if the merge request is set to be squashed when merged. [Project settings](https://docs.gitlab.com/ee/user/project/merge_requests/squash_and_merge.html#configure-squash-options-for-a-project) may override this value. Use `squash_on_merge` instead to take project squash options into account. |
|
||||
| <a id="mergerequestsquashonmerge"></a>`squashOnMerge` | [`Boolean!`](#boolean) | Indicates if the merge request will be squashed when merged. |
|
||||
| <a id="mergerequeststate"></a>`state` | [`MergeRequestState!`](#mergerequeststate) | State of the merge request. |
|
||||
| <a id="mergerequestsubscribed"></a>`subscribed` | [`Boolean!`](#boolean) | Indicates if the currently logged in user is subscribed to this merge request. |
|
||||
| <a id="mergerequestsuggestedreviewers"></a>`suggestedReviewers` **{warning-solid}** | [`SuggestedReviewersType`](#suggestedreviewerstype) | **Introduced** in 15.4. This feature is in Alpha. It can be changed or removed at any time. Suggested reviewers for merge request. Returns `null` if `suggested_reviewers` feature flag is disabled. This flag is disabled by default and only available on GitLab.com because the feature is experimental and is subject to change without notice. |
|
||||
|
|
|
|||
|
|
@ -1284,7 +1284,8 @@ POST /projects/:id/merge_requests
|
|||
| `milestone_id` | integer | **{dotted-circle}** No | The global ID of a milestone. |
|
||||
| `remove_source_branch` | boolean | **{dotted-circle}** No | Flag indicating if a merge request should remove the source branch when merging. |
|
||||
| `reviewer_ids` | integer array | **{dotted-circle}** No | The ID of the users added as a reviewer to the merge request. If set to `0` or left empty, no reviewers are added. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49341) in GitLab 13.8. |
|
||||
| `squash` | boolean | **{dotted-circle}** No | Squash commits into a single commit when merging. |
|
||||
| `squash` | boolean | no | Indicates if the merge request is set to be squashed when merged. [Project settings](../user/project/merge_requests/squash_and_merge.md#configure-squash-options-for-a-project) may override this value. Use `squash_on_merge` instead to take project squash options into account. |
|
||||
| `squash_on_merge` | boolean | no | Indicates if the merge request will be squashed when merged. |
|
||||
| `target_project_id` | integer | **{dotted-circle}** No | Numeric ID of the target project. |
|
||||
|
||||
If `approvals_before_merge` is not provided, it inherits the value from the target project. If provided, the following conditions must hold for it to take effect:
|
||||
|
|
@ -1453,7 +1454,8 @@ PUT /projects/:id/merge_requests/:merge_request_iid
|
|||
| `remove_labels` | string | **{dotted-circle}** No | Comma-separated label names to remove from a merge request. |
|
||||
| `remove_source_branch` | boolean | **{dotted-circle}** No | Flag indicating if a merge request should remove the source branch when merging. |
|
||||
| `reviewer_ids` | integer array | **{dotted-circle}** No | The ID of the users set as a reviewer to the merge request. Set the value to `0` or provide an empty value to unset all reviewers. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/49341) in GitLab 13.8. |
|
||||
| `squash` | boolean | **{dotted-circle}** No | Squash commits into a single commit when merging. |
|
||||
| `squash` | boolean | no | Indicates if the merge request is set to be squashed when merged. [Project settings](../user/project/merge_requests/squash_and_merge.md#configure-squash-options-for-a-project) may override this value. Use `squash_on_merge` instead to take project squash options into account. |
|
||||
| `squash_on_merge` | boolean | no | Indicates if the merge request will be squashed when merged. |
|
||||
| `state_event` | string | **{dotted-circle}** No | New state (close/reopen). |
|
||||
| `target_branch` | string | **{dotted-circle}** No | The target branch. |
|
||||
| `title` | string | **{dotted-circle}** No | Title of MR. |
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
# Preventing Transient Bugs
|
||||
|
||||
This page will cover architectural patterns and tips for developers to follow to prevent [transient bugs.](https://about.gitlab.com/handbook/engineering/quality/issue-triage/#transient-bugs)
|
||||
This page covers architectural patterns and tips for developers to follow to prevent [transient bugs.](https://about.gitlab.com/handbook/engineering/quality/issue-triage/#transient-bugs)
|
||||
|
||||
## Common root causes
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ We've noticed a few root causes that come up frequently when addressing transien
|
|||
|
||||
### Don't rely on response order
|
||||
|
||||
When working with multiple requests, it's easy to assume the order of the responses will match the order in which they are triggered.
|
||||
When working with multiple requests, it's easy to assume the order of the responses matches the order in which they are triggered.
|
||||
|
||||
That's not always the case and can cause bugs that only happen if the order is switched.
|
||||
|
||||
|
|
|
|||
|
|
@ -40,4 +40,4 @@ This dashboard displays CPU, memory, network and disk metrics for the pods in yo
|
|||
[variable selector](templating_variables.md#metric_label_values-variable-type)
|
||||
at the top of the dashboard to select which pod's metrics to display.
|
||||
|
||||

|
||||

|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ possible, we encourage you to use all of our security scanning tools:
|
|||
Turning this variable on can result in some duplicate findings, as we do not yet
|
||||
de-duplicate results between Container Scanning and Dependency Scanning. For more details,
|
||||
efforts to de-duplicate these findings can be tracked in
|
||||
[this issue](https://gitlab.com/gitlab-org/gitlab/-/issues/348655).
|
||||
[this epic](https://gitlab.com/groups/gitlab-org/-/epics/8026).
|
||||
|
||||
The following table summarizes which types of dependencies each scanning tool can detect:
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ To run IaC Scanning jobs, by default, you need GitLab Runner with the
|
|||
If you're using the shared runners on GitLab.com, this is enabled by default.
|
||||
|
||||
WARNING:
|
||||
Our IaC Scanning jobs require a Linux/amd64 container type. Windows containers are not supported.
|
||||
GitLab IaC Scanning analyzers don't support running on Windows or on any CPU architectures other than amd64.
|
||||
|
||||
WARNING:
|
||||
If you use your own runners, make sure the Docker version installed
|
||||
|
|
@ -269,3 +269,8 @@ be ineffective or false positives, and the findings are marked as `No longer det
|
|||
|
||||
- In GitLab 15.3, [secret detection in the KICS SAST IaC scanner was disabled](https://gitlab.com/gitlab-org/gitlab/-/issues/346181),
|
||||
so IaC findings in the "Passwords and Secrets" family show as `No longer detected`.
|
||||
|
||||
### `exec /bin/sh: exec format error` message in job log
|
||||
|
||||
The GitLab IaC Scanning analyzer [only supports](#requirements) running on the `amd64` CPU architecture.
|
||||
This message indicates that the job is being run on a different architecture, such as `arm`.
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ To run SAST jobs, by default, you need GitLab Runner with the
|
|||
If you're using the shared runners on GitLab.com, this is enabled by default.
|
||||
|
||||
WARNING:
|
||||
Our SAST jobs require a Linux/amd64 container type. Windows containers are not yet supported.
|
||||
GitLab SAST analyzers don't support running on Windows or on any CPU architectures other than amd64.
|
||||
|
||||
WARNING:
|
||||
If you use your own runners, make sure the Docker version installed
|
||||
|
|
@ -788,6 +788,11 @@ If you're seeing a new error that doesn't appear to be related to [the GitLab-ma
|
|||
|
||||
Each [analyzer project](analyzers.md#sast-analyzers) has a `CHANGELOG.md` file listing the changes made in each available version.
|
||||
|
||||
### `exec /bin/sh: exec format error` message in job log
|
||||
|
||||
GitLab SAST analyzers [only support](#requirements) running on the `amd64` CPU architecture.
|
||||
This message indicates that the job is being run on a different architecture, such as `arm`.
|
||||
|
||||
### `Error response from daemon: error processing tar file: docker-tar: relocation error`
|
||||
|
||||
This error occurs when the Docker version that runs the SAST job is `19.03.0`.
|
||||
|
|
|
|||
|
|
@ -69,13 +69,14 @@ Different features are available in different [GitLab tiers](https://about.gitla
|
|||
|
||||
Prerequisites:
|
||||
|
||||
- GitLab Runner with the [`docker`](https://docs.gitlab.com/runner/executors/docker.html) or
|
||||
- Linux-based GitLab Runner with the [`docker`](https://docs.gitlab.com/runner/executors/docker.html) or
|
||||
[`kubernetes`](https://docs.gitlab.com/runner/install/kubernetes.html) executor. If you're using the
|
||||
shared runners on GitLab.com, this is enabled by default.
|
||||
- Windows Runners are not supported.
|
||||
- CPU architectures other than amd64 are not supported.
|
||||
- If you use your own runners, make sure the Docker version installed is **not** `19.03.0`. See
|
||||
[troubleshooting information](../sast#error-response-from-daemon-error-processing-tar-file-docker-tar-relocation-error)
|
||||
for details.
|
||||
- Linux/amd64 container type. Windows containers are not supported.
|
||||
- GitLab CI/CD configuration (`.gitlab-ci.yml`) must include the `test` stage.
|
||||
|
||||
To enable Secret Detection, either:
|
||||
|
|
@ -531,3 +532,8 @@ repository's default branch is unrelated to the branch the job was triggered for
|
|||
To resolve the issue, make sure to correctly [set your default branch](../../project/repository/branches/default.md#change-the-default-branch-name-for-a-project)
|
||||
on your repository. You should set it to a branch that has related history with the branch you run
|
||||
the `secret-detection` job on.
|
||||
|
||||
### `exec /bin/sh: exec format error` message in job log
|
||||
|
||||
The GitLab Secret Detection analyzer [only supports](#enable-secret-detection) running on the `amd64` CPU architecture.
|
||||
This message indicates that the job is being run on a different architecture, such as `arm`.
|
||||
|
|
|
|||
|
|
@ -200,7 +200,7 @@ include: # Execute individual project's configuration (if project contains .git
|
|||
#### CF pipelines in Merge Requests originating in project forks
|
||||
|
||||
When an MR originates in a fork, the branch to be merged usually only exists in the fork.
|
||||
When creating such an MR against a project with CF pipelines, the above snippet will fail with a
|
||||
When creating such an MR against a project with CF pipelines, the above snippet fails with a
|
||||
`Project <project-name> reference <branch-name> does not exist!` error message.
|
||||
This is because in the context of the target project, `$CI_COMMIT_REF_NAME` evaluates to a non-existing branch name.
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ GitLab can also send events (for example, `issue created`) to Slack as notificat
|
|||
The [Slack notifications service](slack.md) is configured separately.
|
||||
|
||||
NOTE:
|
||||
For GitLab.com, use the [GitLab for Slack app](gitlab_slack_application.md) instead.
|
||||
The Slack slash commands are only configurable on self-managed GitLab instances. For GitLab.com, use the [GitLab for Slack app](gitlab_slack_application.md) instead.
|
||||
|
||||
## Configure GitLab and Slack
|
||||
|
||||
|
|
|
|||
|
|
@ -153,7 +153,8 @@ Rather than attempting to push all changes at once, this workaround:
|
|||
|
||||
You usually export a project through [the web interface](import_export.md#export-a-project-and-its-data) or through [the API](../../../api/project_import_export.md). Exporting using these
|
||||
methods can sometimes fail without giving enough information to troubleshoot. In these cases,
|
||||
[open a rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session)
|
||||
[open a rails console session](../../../administration/operations/rails_console.md#starting-a-rails-console-session) and loop through
|
||||
[all the defined exporters](https://gitlab.com/gitlab-org/gitlab/-/blob/master/app/services/projects/import_export/export_service.rb).
|
||||
Execute each line individually, rather than pasting the entire block at once, so you can see any
|
||||
errors each command returns.
|
||||
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ module API
|
|||
end
|
||||
|
||||
expose :squash
|
||||
expose :squash_on_merge?, as: :squash_on_merge
|
||||
expose :task_completion_status
|
||||
expose :cannot_be_merged?, as: :has_conflicts
|
||||
expose :mergeable_discussions_state?, as: :blocking_discussions_resolved
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ module Gitlab
|
|||
Gitlab::Redis::Queues,
|
||||
Gitlab::Redis::RateLimiting,
|
||||
Gitlab::Redis::RepositoryCache,
|
||||
Gitlab::Redis::ClusterRateLimiting,
|
||||
Gitlab::Redis::Sessions,
|
||||
Gitlab::Redis::SharedState,
|
||||
Gitlab::Redis::TraceChunks
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Gitlab
|
||||
module Redis
|
||||
class ClusterRateLimiting < ::Gitlab::Redis::Wrapper
|
||||
def self.config_fallback
|
||||
Cache
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -169,11 +169,15 @@ module Gitlab
|
|||
end
|
||||
|
||||
def use_primary_and_secondary_stores?
|
||||
feature_enabled?("use_primary_and_secondary_stores_for")
|
||||
Feature.feature_flags_available? &&
|
||||
Feature.enabled?("use_primary_and_secondary_stores_for_#{instance_name.underscore}") && # rubocop:disable Cop/FeatureFlagUsage
|
||||
!same_redis_store?
|
||||
end
|
||||
|
||||
def use_primary_store_as_default?
|
||||
feature_enabled?("use_primary_store_as_default_for")
|
||||
Feature.feature_flags_available? &&
|
||||
Feature.enabled?("use_primary_store_as_default_for_#{instance_name.underscore}") && # rubocop:disable Cop/FeatureFlagUsage
|
||||
!same_redis_store?
|
||||
end
|
||||
|
||||
def increment_pipelined_command_error_count(command_name)
|
||||
|
|
@ -213,20 +217,6 @@ module Gitlab
|
|||
|
||||
private
|
||||
|
||||
# @return [Boolean]
|
||||
def feature_enabled?(prefix)
|
||||
feature_table_exists? &&
|
||||
Feature.enabled?("#{prefix}_#{instance_name.underscore}") && # rubocop:disable Cop/FeatureFlagUsage
|
||||
!same_redis_store?
|
||||
end
|
||||
|
||||
# @return [Boolean]
|
||||
def feature_table_exists?
|
||||
Feature::FlipperFeature.table_exists?
|
||||
rescue StandardError
|
||||
false
|
||||
end
|
||||
|
||||
def default_store
|
||||
use_primary_store_as_default? ? primary_store : secondary_store
|
||||
end
|
||||
|
|
|
|||
|
|
@ -3,13 +3,24 @@
|
|||
module Gitlab
|
||||
module Redis
|
||||
class RateLimiting < ::Gitlab::Redis::Wrapper
|
||||
# The data we store on RateLimiting used to be stored on Cache.
|
||||
def self.config_fallback
|
||||
Cache
|
||||
end
|
||||
class << self
|
||||
# The data we store on RateLimiting used to be stored on Cache.
|
||||
def config_fallback
|
||||
Cache
|
||||
end
|
||||
|
||||
def self.cache_store
|
||||
@cache_store ||= ActiveSupport::Cache::RedisCacheStore.new(redis: pool, namespace: Cache::CACHE_NAMESPACE)
|
||||
def cache_store
|
||||
@cache_store ||= ActiveSupport::Cache::RedisCacheStore.new(redis: pool, namespace: Cache::CACHE_NAMESPACE)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def redis
|
||||
primary_store = ::Redis.new(::Gitlab::Redis::ClusterRateLimiting.params)
|
||||
secondary_store = ::Redis.new(params)
|
||||
|
||||
MultiStore.new(primary_store, secondary_store, name.demodulize)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ module Gitlab
|
|||
private
|
||||
|
||||
def trigger
|
||||
"#{params[:command]} [project name or alias]"
|
||||
params[:command].to_s
|
||||
end
|
||||
|
||||
def commands
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ module Gitlab
|
|||
MESSAGE
|
||||
end
|
||||
|
||||
if text.start_with?('help')
|
||||
if text && text.start_with?('help')
|
||||
<<~MESSAGE
|
||||
#{full_commands_message(trigger)}
|
||||
|
||||
|
|
@ -69,9 +69,9 @@ module Gitlab
|
|||
list = @commands
|
||||
.map do |command|
|
||||
if command < Gitlab::SlashCommands::IncidentManagement::IncidentCommand
|
||||
"#{@params[:command]} #{command.help_message}"
|
||||
else
|
||||
"#{trigger} #{command.help_message}"
|
||||
else
|
||||
"#{trigger} [project name or alias] #{command.help_message}"
|
||||
end
|
||||
end
|
||||
.join("\n")
|
||||
|
|
|
|||
|
|
@ -19092,6 +19092,9 @@ msgstr ""
|
|||
msgid "GlobalSearch|Issues assigned to me"
|
||||
msgstr ""
|
||||
|
||||
msgid "GlobalSearch|Language"
|
||||
msgstr ""
|
||||
|
||||
msgid "GlobalSearch|Merge requests I've created"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ gem 'capybara', '~> 3.38.0'
|
|||
gem 'capybara-screenshot', '~> 1.0.26'
|
||||
gem 'rake', '~> 13', '>= 13.0.6'
|
||||
gem 'rspec', '~> 3.12'
|
||||
gem 'selenium-webdriver', '~> 4.7', '>= 4.7.1'
|
||||
gem 'selenium-webdriver', '~> 4.8'
|
||||
gem 'airborne', '~> 0.3.7', require: false # airborne is messing with rspec sandboxed mode so not requiring by default
|
||||
gem 'rest-client', '~> 2.1.0'
|
||||
gem 'rspec-retry', '~> 0.6.2', require: 'rspec/retry'
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ GEM
|
|||
sawyer (0.9.2)
|
||||
addressable (>= 2.3.5)
|
||||
faraday (>= 0.17.3, < 3)
|
||||
selenium-webdriver (4.7.1)
|
||||
selenium-webdriver (4.8.0)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
rubyzip (>= 1.2.2, < 3.0)
|
||||
websocket (~> 1.0)
|
||||
|
|
@ -334,7 +334,7 @@ DEPENDENCIES
|
|||
rspec-retry (~> 0.6.2)
|
||||
rspec_junit_formatter (~> 0.6.0)
|
||||
ruby-debug-ide (~> 0.7.3)
|
||||
selenium-webdriver (~> 4.7, >= 4.7.1)
|
||||
selenium-webdriver (~> 4.8)
|
||||
slack-notifier (~> 2.4)
|
||||
terminal-table (~> 3.0.2)
|
||||
warning (~> 1.3)
|
||||
|
|
@ -342,4 +342,4 @@ DEPENDENCIES
|
|||
zeitwerk (~> 2.6, >= 2.6.6)
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.26
|
||||
2.4.4
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ RSpec.describe 'Email Verification On Login', :clean_gitlab_redis_rate_limiting,
|
|||
|
||||
before do
|
||||
stub_feature_flags(require_email_verification: require_email_verification_enabled)
|
||||
stub_feature_flags(skip_require_email_verification: false)
|
||||
end
|
||||
|
||||
shared_examples 'email verification required' do
|
||||
|
|
|
|||
|
|
@ -192,3 +192,433 @@ export const MOCK_NAVIGATION_ACTION_MUTATION = {
|
|||
type: types.RECEIVE_NAVIGATION_COUNT,
|
||||
payload: { key: 'projects', count: '13' },
|
||||
};
|
||||
|
||||
export const MOCK_AGGREGATIONS = [
|
||||
{
|
||||
name: 'language',
|
||||
buckets: [
|
||||
{ key: 'random-label-edumingos0', count: 1 },
|
||||
{ key: 'random-label-rbourgourd1', count: 2 },
|
||||
{ key: 'random-label-dfearnside2', count: 3 },
|
||||
{ key: 'random-label-gewins3', count: 4 },
|
||||
{ key: 'random-label-telverstone4', count: 5 },
|
||||
{ key: 'random-label-ygerriets5', count: 6 },
|
||||
{ key: 'random-label-lmoffet6', count: 7 },
|
||||
{ key: 'random-label-ehinnerk7', count: 8 },
|
||||
{ key: 'random-label-flanceley8', count: 9 },
|
||||
{ key: 'random-label-adoyle9', count: 10 },
|
||||
{ key: 'random-label-rmcgirla', count: 11 },
|
||||
{ key: 'random-label-dwhellansb', count: 12 },
|
||||
{ key: 'random-label-apitkethlyc', count: 13 },
|
||||
{ key: 'random-label-senevoldsend', count: 14 },
|
||||
{ key: 'random-label-tlardnare', count: 15 },
|
||||
{ key: 'random-label-fcoilsf', count: 16 },
|
||||
{ key: 'random-label-qgeckg', count: 17 },
|
||||
{ key: 'random-label-rgrabenh', count: 18 },
|
||||
{ key: 'random-label-lashardi', count: 19 },
|
||||
{ key: 'random-label-sadamovitchj', count: 20 },
|
||||
{ key: 'random-label-rlyddiardk', count: 21 },
|
||||
{ key: 'random-label-jpoell', count: 22 },
|
||||
{ key: 'random-label-kcharitym', count: 23 },
|
||||
{ key: 'random-label-cbertenshawn', count: 24 },
|
||||
{ key: 'random-label-jsturgeso', count: 25 },
|
||||
{ key: 'random-label-ohouldcroftp', count: 26 },
|
||||
{ key: 'random-label-rheijnenq', count: 27 },
|
||||
{ key: 'random-label-snortheyr', count: 28 },
|
||||
{ key: 'random-label-vpairpoints', count: 29 },
|
||||
{ key: 'random-label-odavidovicit', count: 30 },
|
||||
{ key: 'random-label-fmccartu', count: 31 },
|
||||
{ key: 'random-label-cwansburyv', count: 32 },
|
||||
{ key: 'random-label-bdimontw', count: 33 },
|
||||
{ key: 'random-label-adocketx', count: 34 },
|
||||
{ key: 'random-label-obavridgey', count: 35 },
|
||||
{ key: 'random-label-jperezz', count: 36 },
|
||||
{ key: 'random-label-gdeneve10', count: 37 },
|
||||
{ key: 'random-label-rmckeand11', count: 38 },
|
||||
{ key: 'random-label-kwestmerland12', count: 39 },
|
||||
{ key: 'random-label-mpryer13', count: 40 },
|
||||
{ key: 'random-label-rmcneil14', count: 41 },
|
||||
{ key: 'random-label-ablondel15', count: 42 },
|
||||
{ key: 'random-label-wbalducci16', count: 43 },
|
||||
{ key: 'random-label-swigley17', count: 44 },
|
||||
{ key: 'random-label-gferroni18', count: 45 },
|
||||
{ key: 'random-label-icollings19', count: 46 },
|
||||
{ key: 'random-label-wszymanski1a', count: 47 },
|
||||
{ key: 'random-label-jelson1b', count: 48 },
|
||||
{ key: 'random-label-fsambrook1c', count: 49 },
|
||||
{ key: 'random-label-kconey1d', count: 50 },
|
||||
{ key: 'random-label-agoodread1e', count: 51 },
|
||||
{ key: 'random-label-nmewton1f', count: 52 },
|
||||
{ key: 'random-label-gcodman1g', count: 53 },
|
||||
{ key: 'random-label-rpoplee1h', count: 54 },
|
||||
{ key: 'random-label-mhug1i', count: 55 },
|
||||
{ key: 'random-label-ggowrie1j', count: 56 },
|
||||
{ key: 'random-label-ctonepohl1k', count: 57 },
|
||||
{ key: 'random-label-cstillman1l', count: 58 },
|
||||
{ key: 'random-label-dcollyer1m', count: 59 },
|
||||
{ key: 'random-label-idimelow1n', count: 60 },
|
||||
{ key: 'random-label-djarley1o', count: 61 },
|
||||
{ key: 'random-label-omclleese1p', count: 62 },
|
||||
{ key: 'random-label-dstivers1q', count: 63 },
|
||||
{ key: 'random-label-svose1r', count: 64 },
|
||||
{ key: 'random-label-clanfare1s', count: 65 },
|
||||
{ key: 'random-label-aport1t', count: 66 },
|
||||
{ key: 'random-label-hcarlett1u', count: 67 },
|
||||
{ key: 'random-label-dstillmann1v', count: 68 },
|
||||
{ key: 'random-label-ncorpe1w', count: 69 },
|
||||
{ key: 'random-label-mjacobsohn1x', count: 70 },
|
||||
{ key: 'random-label-ycleiment1y', count: 71 },
|
||||
{ key: 'random-label-owherton1z', count: 72 },
|
||||
{ key: 'random-label-anowaczyk20', count: 73 },
|
||||
{ key: 'random-label-rmckennan21', count: 74 },
|
||||
{ key: 'random-label-cmoulding22', count: 75 },
|
||||
{ key: 'random-label-sswate23', count: 76 },
|
||||
{ key: 'random-label-cbarge24', count: 77 },
|
||||
{ key: 'random-label-agrainger25', count: 78 },
|
||||
{ key: 'random-label-ncosin26', count: 79 },
|
||||
{ key: 'random-label-pkears27', count: 80 },
|
||||
{ key: 'random-label-cmcarthur28', count: 81 },
|
||||
{ key: 'random-label-jmantripp29', count: 82 },
|
||||
{ key: 'random-label-cjekel2a', count: 83 },
|
||||
{ key: 'random-label-hdilleway2b', count: 84 },
|
||||
{ key: 'random-label-lbovaird2c', count: 85 },
|
||||
{ key: 'random-label-mweld2d', count: 86 },
|
||||
{ key: 'random-label-marnowitz2e', count: 87 },
|
||||
{ key: 'random-label-nbertomieu2f', count: 88 },
|
||||
{ key: 'random-label-mledward2g', count: 89 },
|
||||
{ key: 'random-label-mhince2h', count: 90 },
|
||||
{ key: 'random-label-baarons2i', count: 91 },
|
||||
{ key: 'random-label-kfrancie2j', count: 92 },
|
||||
{ key: 'random-label-ishooter2k', count: 93 },
|
||||
{ key: 'random-label-glowmass2l', count: 94 },
|
||||
{ key: 'random-label-rgeorgi2m', count: 95 },
|
||||
{ key: 'random-label-bproby2n', count: 96 },
|
||||
{ key: 'random-label-hsteffan2o', count: 97 },
|
||||
{ key: 'random-label-doruane2p', count: 98 },
|
||||
{ key: 'random-label-rlunny2q', count: 99 },
|
||||
{ key: 'random-label-geles2r', count: 100 },
|
||||
{ key: 'random-label-nmaggiore2s', count: 101 },
|
||||
{ key: 'random-label-aboocock2t', count: 102 },
|
||||
{ key: 'random-label-eguilbert2u', count: 103 },
|
||||
{ key: 'random-label-emccutcheon2v', count: 104 },
|
||||
{ key: 'random-label-hcowser2w', count: 105 },
|
||||
{ key: 'random-label-dspeeding2x', count: 106 },
|
||||
{ key: 'random-label-oseebright2y', count: 107 },
|
||||
{ key: 'random-label-hpresdee2z', count: 108 },
|
||||
{ key: 'random-label-pesseby30', count: 109 },
|
||||
{ key: 'random-label-hpusey31', count: 110 },
|
||||
{ key: 'random-label-dmanthorpe32', count: 111 },
|
||||
{ key: 'random-label-natley33', count: 112 },
|
||||
{ key: 'random-label-iferentz34', count: 113 },
|
||||
{ key: 'random-label-adyble35', count: 114 },
|
||||
{ key: 'random-label-dlockitt36', count: 115 },
|
||||
{ key: 'random-label-acoxwell37', count: 116 },
|
||||
{ key: 'random-label-amcgarvey38', count: 117 },
|
||||
{ key: 'random-label-rmcgougan39', count: 118 },
|
||||
{ key: 'random-label-mscole3a', count: 119 },
|
||||
{ key: 'random-label-lmalim3b', count: 120 },
|
||||
{ key: 'random-label-cends3c', count: 121 },
|
||||
{ key: 'random-label-dmannie3d', count: 122 },
|
||||
{ key: 'random-label-lgoodricke3e', count: 123 },
|
||||
{ key: 'random-label-rcaghy3f', count: 124 },
|
||||
{ key: 'random-label-mprozillo3g', count: 125 },
|
||||
{ key: 'random-label-mcardnell3h', count: 126 },
|
||||
{ key: 'random-label-gericssen3i', count: 127 },
|
||||
{ key: 'random-label-fspooner3j', count: 128 },
|
||||
{ key: 'random-label-achadney3k', count: 129 },
|
||||
{ key: 'random-label-corchard3l', count: 130 },
|
||||
{ key: 'random-label-lyerill3m', count: 131 },
|
||||
{ key: 'random-label-jrusk3n', count: 132 },
|
||||
{ key: 'random-label-lbonelle3o', count: 133 },
|
||||
{ key: 'random-label-eduny3p', count: 134 },
|
||||
{ key: 'random-label-mhutchence3q', count: 135 },
|
||||
{ key: 'random-label-rmargeram3r', count: 136 },
|
||||
{ key: 'random-label-smaudlin3s', count: 137 },
|
||||
{ key: 'random-label-sfarrance3t', count: 138 },
|
||||
{ key: 'random-label-eclendennen3u', count: 139 },
|
||||
{ key: 'random-label-cyabsley3v', count: 140 },
|
||||
{ key: 'random-label-ahensmans3w', count: 141 },
|
||||
{ key: 'random-label-tsenchenko3x', count: 142 },
|
||||
{ key: 'random-label-ryurchishin3y', count: 143 },
|
||||
{ key: 'random-label-teby3z', count: 144 },
|
||||
{ key: 'random-label-dvaillant40', count: 145 },
|
||||
{ key: 'random-label-kpetyakov41', count: 146 },
|
||||
{ key: 'random-label-cmorrison42', count: 147 },
|
||||
{ key: 'random-label-ltwiddy43', count: 148 },
|
||||
{ key: 'random-label-ineame44', count: 149 },
|
||||
{ key: 'random-label-blucock45', count: 150 },
|
||||
{ key: 'random-label-kdunsford46', count: 151 },
|
||||
{ key: 'random-label-dducham47', count: 152 },
|
||||
{ key: 'random-label-javramovitz48', count: 153 },
|
||||
{ key: 'random-label-mascraft49', count: 154 },
|
||||
{ key: 'random-label-bloughead4a', count: 155 },
|
||||
{ key: 'random-label-sduckit4b', count: 156 },
|
||||
{ key: 'random-label-hhardman4c', count: 157 },
|
||||
{ key: 'random-label-cstaniforth4d', count: 158 },
|
||||
{ key: 'random-label-jedney4e', count: 159 },
|
||||
{ key: 'random-label-bobbard4f', count: 160 },
|
||||
{ key: 'random-label-cgiraux4g', count: 161 },
|
||||
{ key: 'random-label-tkiln4h', count: 162 },
|
||||
{ key: 'random-label-jwansbury4i', count: 163 },
|
||||
{ key: 'random-label-dquinlan4j', count: 164 },
|
||||
{ key: 'random-label-hgindghill4k', count: 165 },
|
||||
{ key: 'random-label-jjowle4l', count: 166 },
|
||||
{ key: 'random-label-egambrell4m', count: 167 },
|
||||
{ key: 'random-label-jmcgloughlin4n', count: 168 },
|
||||
{ key: 'random-label-bbabb4o', count: 169 },
|
||||
{ key: 'random-label-achuck4p', count: 170 },
|
||||
{ key: 'random-label-tsyers4q', count: 171 },
|
||||
{ key: 'random-label-jlandon4r', count: 172 },
|
||||
{ key: 'random-label-wteather4s', count: 173 },
|
||||
{ key: 'random-label-dfoskin4t', count: 174 },
|
||||
{ key: 'random-label-gmorlon4u', count: 175 },
|
||||
{ key: 'random-label-jseely4v', count: 176 },
|
||||
{ key: 'random-label-cbrass4w', count: 177 },
|
||||
{ key: 'random-label-fmanilo4x', count: 178 },
|
||||
{ key: 'random-label-bfrangleton4y', count: 179 },
|
||||
{ key: 'random-label-vbartkiewicz4z', count: 180 },
|
||||
{ key: 'random-label-tclymer50', count: 181 },
|
||||
{ key: 'random-label-pqueen51', count: 182 },
|
||||
{ key: 'random-label-bpol52', count: 183 },
|
||||
{ key: 'random-label-jclaeskens53', count: 184 },
|
||||
{ key: 'random-label-cstranieri54', count: 185 },
|
||||
{ key: 'random-label-drumbelow55', count: 186 },
|
||||
{ key: 'random-label-wbrumham56', count: 187 },
|
||||
{ key: 'random-label-azeal57', count: 188 },
|
||||
{ key: 'random-label-msnooks58', count: 189 },
|
||||
{ key: 'random-label-blapre59', count: 190 },
|
||||
{ key: 'random-label-cduckers5a', count: 191 },
|
||||
{ key: 'random-label-mgumary5b', count: 192 },
|
||||
{ key: 'random-label-rtebbs5c', count: 193 },
|
||||
{ key: 'random-label-eroe5d', count: 194 },
|
||||
{ key: 'random-label-rconfait5e', count: 195 },
|
||||
{ key: 'random-label-fsinderland5f', count: 196 },
|
||||
{ key: 'random-label-tdallywater5g', count: 197 },
|
||||
{ key: 'random-label-glindenman5h', count: 198 },
|
||||
{ key: 'random-label-fbauser5i', count: 199 },
|
||||
{ key: 'random-label-bdownton5j', count: 200 },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
export const MOCK_LANGUAGE_AGGREGATIONS_BUCKETS = [
|
||||
{ key: 'random-label-edumingos0', count: 1 },
|
||||
{ key: 'random-label-rbourgourd1', count: 2 },
|
||||
{ key: 'random-label-dfearnside2', count: 3 },
|
||||
{ key: 'random-label-gewins3', count: 4 },
|
||||
{ key: 'random-label-telverstone4', count: 5 },
|
||||
{ key: 'random-label-ygerriets5', count: 6 },
|
||||
{ key: 'random-label-lmoffet6', count: 7 },
|
||||
{ key: 'random-label-ehinnerk7', count: 8 },
|
||||
{ key: 'random-label-flanceley8', count: 9 },
|
||||
{ key: 'random-label-adoyle9', count: 10 },
|
||||
{ key: 'random-label-rmcgirla', count: 11 },
|
||||
{ key: 'random-label-dwhellansb', count: 12 },
|
||||
{ key: 'random-label-apitkethlyc', count: 13 },
|
||||
{ key: 'random-label-senevoldsend', count: 14 },
|
||||
{ key: 'random-label-tlardnare', count: 15 },
|
||||
{ key: 'random-label-fcoilsf', count: 16 },
|
||||
{ key: 'random-label-qgeckg', count: 17 },
|
||||
{ key: 'random-label-rgrabenh', count: 18 },
|
||||
{ key: 'random-label-lashardi', count: 19 },
|
||||
{ key: 'random-label-sadamovitchj', count: 20 },
|
||||
{ key: 'random-label-rlyddiardk', count: 21 },
|
||||
{ key: 'random-label-jpoell', count: 22 },
|
||||
{ key: 'random-label-kcharitym', count: 23 },
|
||||
{ key: 'random-label-cbertenshawn', count: 24 },
|
||||
{ key: 'random-label-jsturgeso', count: 25 },
|
||||
{ key: 'random-label-ohouldcroftp', count: 26 },
|
||||
{ key: 'random-label-rheijnenq', count: 27 },
|
||||
{ key: 'random-label-snortheyr', count: 28 },
|
||||
{ key: 'random-label-vpairpoints', count: 29 },
|
||||
{ key: 'random-label-odavidovicit', count: 30 },
|
||||
{ key: 'random-label-fmccartu', count: 31 },
|
||||
{ key: 'random-label-cwansburyv', count: 32 },
|
||||
{ key: 'random-label-bdimontw', count: 33 },
|
||||
{ key: 'random-label-adocketx', count: 34 },
|
||||
{ key: 'random-label-obavridgey', count: 35 },
|
||||
{ key: 'random-label-jperezz', count: 36 },
|
||||
{ key: 'random-label-gdeneve10', count: 37 },
|
||||
{ key: 'random-label-rmckeand11', count: 38 },
|
||||
{ key: 'random-label-kwestmerland12', count: 39 },
|
||||
{ key: 'random-label-mpryer13', count: 40 },
|
||||
{ key: 'random-label-rmcneil14', count: 41 },
|
||||
{ key: 'random-label-ablondel15', count: 42 },
|
||||
{ key: 'random-label-wbalducci16', count: 43 },
|
||||
{ key: 'random-label-swigley17', count: 44 },
|
||||
{ key: 'random-label-gferroni18', count: 45 },
|
||||
{ key: 'random-label-icollings19', count: 46 },
|
||||
{ key: 'random-label-wszymanski1a', count: 47 },
|
||||
{ key: 'random-label-jelson1b', count: 48 },
|
||||
{ key: 'random-label-fsambrook1c', count: 49 },
|
||||
{ key: 'random-label-kconey1d', count: 50 },
|
||||
{ key: 'random-label-agoodread1e', count: 51 },
|
||||
{ key: 'random-label-nmewton1f', count: 52 },
|
||||
{ key: 'random-label-gcodman1g', count: 53 },
|
||||
{ key: 'random-label-rpoplee1h', count: 54 },
|
||||
{ key: 'random-label-mhug1i', count: 55 },
|
||||
{ key: 'random-label-ggowrie1j', count: 56 },
|
||||
{ key: 'random-label-ctonepohl1k', count: 57 },
|
||||
{ key: 'random-label-cstillman1l', count: 58 },
|
||||
{ key: 'random-label-dcollyer1m', count: 59 },
|
||||
{ key: 'random-label-idimelow1n', count: 60 },
|
||||
{ key: 'random-label-djarley1o', count: 61 },
|
||||
{ key: 'random-label-omclleese1p', count: 62 },
|
||||
{ key: 'random-label-dstivers1q', count: 63 },
|
||||
{ key: 'random-label-svose1r', count: 64 },
|
||||
{ key: 'random-label-clanfare1s', count: 65 },
|
||||
{ key: 'random-label-aport1t', count: 66 },
|
||||
{ key: 'random-label-hcarlett1u', count: 67 },
|
||||
{ key: 'random-label-dstillmann1v', count: 68 },
|
||||
{ key: 'random-label-ncorpe1w', count: 69 },
|
||||
{ key: 'random-label-mjacobsohn1x', count: 70 },
|
||||
{ key: 'random-label-ycleiment1y', count: 71 },
|
||||
{ key: 'random-label-owherton1z', count: 72 },
|
||||
{ key: 'random-label-anowaczyk20', count: 73 },
|
||||
{ key: 'random-label-rmckennan21', count: 74 },
|
||||
{ key: 'random-label-cmoulding22', count: 75 },
|
||||
{ key: 'random-label-sswate23', count: 76 },
|
||||
{ key: 'random-label-cbarge24', count: 77 },
|
||||
{ key: 'random-label-agrainger25', count: 78 },
|
||||
{ key: 'random-label-ncosin26', count: 79 },
|
||||
{ key: 'random-label-pkears27', count: 80 },
|
||||
{ key: 'random-label-cmcarthur28', count: 81 },
|
||||
{ key: 'random-label-jmantripp29', count: 82 },
|
||||
{ key: 'random-label-cjekel2a', count: 83 },
|
||||
{ key: 'random-label-hdilleway2b', count: 84 },
|
||||
{ key: 'random-label-lbovaird2c', count: 85 },
|
||||
{ key: 'random-label-mweld2d', count: 86 },
|
||||
{ key: 'random-label-marnowitz2e', count: 87 },
|
||||
{ key: 'random-label-nbertomieu2f', count: 88 },
|
||||
{ key: 'random-label-mledward2g', count: 89 },
|
||||
{ key: 'random-label-mhince2h', count: 90 },
|
||||
{ key: 'random-label-baarons2i', count: 91 },
|
||||
{ key: 'random-label-kfrancie2j', count: 92 },
|
||||
{ key: 'random-label-ishooter2k', count: 93 },
|
||||
{ key: 'random-label-glowmass2l', count: 94 },
|
||||
{ key: 'random-label-rgeorgi2m', count: 95 },
|
||||
{ key: 'random-label-bproby2n', count: 96 },
|
||||
{ key: 'random-label-hsteffan2o', count: 97 },
|
||||
{ key: 'random-label-doruane2p', count: 98 },
|
||||
{ key: 'random-label-rlunny2q', count: 99 },
|
||||
{ key: 'random-label-geles2r', count: 100 },
|
||||
{ key: 'random-label-nmaggiore2s', count: 101 },
|
||||
{ key: 'random-label-aboocock2t', count: 102 },
|
||||
{ key: 'random-label-eguilbert2u', count: 103 },
|
||||
{ key: 'random-label-emccutcheon2v', count: 104 },
|
||||
{ key: 'random-label-hcowser2w', count: 105 },
|
||||
{ key: 'random-label-dspeeding2x', count: 106 },
|
||||
{ key: 'random-label-oseebright2y', count: 107 },
|
||||
{ key: 'random-label-hpresdee2z', count: 108 },
|
||||
{ key: 'random-label-pesseby30', count: 109 },
|
||||
{ key: 'random-label-hpusey31', count: 110 },
|
||||
{ key: 'random-label-dmanthorpe32', count: 111 },
|
||||
{ key: 'random-label-natley33', count: 112 },
|
||||
{ key: 'random-label-iferentz34', count: 113 },
|
||||
{ key: 'random-label-adyble35', count: 114 },
|
||||
{ key: 'random-label-dlockitt36', count: 115 },
|
||||
{ key: 'random-label-acoxwell37', count: 116 },
|
||||
{ key: 'random-label-amcgarvey38', count: 117 },
|
||||
{ key: 'random-label-rmcgougan39', count: 118 },
|
||||
{ key: 'random-label-mscole3a', count: 119 },
|
||||
{ key: 'random-label-lmalim3b', count: 120 },
|
||||
{ key: 'random-label-cends3c', count: 121 },
|
||||
{ key: 'random-label-dmannie3d', count: 122 },
|
||||
{ key: 'random-label-lgoodricke3e', count: 123 },
|
||||
{ key: 'random-label-rcaghy3f', count: 124 },
|
||||
{ key: 'random-label-mprozillo3g', count: 125 },
|
||||
{ key: 'random-label-mcardnell3h', count: 126 },
|
||||
{ key: 'random-label-gericssen3i', count: 127 },
|
||||
{ key: 'random-label-fspooner3j', count: 128 },
|
||||
{ key: 'random-label-achadney3k', count: 129 },
|
||||
{ key: 'random-label-corchard3l', count: 130 },
|
||||
{ key: 'random-label-lyerill3m', count: 131 },
|
||||
{ key: 'random-label-jrusk3n', count: 132 },
|
||||
{ key: 'random-label-lbonelle3o', count: 133 },
|
||||
{ key: 'random-label-eduny3p', count: 134 },
|
||||
{ key: 'random-label-mhutchence3q', count: 135 },
|
||||
{ key: 'random-label-rmargeram3r', count: 136 },
|
||||
{ key: 'random-label-smaudlin3s', count: 137 },
|
||||
{ key: 'random-label-sfarrance3t', count: 138 },
|
||||
{ key: 'random-label-eclendennen3u', count: 139 },
|
||||
{ key: 'random-label-cyabsley3v', count: 140 },
|
||||
{ key: 'random-label-ahensmans3w', count: 141 },
|
||||
{ key: 'random-label-tsenchenko3x', count: 142 },
|
||||
{ key: 'random-label-ryurchishin3y', count: 143 },
|
||||
{ key: 'random-label-teby3z', count: 144 },
|
||||
{ key: 'random-label-dvaillant40', count: 145 },
|
||||
{ key: 'random-label-kpetyakov41', count: 146 },
|
||||
{ key: 'random-label-cmorrison42', count: 147 },
|
||||
{ key: 'random-label-ltwiddy43', count: 148 },
|
||||
{ key: 'random-label-ineame44', count: 149 },
|
||||
{ key: 'random-label-blucock45', count: 150 },
|
||||
{ key: 'random-label-kdunsford46', count: 151 },
|
||||
{ key: 'random-label-dducham47', count: 152 },
|
||||
{ key: 'random-label-javramovitz48', count: 153 },
|
||||
{ key: 'random-label-mascraft49', count: 154 },
|
||||
{ key: 'random-label-bloughead4a', count: 155 },
|
||||
{ key: 'random-label-sduckit4b', count: 156 },
|
||||
{ key: 'random-label-hhardman4c', count: 157 },
|
||||
{ key: 'random-label-cstaniforth4d', count: 158 },
|
||||
{ key: 'random-label-jedney4e', count: 159 },
|
||||
{ key: 'random-label-bobbard4f', count: 160 },
|
||||
{ key: 'random-label-cgiraux4g', count: 161 },
|
||||
{ key: 'random-label-tkiln4h', count: 162 },
|
||||
{ key: 'random-label-jwansbury4i', count: 163 },
|
||||
{ key: 'random-label-dquinlan4j', count: 164 },
|
||||
{ key: 'random-label-hgindghill4k', count: 165 },
|
||||
{ key: 'random-label-jjowle4l', count: 166 },
|
||||
{ key: 'random-label-egambrell4m', count: 167 },
|
||||
{ key: 'random-label-jmcgloughlin4n', count: 168 },
|
||||
{ key: 'random-label-bbabb4o', count: 169 },
|
||||
{ key: 'random-label-achuck4p', count: 170 },
|
||||
{ key: 'random-label-tsyers4q', count: 171 },
|
||||
{ key: 'random-label-jlandon4r', count: 172 },
|
||||
{ key: 'random-label-wteather4s', count: 173 },
|
||||
{ key: 'random-label-dfoskin4t', count: 174 },
|
||||
{ key: 'random-label-gmorlon4u', count: 175 },
|
||||
{ key: 'random-label-jseely4v', count: 176 },
|
||||
{ key: 'random-label-cbrass4w', count: 177 },
|
||||
{ key: 'random-label-fmanilo4x', count: 178 },
|
||||
{ key: 'random-label-bfrangleton4y', count: 179 },
|
||||
{ key: 'random-label-vbartkiewicz4z', count: 180 },
|
||||
{ key: 'random-label-tclymer50', count: 181 },
|
||||
{ key: 'random-label-pqueen51', count: 182 },
|
||||
{ key: 'random-label-bpol52', count: 183 },
|
||||
{ key: 'random-label-jclaeskens53', count: 184 },
|
||||
{ key: 'random-label-cstranieri54', count: 185 },
|
||||
{ key: 'random-label-drumbelow55', count: 186 },
|
||||
{ key: 'random-label-wbrumham56', count: 187 },
|
||||
{ key: 'random-label-azeal57', count: 188 },
|
||||
{ key: 'random-label-msnooks58', count: 189 },
|
||||
{ key: 'random-label-blapre59', count: 190 },
|
||||
{ key: 'random-label-cduckers5a', count: 191 },
|
||||
{ key: 'random-label-mgumary5b', count: 192 },
|
||||
{ key: 'random-label-rtebbs5c', count: 193 },
|
||||
{ key: 'random-label-eroe5d', count: 194 },
|
||||
{ key: 'random-label-rconfait5e', count: 195 },
|
||||
{ key: 'random-label-fsinderland5f', count: 196 },
|
||||
{ key: 'random-label-tdallywater5g', count: 197 },
|
||||
{ key: 'random-label-glindenman5h', count: 198 },
|
||||
{ key: 'random-label-fbauser5i', count: 199 },
|
||||
{ key: 'random-label-bdownton5j', count: 200 },
|
||||
];
|
||||
|
||||
export const MOCK_RECEIVE_AGGREGATIONS_SUCCESS_MUTATION = [
|
||||
{
|
||||
type: types.REQUEST_AGGREGATIONS,
|
||||
},
|
||||
{
|
||||
type: types.RECEIVE_AGGREGATIONS_SUCCESS,
|
||||
payload: MOCK_AGGREGATIONS,
|
||||
},
|
||||
];
|
||||
|
||||
export const MOCK_RECEIVE_AGGREGATIONS_ERROR_MUTATION = [
|
||||
{
|
||||
type: types.REQUEST_AGGREGATIONS,
|
||||
},
|
||||
{
|
||||
type: types.RECEIVE_AGGREGATIONS_ERROR,
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ import {
|
|||
MOCK_NAVIGATION_DATA,
|
||||
MOCK_NAVIGATION_ACTION_MUTATION,
|
||||
MOCK_ENDPOINT_RESPONSE,
|
||||
MOCK_RECEIVE_AGGREGATIONS_SUCCESS_MUTATION,
|
||||
MOCK_RECEIVE_AGGREGATIONS_ERROR_MUTATION,
|
||||
MOCK_AGGREGATIONS,
|
||||
} from '../mock_data';
|
||||
|
||||
jest.mock('~/flash');
|
||||
|
|
@ -295,4 +298,30 @@ describe('Global Search Store Actions', () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe.each`
|
||||
action | axiosMock | type | expectedMutations | errorLogs
|
||||
${actions.fetchLanguageAggregation} | ${{ method: 'onGet', code: 200 }} | ${'success'} | ${MOCK_RECEIVE_AGGREGATIONS_SUCCESS_MUTATION} | ${0}
|
||||
${actions.fetchLanguageAggregation} | ${{ method: 'onPut', code: 0 }} | ${'error'} | ${MOCK_RECEIVE_AGGREGATIONS_ERROR_MUTATION} | ${1}
|
||||
${actions.fetchLanguageAggregation} | ${{ method: 'onGet', code: 500 }} | ${'error'} | ${MOCK_RECEIVE_AGGREGATIONS_ERROR_MUTATION} | ${1}
|
||||
`('fetchLanguageAggregation', ({ action, axiosMock, type, expectedMutations, errorLogs }) => {
|
||||
describe(`on ${type}`, () => {
|
||||
beforeEach(() => {
|
||||
if (axiosMock.method) {
|
||||
mock[axiosMock.method]().reply(
|
||||
axiosMock.code,
|
||||
axiosMock.code === 200 ? MOCK_AGGREGATIONS : [],
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it(`should ${type === 'error' ? 'NOT ' : ''}dispatch ${
|
||||
type === 'error' ? '' : 'the correct '
|
||||
}mutations`, () => {
|
||||
return testAction({ action, state, expectedMutations }).then(() => {
|
||||
expect(logger.logError).toHaveBeenCalledTimes(errorLogs);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,7 +1,13 @@
|
|||
import { GROUPS_LOCAL_STORAGE_KEY, PROJECTS_LOCAL_STORAGE_KEY } from '~/search/store/constants';
|
||||
import * as getters from '~/search/store/getters';
|
||||
import createState from '~/search/store/state';
|
||||
import { MOCK_QUERY, MOCK_GROUPS, MOCK_PROJECTS } from '../mock_data';
|
||||
import {
|
||||
MOCK_QUERY,
|
||||
MOCK_GROUPS,
|
||||
MOCK_PROJECTS,
|
||||
MOCK_AGGREGATIONS,
|
||||
MOCK_LANGUAGE_AGGREGATIONS_BUCKETS,
|
||||
} from '../mock_data';
|
||||
|
||||
describe('Global Search Store Getters', () => {
|
||||
let state;
|
||||
|
|
@ -29,4 +35,16 @@ describe('Global Search Store Getters', () => {
|
|||
expect(getters.frequentProjects(state)).toStrictEqual(MOCK_PROJECTS);
|
||||
});
|
||||
});
|
||||
|
||||
describe('langugageAggregationBuckets', () => {
|
||||
beforeEach(() => {
|
||||
state.aggregations.data = MOCK_AGGREGATIONS;
|
||||
});
|
||||
|
||||
it('returns the correct data', () => {
|
||||
expect(getters.langugageAggregationBuckets(state)).toStrictEqual(
|
||||
MOCK_LANGUAGE_AGGREGATIONS_BUCKETS,
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import {
|
|||
MOCK_NAVIGATION_DATA,
|
||||
MOCK_NAVIGATION_ACTION_MUTATION,
|
||||
MOCK_DATA_FOR_NAVIGATION_ACTION_MUTATION,
|
||||
MOCK_AGGREGATIONS,
|
||||
} from '../mock_data';
|
||||
|
||||
describe('Global Search Store Mutations', () => {
|
||||
|
|
@ -108,4 +109,17 @@ describe('Global Search Store Mutations', () => {
|
|||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe.each`
|
||||
mutation | data | result
|
||||
${types.REQUEST_AGGREGATIONS} | ${[]} | ${{ fetching: true, error: false, data: [] }}
|
||||
${types.RECEIVE_AGGREGATIONS_SUCCESS} | ${MOCK_AGGREGATIONS} | ${{ fetching: false, error: false, data: MOCK_AGGREGATIONS }}
|
||||
${types.RECEIVE_AGGREGATIONS_ERROR} | ${[]} | ${{ fetching: false, error: true, data: [] }}
|
||||
`('$mutation', ({ mutation, data, result }) => {
|
||||
it('sets correct object content', () => {
|
||||
mutations[mutation](state, data);
|
||||
|
||||
expect(state.aggregations).toStrictEqual(result);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -8,4 +8,20 @@ RSpec.describe RegistrationsHelper do
|
|||
expect(helper.signup_username_data_attributes.keys).to include(:min_length, :min_length_message, :max_length, :max_length_message, :qa_selector)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#arkose_labs_challenge_enabled?' do
|
||||
before do
|
||||
stub_application_setting(
|
||||
arkose_labs_private_api_key: nil,
|
||||
arkose_labs_public_api_key: nil,
|
||||
arkose_labs_namespace: nil
|
||||
)
|
||||
stub_env('ARKOSE_LABS_PRIVATE_KEY', nil)
|
||||
stub_env('ARKOSE_LABS_PUBLIC_KEY', nil)
|
||||
end
|
||||
|
||||
it 'is false' do
|
||||
expect(helper.arkose_labs_challenge_enabled?).to eq false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -4,11 +4,9 @@ require 'spec_helper'
|
|||
|
||||
RSpec.describe ::API::Entities::MergeRequestBasic do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:project) { create(:project, :public) }
|
||||
let_it_be(:merge_request) { create(:merge_request) }
|
||||
let_it_be(:labels) { create_list(:label, 3) }
|
||||
let_it_be(:merge_requests) { create_list(:labeled_merge_request, 10, :unique_branches, labels: labels) }
|
||||
|
||||
let_it_be(:entity) { described_class.new(merge_request) }
|
||||
|
||||
# This mimics the behavior of the `Grape::Entity` serializer
|
||||
|
|
@ -16,7 +14,7 @@ RSpec.describe ::API::Entities::MergeRequestBasic do
|
|||
described_class.new(obj).presented
|
||||
end
|
||||
|
||||
subject { entity.as_json }
|
||||
subject(:json) { entity.as_json }
|
||||
|
||||
it 'includes expected fields' do
|
||||
expected_fields = %i[
|
||||
|
|
@ -57,7 +55,7 @@ RSpec.describe ::API::Entities::MergeRequestBasic do
|
|||
end
|
||||
end
|
||||
|
||||
context 'reviewers' do
|
||||
describe 'reviewers' do
|
||||
before do
|
||||
merge_request.reviewers = [user]
|
||||
end
|
||||
|
|
@ -68,4 +66,26 @@ RSpec.describe ::API::Entities::MergeRequestBasic do
|
|||
expect(result['reviewers'][0]['username']).to eq user.username
|
||||
end
|
||||
end
|
||||
|
||||
describe 'squash' do
|
||||
subject { json[:squash] }
|
||||
|
||||
before do
|
||||
merge_request.target_project.project_setting.update!(squash_option: :never)
|
||||
merge_request.update!(squash: true)
|
||||
end
|
||||
|
||||
it { is_expected.to eq(true) }
|
||||
end
|
||||
|
||||
describe 'squash_on_merge' do
|
||||
subject { json[:squash_on_merge] }
|
||||
|
||||
before do
|
||||
merge_request.target_project.project_setting.update!(squash_option: :never)
|
||||
merge_request.update!(squash: true)
|
||||
end
|
||||
|
||||
it { is_expected.to eq(false) }
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ RSpec.describe Gitlab::Auth::IpRateLimiter, :use_clean_rails_memory_store_cachin
|
|||
|
||||
before do
|
||||
stub_rack_attack_setting(options)
|
||||
Rack::Attack.reset!
|
||||
Gitlab::Redis::RateLimiting.with(&:flushdb)
|
||||
Rack::Attack.clear_configuration
|
||||
Gitlab::RackAttack.configure(Rack::Attack)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Gitlab::Redis::ClusterRateLimiting, feature_category: :redis do
|
||||
include_examples "redis_new_instance_shared_examples", 'cluster_rate_limiting', Gitlab::Redis::Cache
|
||||
end
|
||||
|
|
@ -1195,7 +1195,7 @@ RSpec.describe Gitlab::Redis::MultiStore, feature_category: :redis do
|
|||
|
||||
context 'when FF table guard raises' do
|
||||
before do
|
||||
allow(Feature::FlipperFeature).to receive(:table_exists?).and_raise
|
||||
allow(Feature::FlipperFeature).to receive(:table_exists?).and_raise(ActiveRecord::NoDatabaseError)
|
||||
end
|
||||
|
||||
it 'multi store is disabled' do
|
||||
|
|
@ -1221,7 +1221,7 @@ RSpec.describe Gitlab::Redis::MultiStore, feature_category: :redis do
|
|||
|
||||
context 'when FF table guard raises' do
|
||||
before do
|
||||
allow(Feature::FlipperFeature).to receive(:table_exists?).and_raise
|
||||
allow(Feature::FlipperFeature).to receive(:table_exists?).and_raise(ActiveRecord::NoDatabaseError)
|
||||
end
|
||||
|
||||
it 'multi store is disabled' do
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Gitlab::SlashCommands::Command do
|
||||
RSpec.describe Gitlab::SlashCommands::Command, feature_category: :integrations do
|
||||
let(:project) { create(:project, :repository) }
|
||||
let(:user) { create(:user) }
|
||||
let(:chat_name) { double(:chat_name, user: user) }
|
||||
|
|
@ -28,7 +28,7 @@ RSpec.describe Gitlab::SlashCommands::Command do
|
|||
it 'displays the help message' do
|
||||
expect(subject[:response_type]).to be(:ephemeral)
|
||||
expect(subject[:text]).to start_with('The specified command is not valid')
|
||||
expect(subject[:text]).to match('/gitlab issue show')
|
||||
expect(subject[:text]).to include('/gitlab [project name or alias] issue show <id>')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe RequireEmailVerification do
|
||||
RSpec.describe RequireEmailVerification, feature_category: :insider_threat do
|
||||
let_it_be(:model) do
|
||||
Class.new(ApplicationRecord) do
|
||||
self.table_name = 'users'
|
||||
|
|
@ -15,11 +15,15 @@ RSpec.describe RequireEmailVerification do
|
|||
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
|
||||
where(:feature_flag_enabled, :two_factor_enabled, :overridden) do
|
||||
false | false | false
|
||||
false | true | false
|
||||
true | false | true
|
||||
true | true | false
|
||||
where(:feature_flag_enabled, :two_factor_enabled, :skipped, :overridden) do
|
||||
false | false | false | false
|
||||
false | false | true | false
|
||||
false | true | false | false
|
||||
false | true | true | false
|
||||
true | false | false | true
|
||||
true | false | true | false
|
||||
true | true | false | false
|
||||
true | true | true | false
|
||||
end
|
||||
|
||||
with_them do
|
||||
|
|
@ -29,6 +33,7 @@ RSpec.describe RequireEmailVerification do
|
|||
before do
|
||||
stub_feature_flags(require_email_verification: feature_flag_enabled ? instance : another_instance)
|
||||
allow(instance).to receive(:two_factor_enabled?).and_return(two_factor_enabled)
|
||||
stub_feature_flags(skip_require_email_verification: skipped ? instance : another_instance)
|
||||
end
|
||||
|
||||
describe '#lock_access!' do
|
||||
|
|
|
|||
|
|
@ -223,6 +223,7 @@ feature_category: :user_management do
|
|||
context 'when the feature flag is toggled on' do
|
||||
before do
|
||||
stub_feature_flags(require_email_verification: user)
|
||||
stub_feature_flags(skip_require_email_verification: false)
|
||||
end
|
||||
|
||||
it_behaves_like 'verifying with email'
|
||||
|
|
@ -242,6 +243,14 @@ feature_category: :user_management do
|
|||
|
||||
it_behaves_like 'verifying with email'
|
||||
end
|
||||
|
||||
context 'when the skip_require_email_verification feature flag is turned on' do
|
||||
before do
|
||||
stub_feature_flags(skip_require_email_verification: user)
|
||||
end
|
||||
|
||||
it_behaves_like 'not verifying with email'
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ RSpec.shared_examples 'tracking when dry-run mode is set' do
|
|||
end
|
||||
|
||||
def reset_rack_attack
|
||||
Rack::Attack.reset!
|
||||
Gitlab::Redis::RateLimiting.with(&:flushdb)
|
||||
Rack::Attack.clear_configuration
|
||||
Gitlab::RackAttack.configure(Rack::Attack)
|
||||
end
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ require (
|
|||
golang.org/x/net v0.5.0
|
||||
golang.org/x/oauth2 v0.2.0
|
||||
golang.org/x/tools v0.2.0
|
||||
google.golang.org/grpc v1.52.0
|
||||
google.golang.org/grpc v1.52.3
|
||||
google.golang.org/protobuf v1.28.1
|
||||
honnef.co/go/tools v0.3.3
|
||||
)
|
||||
|
|
|
|||
|
|
@ -2699,8 +2699,8 @@ google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCD
|
|||
google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
|
||||
google.golang.org/grpc v1.52.0 h1:kd48UiU7EHsV4rnLyOJRuP/Il/UHE7gdDAQ+SZI7nZk=
|
||||
google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
|
||||
google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ=
|
||||
google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
|
||||
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
|
|
|
|||
Loading…
Reference in New Issue