Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2021-09-13 21:08:53 +00:00
parent 02c9272b54
commit 2d4f258f06
11 changed files with 75 additions and 94 deletions

View file

@ -103,8 +103,8 @@ class ProfilesController < Profiles::ApplicationController
@username_param ||= user_params.require(:username) @username_param ||= user_params.require(:username)
end end
def user_params def user_params_attributes
@user_params ||= params.require(:user).permit( [
:avatar, :avatar,
:bio, :bio,
:email, :email,
@ -130,6 +130,12 @@ class ProfilesController < Profiles::ApplicationController
:pronouns, :pronouns,
:pronunciation, :pronunciation,
status: [:emoji, :message, :availability] status: [:emoji, :message, :availability]
) ]
end
def user_params
@user_params ||= params.require(:user).permit(user_params_attributes)
end end
end end
ProfilesController.prepend_mod

View file

@ -147,8 +147,12 @@ class RegistrationsController < Devise::RegistrationsController
resource.persisted? && resource.blocked_pending_approval? resource.persisted? && resource.blocked_pending_approval?
end end
def sign_up_params_attributes
[:username, :email, :name, :first_name, :last_name, :password]
end
def sign_up_params def sign_up_params
params.require(:user).permit(:username, :email, :name, :first_name, :last_name, :password) params.require(:user).permit(sign_up_params_attributes)
end end
def resource_name def resource_name

View file

@ -77,3 +77,5 @@ module Users
end end
end end
end end
Users::TermsController.prepend_mod

View file

@ -5,3 +5,5 @@ module RecaptchaHelper
!!Gitlab::Recaptcha.enabled? !!Gitlab::Recaptcha.enabled?
end end
end end
RecaptchaHelper.prepend_mod

View file

@ -57,6 +57,7 @@
pattern: ".{#{@minimum_password_length},}", pattern: ".{#{@minimum_password_length},}",
title: s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length } title: s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length }
%p.gl-field-hint.text-secondary= s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length } %p.gl-field-hint.text-secondary= s_('SignUp|Minimum length is %{minimum_password_length} characters.') % { minimum_password_length: @minimum_password_length }
= render_if_exists 'devise/shared/phone_verification', form: f
%div %div
- if show_recaptcha_sign_up? - if show_recaptcha_sign_up?
= recaptcha_tags nonce: content_security_policy_nonce = recaptcha_tags nonce: content_security_policy_nonce

View file

@ -1,12 +1,14 @@
- redirect_params = { redirect: @redirect } if @redirect - redirect_params = { redirect: @redirect } if @redirect
- accept_term_link = accept_term_path(@term, redirect_params)
.card-body.rendered-terms{ data: { qa_selector: 'terms_content' } } .card-body.rendered-terms{ data: { qa_selector: 'terms_content' } }
= markdown_field(@term, :terms) = markdown_field(@term, :terms)
- if current_user - if current_user
= render_if_exists 'devise/shared/form_phone_verification', accept_term_link: accept_term_link, inline: true
.card-footer.footer-block.clearfix .card-footer.footer-block.clearfix
- if can?(current_user, :accept_terms, @term) - if can?(current_user, :accept_terms, @term)
.float-right .float-right
= button_to accept_term_path(@term, redirect_params), class: 'gl-button btn btn-confirm gl-ml-3', data: { qa_selector: 'accept_terms_button' } do = button_to accept_term_link, class: 'gl-button btn btn-confirm gl-ml-3', data: { qa_selector: 'accept_terms_button' } do
= _('Accept terms') = _('Accept terms')
- else - else
.float-right .float-right

View file

@ -185,7 +185,7 @@ Rails.application.routes.draw do
end end
Gitlab.jh do Gitlab.jh do
draw :province draw :global_jh
end end
if ENV['GITLAB_CHAOS_SECRET'] || Rails.env.development? || Rails.env.test? if ENV['GITLAB_CHAOS_SECRET'] || Rails.env.development? || Rails.env.test?

View file

@ -63,9 +63,6 @@ Depending on your installation method, this file is located at:
- Omnibus GitLab: `/var/log/gitlab/gitlab-rails/production_json.log` - Omnibus GitLab: `/var/log/gitlab/gitlab-rails/production_json.log`
- Installations from source: `/home/git/gitlab/log/production_json.log` - Installations from source: `/home/git/gitlab/log/production_json.log`
When GitLab is running in an environment other than production,
the corresponding log file is shown here.
It contains a structured log for Rails controller requests received from It contains a structured log for Rails controller requests received from
GitLab, thanks to [Lograge](https://github.com/roidrage/lograge/). GitLab, thanks to [Lograge](https://github.com/roidrage/lograge/).
Requests from the API are logged to a separate file in `api_json.log`. Requests from the API are logged to a separate file in `api_json.log`.
@ -216,9 +213,6 @@ Depending on your installation method, this file is located at:
- Omnibus GitLab: `/var/log/gitlab/gitlab-rails/production.log` - Omnibus GitLab: `/var/log/gitlab/gitlab-rails/production.log`
- Installations from source: `/home/git/gitlab/log/production.log` - Installations from source: `/home/git/gitlab/log/production.log`
When GitLab is running in an environment other than production,
the corresponding log file is shown here.
It contains information about all performed requests. You can see the It contains information about all performed requests. You can see the
URL and type of request, IP address, and what parts of code were URL and type of request, IP address, and what parts of code were
involved to service this particular request. Also, you can see all SQL involved to service this particular request. Also, you can see all SQL

View file

@ -9,9 +9,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w
> Moved to GitLab Premium in 13.9. > Moved to GitLab Premium in 13.9.
This document describes how to enable Advanced Search. After This page describes how to enable Advanced Search. When enabled,
Advanced Search is enabled, you'll have the benefit of fast search response times Advanced Search provides faster search response times and [improved search features](../user/search/advanced_search.md).
and the advantage of the [special searches](../user/search/advanced_search.md).
## Version requirements ## Version requirements
@ -26,90 +25,61 @@ and the advantage of the [special searches](../user/search/advanced_search.md).
| GitLab Enterprise Edition 9.0 through 11.4 | Elasticsearch 5.1 through 5.5 | | GitLab Enterprise Edition 9.0 through 11.4 | Elasticsearch 5.1 through 5.5 |
| GitLab Enterprise Edition 8.4 through 8.17 | Elasticsearch 2.4 with [Delete By Query Plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html) installed | | GitLab Enterprise Edition 8.4 through 8.17 | Elasticsearch 2.4 with [Delete By Query Plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/2.4/plugins-delete-by-query.html) installed |
The Elasticsearch Integration is designed to work with supported versions of The Elasticsearch Integration works with supported versions of
Elasticsearch and follows Elasticsearch's [End of Life Policy](https://www.elastic.co/support/eol). Elasticsearch and follows Elasticsearch's [End of Life Policy](https://www.elastic.co/support/eol).
When we change Elasticsearch supported versions in GitLab, we announce them in [deprecation notes](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations) in monthly release posts When we change Elasticsearch supported versions in GitLab, we announce them in [deprecation notes](https://about.gitlab.com/handbook/marketing/blog/release-posts/#deprecations) in monthly release posts
before the actual removal. before we remove them.
## System requirements ## System requirements
Elasticsearch requires additional resources in excess of those documented in the Elasticsearch requires additional resources to those documented in the
[GitLab system requirements](../install/requirements.md). [GitLab system requirements](../install/requirements.md).
The amount of resources (memory, CPU, storage) varies greatly, based on the Memory, CPU, and storage resource amounts vary depending on the amount of data you index into the Elasticsearch cluster. Heavily used Elasticsearch clusters may require more resources. According to
amount of data being indexed into the Elasticsearch cluster. According to
[Elasticsearch official guidelines](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_memory), [Elasticsearch official guidelines](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_memory),
each node should have: each node should have:
- [Memory](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_memory): 8 GiB (minimum). - [Memory](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_memory): 8 GiB (minimum).
- [CPU](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_cpus): Modern processor with multiple cores. - [CPU](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_cpus): Modern processor with multiple cores. GitLab.com has minimal CPU requirements for Elasticsearch. Multiple cores provide extra concurrency, which is more beneficial than faster CPUs.
- [Storage](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_disks): Use SSD storage. The total storage size of all Elasticsearch nodes is about 50% of the total size of your Git repositories. It includes one primary and one replica. - [Storage](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_disks): Use SSD storage. The total storage size of all Elasticsearch nodes is about 50% of the total size of your Git repositories. It includes one primary and one replica. The [`estimate_cluster_size`](#gitlab-advanced-search-rake-tasks) Rake task ([introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221177) in GitLab 13.10) uses total repository size to estimate the Advanced Search storage requirements.
A few notes on CPU and storage:
- CPU requirements for Elasticsearch tend to be minimal. There are specific
scenarios where this isn't true, but GitLab.com isn't using Elasticsearch in
an exceptionally CPU-heavy way. More cores are more performant than faster
CPUs. Extra concurrency from multiple cores far outweighs a slightly
faster clock speed in Elasticsearch.
- Storage requirements for Elasticsearch are important, especially for
indexing-heavy clusters. When possible use SSDs, whose speed is far superior
to any spinning media for Elasticsearch. In testing, nodes that use SSD storage
see boosts in both query and indexing performance.
- We've introduced the [`estimate_cluster_size`](#gitlab-advanced-search-rake-tasks)
Rake task to estimate the Advanced Search storage requirements in advance, which
- The [`estimate_cluster_size`](#gitlab-advanced-search-rake-tasks) Rake task estimates the
Advanced Search storage requirements in advance. The Rake task uses total repository size
for the calculation. [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/221177) in GitLab 13.10.
Keep in mind, these are **minimum requirements** for Elasticsearch.
Heavily-used Elasticsearch clusters likely require considerably more
resources.
## Install Elasticsearch ## Install Elasticsearch
Elasticsearch is *not* included in the Omnibus packages or when you install from Elasticsearch is *not* included in the Omnibus packages or when you install from
source. You must [install it separately](https://www.elastic.co/guide/en/elasticsearch/reference/7.x/install-elasticsearch.html "Elasticsearch 7.x installation documentation"). source. You must [install it separately](https://www.elastic.co/guide/en/elasticsearch/reference/7.x/install-elasticsearch.html "Elasticsearch 7.x installation documentation") and ensure you select your version. Detailed information on how to install Elasticsearch is out of the scope of this page.
Be sure to select your version. Providing detailed information on installing
Elasticsearch is out of the scope of this document.
Elasticsearch should be installed on a separate server, whether you install You can install Elasticsearch yourself, or use a cloud hosted offering such as [Elasticsearch Service](https://www.elastic.co/elasticsearch/service)(available on AWS, GCP, or Azure) or the [Amazon Elasticsearch](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html)
it yourself or use a cloud hosted offering like Elastic's [Elasticsearch Service](https://www.elastic.co/elasticsearch/service) service.
(available on AWS, GCP, or Azure) or the [Amazon Elasticsearch](https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/es-gsg.html) You should install Elasticsearch on a separate server. Running Elasticsearch on the same server as GitLab is not recommended and can cause a degradation in GitLab instance performance.
service. Running Elasticsearch on the same server as GitLab is not recommended
and can cause a degradation in GitLab instance performance.
**For a single node Elasticsearch cluster, the functional cluster health status For a single node Elasticsearch cluster, the functional cluster health status is always yellow due to the allocation of the primary shard. Elasticsearch cannot assign replica shards to the same node as primary shards.
is always yellow and never green**. This is due to allocation of the primary shard. Replicas cannot be allocated as there is no other node to which Elasticsearch can assign a replica.
After the data is added to the database or repository and [Elasticsearch is The search index updates after you:
enabled in the Admin Area](#enable-advanced-search), the search index is
updated automatically. - Add data to the database or repository.
- [Enable Elasticsearch](#enable-advanced-search) in the Admin Area.
## Upgrade to a new Elasticsearch major version ## Upgrade to a new Elasticsearch major version
Elasticsearch can read and use indices created in the previous major version, so you don't need to change anything in the GitLab configuration when upgrading Elasticsearch. Elasticsearch reads and uses indices created in the previous major version. You are not required to change the GitLab configuration when you upgrade Elasticsearch.
If you created your current index before GitLab 13.0, you might want to reindex from scratch (which implicitly creates an alias) to use some features, for example [Zero downtime reindexing](#zero-downtime-reindexing). After you reindex, you can perform zero-downtime reindexing and benefit from future features that make use of the alias. If your current index was created before GitLab 13.0, you must reindex from scratch to create an alias to use features such as [zero downtime reindexing](#zero-downtime-reindexing). After you reindex, you can perform zero downtime reindexing and also benefit from future features that use the alias.
To check if your current index was created after GitLab 13.0, use the [Elasticsearch cat aliases API](https://www.elastic.co/guide/en/elasticsearch/reference/7.11/cat-alias.html). To check if your current index was created before GitLab 13.0, use the [Elasticsearch cat aliases API](https://www.elastic.co/guide/en/elasticsearch/reference/7.11/cat-alias.html).
If the returned list of aliases does not contain a `gitlab-production` alias, you must reindex to use features such as zero downtime reindexing.
If the returned list of aliases contains an entry for `gitlab-production` that points to an index If the returned list of aliases contains an entry for `gitlab-production` that points to an index
named `gitlab-production-<numerical timestamp>`, your index was created after GitLab 13.0. named `gitlab-production-<numerical timestamp>`, your index was created after GitLab 13.0.
If the `gitlab-production` alias is missing, you must reindex from scratch to use
features such as Zero-downtime reindexing.
## Elasticsearch repository indexer ## Elasticsearch repository indexer
For indexing Git repository data, GitLab uses an [indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer). To index Git repository data, GitLab uses an [indexer written in Go](https://gitlab.com/gitlab-org/gitlab-elasticsearch-indexer).
The way you install the Go indexer depends on your version of GitLab: Depending on your GitLab version, there are different installation procedures for the Go indexer:
- For Omnibus GitLab 11.8 or greater, see [Omnibus GitLab](#omnibus-gitlab). - For Omnibus GitLab 11.8 or greater, see [Omnibus GitLab](#omnibus-gitlab).
- For installations from source or older versions of Omnibus GitLab, - For installations from source or older versions of Omnibus GitLab,
[install the indexer from source](#from-source). [install the indexer from source](#from-source).
- If you are using GitLab Development Kit, see [GDK Elasticsearch how-to](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/elasticsearch.md) - If you are using GitLab Development Kit, see [GDK Elasticsearch how-to](https://gitlab.com/gitlab-org/gitlab-development-kit/-/blob/main/doc/howto/elasticsearch.md).
### Omnibus GitLab ### Omnibus GitLab

View file

@ -14,7 +14,7 @@ RSpec.describe RecaptchaHelper, type: :helper do
it 'returns false' do it 'returns false' do
stub_application_setting(recaptcha_enabled: false) stub_application_setting(recaptcha_enabled: false)
expect(helper.show_recaptcha_sign_up?).to be(false) expect(helper.show_recaptcha_sign_up?).to be_falsey
end end
end end
@ -22,7 +22,7 @@ RSpec.describe RecaptchaHelper, type: :helper do
it 'returns true' do it 'returns true' do
stub_application_setting(recaptcha_enabled: true) stub_application_setting(recaptcha_enabled: true)
expect(helper.show_recaptcha_sign_up?).to be(true) expect(helper.show_recaptcha_sign_up?).to be_truthy
end end
end end
end end

View file

@ -36,7 +36,7 @@ module Tooling
CATEGORIES = { CATEGORIES = {
[%r{usage_data\.rb}, %r{^(\+|-).*\s+(count|distinct_count|estimate_batch_distinct_count)\(.*\)(.*)$}] => [:database, :backend, :product_intelligence], [%r{usage_data\.rb}, %r{^(\+|-).*\s+(count|distinct_count|estimate_batch_distinct_count)\(.*\)(.*)$}] => [:database, :backend, :product_intelligence],
%r{\A(ee/)?config/feature_flags/} => :feature_flag, %r{\A((ee|jh)/)?config/feature_flags/} => :feature_flag,
%r{\Adoc/.*(\.(md|png|gif|jpg|yml))\z} => :docs, %r{\Adoc/.*(\.(md|png|gif|jpg|yml))\z} => :docs,
%r{\A(CONTRIBUTING|LICENSE|MAINTENANCE|PHILOSOPHY|PROCESS|README)(\.md)?\z} => :docs, %r{\A(CONTRIBUTING|LICENSE|MAINTENANCE|PHILOSOPHY|PROCESS|README)(\.md)?\z} => :docs,
@ -47,11 +47,11 @@ module Tooling
spec/frontend/tracking/.*\.js | spec/frontend/tracking/.*\.js |
spec/frontend/tracking_spec\.js spec/frontend/tracking_spec\.js
)\z}x => [:frontend, :product_intelligence], )\z}x => [:frontend, :product_intelligence],
%r{\A(ee/)?app/(assets|views)/} => :frontend, %r{\A((ee|jh)/)?app/(assets|views)/} => :frontend,
%r{\A(ee/)?public/} => :frontend, %r{\A((ee|jh)/)?public/} => :frontend,
%r{\A(ee/)?spec/(javascripts|frontend|frontend_integration)/} => :frontend, %r{\A((ee|jh)/)?spec/(javascripts|frontend|frontend_integration)/} => :frontend,
%r{\A(ee/)?vendor/assets/} => :frontend, %r{\A((ee|jh)/)?vendor/assets/} => :frontend,
%r{\A(ee/)?scripts/frontend/} => :frontend, %r{\A((ee|jh)/)?scripts/frontend/} => :frontend,
%r{(\A|/)( %r{(\A|/)(
\.babelrc | \.babelrc |
\.browserslistrc | \.browserslistrc |
@ -74,12 +74,12 @@ module Tooling
\.gitlab/ci/frontend\.gitlab-ci\.yml \.gitlab/ci/frontend\.gitlab-ci\.yml
)\z}x => %i[frontend tooling], )\z}x => %i[frontend tooling],
%r{\A(ee/)?db/(geo/)?(migrate|post_migrate)/} => [:database, :migration], %r{\A((ee|jh)/)?db/(geo/)?(migrate|post_migrate)/} => [:database, :migration],
%r{\A(ee/)?db/(?!fixtures)[^/]+} => [:database], %r{\A((ee|jh)/)?db/(?!fixtures)[^/]+} => [:database],
%r{\A(ee/)?lib/gitlab/(database|background_migration|sql|github_import)(/|\.rb)} => [:database, :backend], %r{\A((ee|jh)/)?lib/gitlab/(database|background_migration|sql|github_import)(/|\.rb)} => [:database, :backend],
%r{\A(app/services/authorized_project_update/find_records_due_for_refresh_service)(/|\.rb)} => [:database, :backend], %r{\A(app/services/authorized_project_update/find_records_due_for_refresh_service)(/|\.rb)} => [:database, :backend],
%r{\A(app/models/project_authorization|app/services/users/refresh_authorized_projects_service)(/|\.rb)} => [:database, :backend], %r{\A(app/models/project_authorization|app/services/users/refresh_authorized_projects_service)(/|\.rb)} => [:database, :backend],
%r{\A(ee/)?app/finders/} => [:database, :backend], %r{\A((ee|jh)/)?app/finders/} => [:database, :backend],
%r{\Arubocop/cop/migration(/|\.rb)} => :database, %r{\Arubocop/cop/migration(/|\.rb)} => :database,
%r{\A(\.gitlab-ci\.yml\z|\.gitlab\/ci)} => :tooling, %r{\A(\.gitlab-ci\.yml\z|\.gitlab\/ci)} => :tooling,
@ -87,22 +87,22 @@ module Tooling
%r{\Alefthook.yml\z} => :tooling, %r{\Alefthook.yml\z} => :tooling,
%r{\A\.editorconfig\z} => :tooling, %r{\A\.editorconfig\z} => :tooling,
%r{Dangerfile\z} => :tooling, %r{Dangerfile\z} => :tooling,
%r{\A(ee/)?(danger/|tooling/danger/)} => :tooling, %r{\A((ee|jh)/)?(danger/|tooling/danger/)} => :tooling,
%r{\A(ee/)?scripts/} => :tooling, %r{\A((ee|jh)/)?scripts/} => :tooling,
%r{\Atooling/} => :tooling, %r{\Atooling/} => :tooling,
%r{(CODEOWNERS)} => :tooling, %r{(CODEOWNERS)} => :tooling,
%r{(tests.yml)} => :tooling, %r{(tests.yml)} => :tooling,
%r{\Alib/gitlab/ci/templates} => :ci_template, %r{\Alib/gitlab/ci/templates} => :ci_template,
%r{\A(ee/)?spec/features/} => :test, %r{\A((ee|jh)/)?spec/features/} => :test,
%r{\A(ee/)?spec/support/shared_examples/features/} => :test, %r{\A((ee|jh)/)?spec/support/shared_examples/features/} => :test,
%r{\A(ee/)?spec/support/shared_contexts/features/} => :test, %r{\A((ee|jh)/)?spec/support/shared_contexts/features/} => :test,
%r{\A(ee/)?spec/support/helpers/features/} => :test, %r{\A((ee|jh)/)?spec/support/helpers/features/} => :test,
%r{\A(ee/)?lib/gitlab/usage_data_counters/.*\.yml\z} => [:product_intelligence], %r{\A((ee|jh)/)?lib/gitlab/usage_data_counters/.*\.yml\z} => [:product_intelligence],
%r{\A(ee/)?config/metrics/((.*\.yml)|(schema\.json))\z} => [:product_intelligence], %r{\A((ee|jh)/)?config/metrics/((.*\.yml)|(schema\.json))\z} => [:product_intelligence],
%r{\A(ee/)?lib/gitlab/usage_data(_counters)?(/|\.rb)} => [:backend, :product_intelligence], %r{\A((ee|jh)/)?lib/gitlab/usage_data(_counters)?(/|\.rb)} => [:backend, :product_intelligence],
%r{\A( %r{\A(
lib/gitlab/tracking\.rb | lib/gitlab/tracking\.rb |
spec/lib/gitlab/tracking_spec\.rb | spec/lib/gitlab/tracking_spec\.rb |
@ -111,21 +111,21 @@ module Tooling
lib/generators/rails/usage_metric_definition_generator\.rb | lib/generators/rails/usage_metric_definition_generator\.rb |
spec/lib/generators/usage_metric_definition_generator_spec\.rb | spec/lib/generators/usage_metric_definition_generator_spec\.rb |
generator_templates/usage_metric_definition/metric_definition\.yml)\z}x => [:backend, :product_intelligence], generator_templates/usage_metric_definition/metric_definition\.yml)\z}x => [:backend, :product_intelligence],
%r{\A(ee/)?app/(?!assets|views)[^/]+} => :backend, %r{\A((ee|jh)/)?app/(?!assets|views)[^/]+} => :backend,
%r{\A(ee/)?(bin|config|generator_templates|lib|rubocop)/} => :backend, %r{\A((ee|jh)/)?(bin|config|generator_templates|lib|rubocop)/} => :backend,
%r{\A(ee/)?spec/} => :backend, %r{\A((ee|jh)/)?spec/} => :backend,
%r{\A(ee/)?vendor/} => :backend, %r{\A((ee|jh)/)?vendor/} => :backend,
%r{\A(Gemfile|Gemfile.lock|Rakefile)\z} => :backend, %r{\A(Gemfile|Gemfile.lock|Rakefile)\z} => :backend,
%r{\A[A-Z_]+_VERSION\z} => :backend, %r{\A[A-Z_]+_VERSION\z} => :backend,
%r{\A\.rubocop((_manual)?_todo)?\.yml\z} => :backend, %r{\A\.rubocop((_manual)?_todo)?\.yml\z} => :backend,
%r{\Afile_hooks/} => :backend, %r{\Afile_hooks/} => :backend,
%r{\A(ee/)?qa/} => :qa, %r{\A((ee|jh)/)?qa/} => :qa,
%r{\Aworkhorse/.*} => :workhorse, %r{\Aworkhorse/.*} => :workhorse,
# Files that don't fit into any category are marked with :none # Files that don't fit into any category are marked with :none
%r{\A(ee/)?changelogs/} => :none, %r{\A((ee|jh)/)?changelogs/} => :none,
%r{\Alocale/gitlab\.pot\z} => :none, %r{\Alocale/gitlab\.pot\z} => :none,
# GraphQL auto generated doc files and schema # GraphQL auto generated doc files and schema