diff --git a/app/controllers/profiles_controller.rb b/app/controllers/profiles_controller.rb index 6cc602fec88..29ae268ef67 100644 --- a/app/controllers/profiles_controller.rb +++ b/app/controllers/profiles_controller.rb @@ -103,8 +103,8 @@ class ProfilesController < Profiles::ApplicationController @username_param ||= user_params.require(:username) end - def user_params - @user_params ||= params.require(:user).permit( + def user_params_attributes + [ :avatar, :bio, :email, @@ -130,6 +130,12 @@ class ProfilesController < Profiles::ApplicationController :pronouns, :pronunciation, status: [:emoji, :message, :availability] - ) + ] + end + + def user_params + @user_params ||= params.require(:user).permit(user_params_attributes) end end + +ProfilesController.prepend_mod diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 96432fa30c9..fe800de5dd8 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -147,8 +147,12 @@ class RegistrationsController < Devise::RegistrationsController resource.persisted? && resource.blocked_pending_approval? end + def sign_up_params_attributes + [:username, :email, :name, :first_name, :last_name, :password] + end + 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 def resource_name diff --git a/app/controllers/users/terms_controller.rb b/app/controllers/users/terms_controller.rb index be670658048..7fbf0faa68b 100644 --- a/app/controllers/users/terms_controller.rb +++ b/app/controllers/users/terms_controller.rb @@ -77,3 +77,5 @@ module Users end end end + +Users::TermsController.prepend_mod diff --git a/app/helpers/recaptcha_helper.rb b/app/helpers/recaptcha_helper.rb index 4ebac1d5b7f..0df62f7b715 100644 --- a/app/helpers/recaptcha_helper.rb +++ b/app/helpers/recaptcha_helper.rb @@ -5,3 +5,5 @@ module RecaptchaHelper !!Gitlab::Recaptcha.enabled? end end + +RecaptchaHelper.prepend_mod diff --git a/app/views/devise/shared/_signup_box.html.haml b/app/views/devise/shared/_signup_box.html.haml index a313ad7d23c..f9649875538 100644 --- a/app/views/devise/shared/_signup_box.html.haml +++ b/app/views/devise/shared/_signup_box.html.haml @@ -57,6 +57,7 @@ pattern: ".{#{@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 } + = render_if_exists 'devise/shared/phone_verification', form: f %div - if show_recaptcha_sign_up? = recaptcha_tags nonce: content_security_policy_nonce diff --git a/app/views/users/terms/index.html.haml b/app/views/users/terms/index.html.haml index 73d0f51f9ac..771ee693120 100644 --- a/app/views/users/terms/index.html.haml +++ b/app/views/users/terms/index.html.haml @@ -1,12 +1,14 @@ - redirect_params = { redirect: @redirect } if @redirect +- accept_term_link = accept_term_path(@term, redirect_params) .card-body.rendered-terms{ data: { qa_selector: 'terms_content' } } = markdown_field(@term, :terms) - if current_user + = render_if_exists 'devise/shared/form_phone_verification', accept_term_link: accept_term_link, inline: true .card-footer.footer-block.clearfix - if can?(current_user, :accept_terms, @term) .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') - else .float-right diff --git a/config/routes.rb b/config/routes.rb index 39a5007effa..8f4c3886e88 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -185,7 +185,7 @@ Rails.application.routes.draw do end Gitlab.jh do - draw :province + draw :global_jh end if ENV['GITLAB_CHAOS_SECRET'] || Rails.env.development? || Rails.env.test? diff --git a/doc/administration/logs.md b/doc/administration/logs.md index a6a2d494224..058437c168a 100644 --- a/doc/administration/logs.md +++ b/doc/administration/logs.md @@ -63,9 +63,6 @@ Depending on your installation method, this file is located at: - Omnibus GitLab: `/var/log/gitlab/gitlab-rails/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 GitLab, thanks to [Lograge](https://github.com/roidrage/lograge/). 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` - 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 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 diff --git a/doc/integration/elasticsearch.md b/doc/integration/elasticsearch.md index 5a08a1fe7f3..9514c298885 100644 --- a/doc/integration/elasticsearch.md +++ b/doc/integration/elasticsearch.md @@ -9,9 +9,8 @@ info: To determine the technical writer assigned to the Stage/Group associated w > Moved to GitLab Premium in 13.9. -This document describes how to enable Advanced Search. After -Advanced Search is enabled, you'll have the benefit of fast search response times -and the advantage of the [special searches](../user/search/advanced_search.md). +This page describes how to enable Advanced Search. When enabled, +Advanced Search provides faster search response times and [improved search features](../user/search/advanced_search.md). ## 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 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 -Elasticsearch and follows Elasticsearch's [End of Life Policy](https://www.elastic.co/support/eol). +The Elasticsearch Integration works with supported versions of +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 -before the actual removal. +before we remove them. ## 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). -The amount of resources (memory, CPU, storage) varies greatly, based on the -amount of data being indexed into the Elasticsearch cluster. According to +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 [Elasticsearch official guidelines](https://www.elastic.co/guide/en/elasticsearch/guide/current/hardware.html#_memory), each node should have: - [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. -- [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. - -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. +- [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. 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. ## Install Elasticsearch 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"). -Be sure to select your version. Providing detailed information on installing -Elasticsearch is out of the scope of this document. +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. -Elasticsearch should be installed on a separate server, whether you install -it yourself or use a cloud hosted offering like Elastic's [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) -service. Running Elasticsearch on the same server as GitLab is not recommended -and can cause a degradation in GitLab instance performance. +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) +service. +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. -**For a single node Elasticsearch cluster, the functional cluster health status -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. +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. -After the data is added to the database or repository and [Elasticsearch is -enabled in the Admin Area](#enable-advanced-search), the search index is -updated automatically. +The search index updates after you: + +- Add data to the database or repository. +- [Enable Elasticsearch](#enable-advanced-search) in the Admin Area. ## 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 named `gitlab-production-`, 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 -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 installations from source or older versions of Omnibus GitLab, [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 diff --git a/spec/helpers/recaptcha_helper_spec.rb b/spec/helpers/recaptcha_helper_spec.rb index e7f9ba5b73a..8ad91a0a217 100644 --- a/spec/helpers/recaptcha_helper_spec.rb +++ b/spec/helpers/recaptcha_helper_spec.rb @@ -14,7 +14,7 @@ RSpec.describe RecaptchaHelper, type: :helper do it 'returns false' do 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 @@ -22,7 +22,7 @@ RSpec.describe RecaptchaHelper, type: :helper do it 'returns true' do 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 diff --git a/tooling/danger/project_helper.rb b/tooling/danger/project_helper.rb index cfc0f9ff774..109f77ed4d1 100644 --- a/tooling/danger/project_helper.rb +++ b/tooling/danger/project_helper.rb @@ -36,7 +36,7 @@ module Tooling CATEGORIES = { [%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{\A(CONTRIBUTING|LICENSE|MAINTENANCE|PHILOSOPHY|PROCESS|README)(\.md)?\z} => :docs, @@ -47,11 +47,11 @@ module Tooling spec/frontend/tracking/.*\.js | spec/frontend/tracking_spec\.js )\z}x => [:frontend, :product_intelligence], - %r{\A(ee/)?app/(assets|views)/} => :frontend, - %r{\A(ee/)?public/} => :frontend, - %r{\A(ee/)?spec/(javascripts|frontend|frontend_integration)/} => :frontend, - %r{\A(ee/)?vendor/assets/} => :frontend, - %r{\A(ee/)?scripts/frontend/} => :frontend, + %r{\A((ee|jh)/)?app/(assets|views)/} => :frontend, + %r{\A((ee|jh)/)?public/} => :frontend, + %r{\A((ee|jh)/)?spec/(javascripts|frontend|frontend_integration)/} => :frontend, + %r{\A((ee|jh)/)?vendor/assets/} => :frontend, + %r{\A((ee|jh)/)?scripts/frontend/} => :frontend, %r{(\A|/)( \.babelrc | \.browserslistrc | @@ -74,12 +74,12 @@ module Tooling \.gitlab/ci/frontend\.gitlab-ci\.yml )\z}x => %i[frontend tooling], - %r{\A(ee/)?db/(geo/)?(migrate|post_migrate)/} => [:database, :migration], - %r{\A(ee/)?db/(?!fixtures)[^/]+} => [:database], - %r{\A(ee/)?lib/gitlab/(database|background_migration|sql|github_import)(/|\.rb)} => [:database, :backend], + %r{\A((ee|jh)/)?db/(geo/)?(migrate|post_migrate)/} => [:database, :migration], + %r{\A((ee|jh)/)?db/(?!fixtures)[^/]+} => [:database], + %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/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{\A(\.gitlab-ci\.yml\z|\.gitlab\/ci)} => :tooling, @@ -87,22 +87,22 @@ module Tooling %r{\Alefthook.yml\z} => :tooling, %r{\A\.editorconfig\z} => :tooling, %r{Dangerfile\z} => :tooling, - %r{\A(ee/)?(danger/|tooling/danger/)} => :tooling, - %r{\A(ee/)?scripts/} => :tooling, + %r{\A((ee|jh)/)?(danger/|tooling/danger/)} => :tooling, + %r{\A((ee|jh)/)?scripts/} => :tooling, %r{\Atooling/} => :tooling, %r{(CODEOWNERS)} => :tooling, %r{(tests.yml)} => :tooling, %r{\Alib/gitlab/ci/templates} => :ci_template, - %r{\A(ee/)?spec/features/} => :test, - %r{\A(ee/)?spec/support/shared_examples/features/} => :test, - %r{\A(ee/)?spec/support/shared_contexts/features/} => :test, - %r{\A(ee/)?spec/support/helpers/features/} => :test, + %r{\A((ee|jh)/)?spec/features/} => :test, + %r{\A((ee|jh)/)?spec/support/shared_examples/features/} => :test, + %r{\A((ee|jh)/)?spec/support/shared_contexts/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/)?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/.*\.yml\z} => [:product_intelligence], + %r{\A((ee|jh)/)?config/metrics/((.*\.yml)|(schema\.json))\z} => [:product_intelligence], + %r{\A((ee|jh)/)?lib/gitlab/usage_data(_counters)?(/|\.rb)} => [:backend, :product_intelligence], %r{\A( lib/gitlab/tracking\.rb | spec/lib/gitlab/tracking_spec\.rb | @@ -111,21 +111,21 @@ module Tooling lib/generators/rails/usage_metric_definition_generator\.rb | spec/lib/generators/usage_metric_definition_generator_spec\.rb | generator_templates/usage_metric_definition/metric_definition\.yml)\z}x => [:backend, :product_intelligence], - %r{\A(ee/)?app/(?!assets|views)[^/]+} => :backend, - %r{\A(ee/)?(bin|config|generator_templates|lib|rubocop)/} => :backend, - %r{\A(ee/)?spec/} => :backend, - %r{\A(ee/)?vendor/} => :backend, + %r{\A((ee|jh)/)?app/(?!assets|views)[^/]+} => :backend, + %r{\A((ee|jh)/)?(bin|config|generator_templates|lib|rubocop)/} => :backend, + %r{\A((ee|jh)/)?spec/} => :backend, + %r{\A((ee|jh)/)?vendor/} => :backend, %r{\A(Gemfile|Gemfile.lock|Rakefile)\z} => :backend, %r{\A[A-Z_]+_VERSION\z} => :backend, %r{\A\.rubocop((_manual)?_todo)?\.yml\z} => :backend, %r{\Afile_hooks/} => :backend, - %r{\A(ee/)?qa/} => :qa, + %r{\A((ee|jh)/)?qa/} => :qa, %r{\Aworkhorse/.*} => :workhorse, # 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, # GraphQL auto generated doc files and schema