diff --git a/app/assets/javascripts/clusters/forms/components/integration_form.vue b/app/assets/javascripts/clusters/forms/components/integration_form.vue index 02f24bcfb85..4265df48fcc 100644 --- a/app/assets/javascripts/clusters/forms/components/integration_form.vue +++ b/app/assets/javascripts/clusters/forms/components/integration_form.vue @@ -114,7 +114,7 @@ export default { class="col-md-6" type="text" /> -
+
{{ s__( "ErrorTracking|If you self-host Sentry, enter your Sentry instance's full URL. If you use Sentry's hosted solution, enter https://sentry.io", @@ -78,7 +78,7 @@ export default {
{{ s__('ErrorTracking|Connection failed. Check Auth Token and try again.') }}
-+
{{ s__( 'ErrorTracking|After adding your Auth Token, select the Connect button to load projects.', diff --git a/app/assets/javascripts/error_tracking_settings/components/project_dropdown.vue b/app/assets/javascripts/error_tracking_settings/components/project_dropdown.vue index cd101f57d4f..b6c592b88d5 100644 --- a/app/assets/javascripts/error_tracking_settings/components/project_dropdown.vue +++ b/app/assets/javascripts/error_tracking_settings/components/project_dropdown.vue @@ -77,7 +77,7 @@ export default {
{{ invalidProjectLabel }}
-+
{{ projectSelectionLabel }}
{{ path }}
+{{ path }}
+
{{ __( 'You should run a new pipeline, because the target branch has changed for this merge request.', diff --git a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue index 79b97802111..9a39fd3e66c 100644 --- a/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue +++ b/app/assets/javascripts/vue_merge_request_widget/components/states/ready_to_merge.vue @@ -646,7 +646,7 @@ export default {
+
+
{{ $options.REGEX_CODE }}
diff --git a/app/assets/stylesheets/framework/forms.scss b/app/assets/stylesheets/framework/forms.scss
index 5a8fc5864e4..34b571780fd 100644
--- a/app/assets/stylesheets/framework/forms.scss
+++ b/app/assets/stylesheets/framework/forms.scss
@@ -156,7 +156,7 @@ label {
}
}
-.form-text.text-muted {
+.form-text {
margin-bottom: 0;
margin-top: #{$grid-size / 2};
font-size: $gl-font-size;
diff --git a/app/assets/stylesheets/page_bundles/ide.scss b/app/assets/stylesheets/page_bundles/ide.scss
index 9b45266d30f..30fa7f98ed4 100644
--- a/app/assets/stylesheets/page_bundles/ide.scss
+++ b/app/assets/stylesheets/page_bundles/ide.scss
@@ -343,7 +343,7 @@ $ide-commit-header-height: 48px;
padding: $grid-size 0;
min-height: 60px;
- &.form-text.text-muted {
+ &.form-text {
margin-left: 0;
right: 0;
}
@@ -574,7 +574,7 @@ $ide-commit-header-height: 48px;
height: 30px;
}
- .form-text.text-muted {
+ .form-text {
margin-top: 2px;
color: var(--ide-link-color, $blue-500);
cursor: pointer;
diff --git a/app/assets/stylesheets/page_bundles/projects.scss b/app/assets/stylesheets/page_bundles/projects.scss
index 7a421cc210b..5c1745b5ef6 100644
--- a/app/assets/stylesheets/page_bundles/projects.scss
+++ b/app/assets/stylesheets/page_bundles/projects.scss
@@ -3,7 +3,7 @@
.new_project,
.edit-project,
.import-project {
- .form-text.text-muted {
+ .form-text {
margin-bottom: 10px;
}
diff --git a/app/assets/stylesheets/page_bundles/settings.scss b/app/assets/stylesheets/page_bundles/settings.scss
index 75fc85e39f5..7322be977c9 100644
--- a/app/assets/stylesheets/page_bundles/settings.scss
+++ b/app/assets/stylesheets/page_bundles/settings.scss
@@ -139,8 +139,8 @@
}
.form-check:first-child,
- .form-check .form-text.text-muted,
- .form-check + .form-text.text-muted {
+ .form-check .form-text,
+ .form-check + .form-text {
margin-top: 0;
}
@@ -153,7 +153,7 @@
}
}
- .form-check .form-text.text-muted {
+ .form-check .form-text {
margin-bottom: $grid-size;
}
}
diff --git a/app/graphql/mutations/ci/job/artifacts_destroy.rb b/app/graphql/mutations/ci/job/artifacts_destroy.rb
index 9d5c551e2ad..ecc51c494b5 100644
--- a/app/graphql/mutations/ci/job/artifacts_destroy.rb
+++ b/app/graphql/mutations/ci/job/artifacts_destroy.rb
@@ -18,10 +18,6 @@ module Mutations
null: false,
description: 'Number of artifacts deleted.'
- def find_object(id:)
- GlobalID::Locator.locate(id)
- end
-
def resolve(id:)
job = authorized_find!(id: id)
diff --git a/app/graphql/mutations/ci/job/base.rb b/app/graphql/mutations/ci/job/base.rb
index 16167866172..127041df13b 100644
--- a/app/graphql/mutations/ci/job/base.rb
+++ b/app/graphql/mutations/ci/job/base.rb
@@ -9,10 +9,6 @@ module Mutations
argument :id, JobID,
required: true,
description: 'ID of the job to mutate.'
-
- def find_object(id:)
- GlobalID::Locator.locate(id)
- end
end
end
end
diff --git a/app/models/current.rb b/app/models/current.rb
index df4eb2b29c4..9dff4318c95 100644
--- a/app/models/current.rb
+++ b/app/models/current.rb
@@ -2,6 +2,8 @@
# rubocop:disable Gitlab/NamespacedClass -- We want this to be top level due to scope of use and no namespace due to ease of calling
class Current < ActiveSupport::CurrentAttributes
+ include Gitlab::InternalEventsTracking
+
class OrganizationNotAssignedError < RuntimeError
def message
'Assign an organization to Current.organization before calling it.'
@@ -39,6 +41,8 @@ class Current < ActiveSupport::CurrentAttributes
Gitlab::ErrorTracking.track_and_raise_for_dev_exception(OrganizationNotAssignedError.new)
end
+ track_organization_call
+
super
end
@@ -52,5 +56,17 @@ class Current < ActiveSupport::CurrentAttributes
def organization_assigned=(value)
organization_assigned || super(value)
end
+
+ def track_organization_call
+ return unless Feature.enabled?(:track_organization_fallback, Feature.current_request)
+ return unless Gitlab::SafeRequestStore[:fallback_organization_used]
+
+ track_internal_event(
+ 'fallback_current_organization_to_default',
+ additional_properties: {
+ label: Gitlab::ApplicationContext.current_context_attribute(:caller_id)
+ }
+ )
+ end
end
# rubocop:enable Gitlab/NamespacedClass
diff --git a/app/models/personal_access_token.rb b/app/models/personal_access_token.rb
index 08ef6c3d339..e9911b6ce72 100644
--- a/app/models/personal_access_token.rb
+++ b/app/models/personal_access_token.rb
@@ -71,7 +71,11 @@ class PersonalAccessToken < ApplicationRecord
validate :expires_at_before_instance_max_expiry_date, on: :create
def revoke!
- update!(revoked: true)
+ if persisted?
+ update_columns(revoked: true, updated_at: Time.zone.now)
+ else
+ self.revoked = true
+ end
end
def active?
diff --git a/app/views/abuse_reports/new.html.haml b/app/views/abuse_reports/new.html.haml
index c65acaa0b91..d35437fa148 100644
--- a/app/views/abuse_reports/new.html.haml
+++ b/app/views/abuse_reports/new.html.haml
@@ -35,7 +35,7 @@
.col-lg-8
= f.label :reason
= f.text_area :message, class: "form-control", rows: 4, required: true
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Explain why you're reporting the user.")
.gl-flex.gl-gap-3
diff --git a/app/views/admin/application_settings/_account_and_limit.html.haml b/app/views/admin/application_settings/_account_and_limit.html.haml
index 6a06f581e2d..0f6c30f7fab 100644
--- a/app/views/admin/application_settings/_account_and_limit.html.haml
+++ b/app/views/admin/application_settings/_account_and_limit.html.haml
@@ -21,7 +21,7 @@
.form-group
= f.label :session_expire_delay, _('Session duration (minutes)'), class: 'label-light'
= f.number_field :session_expire_delay, class: 'form-control gl-form-input', title: _('Maximum duration of a session.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted#session_expire_delay_help_block= _('Restart GitLab to apply changes.')
+ %span.form-text.gl-text-subtle#session_expire_delay_help_block= _('Restart GitLab to apply changes.')
.form-group
= f.label :remember_me_enabled, _('Remember me'), class: 'label-light'
- remember_me_help_link = help_page_path('user/profile/index.md', anchor: 'stay-signed-in-for-two-weeks')
@@ -44,7 +44,7 @@
.gl-mt-3
= _('Internal users')
= f.text_field :user_default_internal_regex, placeholder: _('Regex pattern'), class: 'form-control gl-form-input gl-mt-2'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Specify an email address regex pattern to identify default internal users.')
#{link_to _('Learn more'), help_page_path('administration/external_users.md', anchor: 'set-a-new-user-to-external'), target: '_blank', rel: 'noopener noreferrer'}.
- unless Gitlab.com?
@@ -58,7 +58,7 @@
= f.number_field :deactivate_dormant_users_period, class: 'form-control gl-form-input', min: 90, required: true
#application_setting_deactivate_dormant_users_period_error.form-text.gl-text-red-500.gl-hidden
= _('Please enter a value of 90 days or more')
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Must be 90 days or more.')
.form-group
diff --git a/app/views/admin/application_settings/_ci_cd.html.haml b/app/views/admin/application_settings/_ci_cd.html.haml
index e5a315f2e6a..4f0d5dfc14e 100644
--- a/app/views/admin/application_settings/_ci_cd.html.haml
+++ b/app/views/admin/application_settings/_ci_cd.html.haml
@@ -10,7 +10,7 @@
.form-group
= f.label :auto_devops_domain, s_('AdminSettings|Auto DevOps domain'), class: 'label-bold'
= f.text_field :auto_devops_domain, class: 'form-control gl-form-input', placeholder: 'example.com'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_("AdminSettings|The default domain to use for Auto Review Apps and Auto Deploy stages in all projects.")
= link_to _('Learn more.'), help_page_path('topics/autodevops/stages.md', anchor: 'auto-review-apps'), target: '_blank', rel: 'noopener noreferrer'
@@ -22,22 +22,22 @@
.form-group
= f.label :shared_runners_text, s_('AdminSettings|Instance runners details'), class: 'label-bold'
= f.text_area :shared_runners_text, class: 'form-control gl-form-input', rows: 4
- .form-text.text-muted= s_('AdminSettings|Add a custom message with details about instance runners. The message is visible when you view runners for projects and groups. Markdown is supported.')
+ .form-text.gl-text-subtle= s_('AdminSettings|Add a custom message with details about instance runners. The message is visible when you view runners for projects and groups. Markdown is supported.')
.form-group
= f.label :max_artifacts_size, _('Maximum artifacts size (MB)'), class: 'label-bold'
= f.number_field :max_artifacts_size, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("The maximum file size for job artifacts.")
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration.md', anchor: 'maximum-artifacts-size')
.form-group
= f.label :max_artifacts_content_include_size, _('Maximum artifacts archive size (bytes)'), class: 'label-bold'
= f.number_field :max_artifacts_content_include_size, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("The maximum file size for job artifacts archive.")
.form-group
= f.label :default_artifacts_expire_in, _('Default artifacts expiration'), class: 'label-bold'
= f.text_field :default_artifacts_expire_in, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= html_escape(_("Set the default expiration time for job artifacts in all projects. Set to %{code_open}0%{code_close} to never expire artifacts by default. If no unit is written, it defaults to seconds. For example, these are all equivalent: %{code_open}3600%{code_close}, %{code_open}60 minutes%{code_close}, or %{code_open}one hour%{code_close}.")) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration.md', anchor: 'default-artifacts-expiration')
.form-group
@@ -45,7 +45,7 @@
.form-group
= f.label :archive_builds_in_human_readable, _('Archive jobs'), class: 'label-bold'
= f.text_field :archive_builds_in_human_readable, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= html_escape(_("Jobs older than the configured time are considered expired and are archived. Archived jobs can no longer be retried. Leave empty to never archive jobs automatically. The default unit is in days, but you can use other units, for example %{code_open}15 days%{code_close}, %{code_open}1 month%{code_close}, %{code_open}2 years%{code_close}. Minimum value is 1 day.")) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration.md', anchor: 'archive-jobs')
.form-group
@@ -53,17 +53,17 @@
.form-group
= f.label :ci_max_includes, s_('AdminSettings|Maximum includes'), class: 'label-bold'
= f.number_field :ci_max_includes, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('AdminSettings|The maximum number of included files per pipeline.')
.form-group
= f.label :downstream_pipeline_trigger_limit_per_project_user_sha, s_('AdminSettings|Maximum downstream pipeline trigger rate'), class: 'label-bold'
= f.number_field :downstream_pipeline_trigger_limit_per_project_user_sha, min: 0, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('AdminSettings|The maximum number of downstream pipelines that can be triggered per minute (for a given project, user, and commit).')
.form-group
= f.label :ci_config_path, _('Default CI/CD configuration file'), class: 'label-bold'
= f.text_field :default_ci_config_path, class: 'form-control gl-form-input', placeholder: '.gitlab-ci.yml'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= _("The default CI/CD configuration file and path for new projects.").html_safe
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings.md', anchor: 'specify-a-custom-cicd-configuration-file'), target: '_blank', rel: 'noopener noreferrer'
.form-group
@@ -119,7 +119,7 @@
.form-group
= f.label :ci_needs_size_limit, plan_limit_setting_description(:ci_needs_size_limit)
= f.number_field :ci_needs_size_limit, class: 'form-control gl-form-input'
- .form-text.text-muted= s_('AdminSettings|This limit cannot be disabled. Set to 0 to block all job (needs) dependencies.')
+ .form-text.gl-text-subtle= s_('AdminSettings|This limit cannot be disabled. Set to 0 to block all job (needs) dependencies.')
.form-group
= f.label :ci_registered_group_runners, plan_limit_setting_description(:ci_registered_group_runners)
= f.number_field :ci_registered_group_runners, class: 'form-control gl-form-input'
diff --git a/app/views/admin/application_settings/_default_branch.html.haml b/app/views/admin/application_settings/_default_branch.html.haml
index 8b0f661d574..85749a8e1e1 100644
--- a/app/views/admin/application_settings/_default_branch.html.haml
+++ b/app/views/admin/application_settings/_default_branch.html.haml
@@ -7,7 +7,7 @@
.form-group
= f.label :default_branch_name, _('Initial default branch name'), class: 'label-light'
= f.text_field :default_branch_name, placeholder: Gitlab::DefaultBranch.value, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= (s_("AdminSettings|If not specified at the group or instance level, the default is %{default_initial_branch_name}. Does not affect existing repositories.") % { default_initial_branch_name: fallback_branch_name }).html_safe
= render 'shared/default_branch_protection_defaults', f: f, field: :application_setting, value: @application_setting.default_branch_protection_defaults
diff --git a/app/views/admin/application_settings/_diagramsnet.html.haml b/app/views/admin/application_settings/_diagramsnet.html.haml
index c9d8a314e71..5bfcb3922b0 100644
--- a/app/views/admin/application_settings/_diagramsnet.html.haml
+++ b/app/views/admin/application_settings/_diagramsnet.html.haml
@@ -17,7 +17,7 @@
.form-group
= f.label :diagramsnet_url, _('Diagrams.net URL'), class: 'label-bold'
= f.text_field :diagramsnet_url, class: 'form-control gl-form-input', placeholder: 'https://embed.diagrams.net'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('The hostname of your diagrams.net server.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_diff_limits.html.haml b/app/views/admin/application_settings/_diff_limits.html.haml
index f8bd816b5c6..7d01943e25a 100644
--- a/app/views/admin/application_settings/_diff_limits.html.haml
+++ b/app/views/admin/application_settings/_diff_limits.html.haml
@@ -5,7 +5,7 @@
.form-group
= f.label :diff_max_patch_bytes, _('Maximum diff patch size (bytes)'), class: 'label-light'
= f.number_field :diff_max_patch_bytes, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= _("Diff files surpassing this limit will be presented as 'too large' and won't be expandable.")
= link_to sprite_icon('question-o'),
@@ -14,7 +14,7 @@
= f.label :diff_max_files, _('Maximum files in a diff'), class: 'label-light'
= f.number_field :diff_max_files, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= _("Diff files surpassing this limit will be presented as 'too large' and won't be expandable.")
= link_to sprite_icon('question-o'),
@@ -23,7 +23,7 @@
= f.label :diff_max_lines, _('Maximum lines in a diff'), class: 'label-light'
= f.number_field :diff_max_lines, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= _("Diff files surpassing this limit will be presented as 'too large' and won't be expandable.")
= link_to sprite_icon('question-o'),
diff --git a/app/views/admin/application_settings/_eks.html.haml b/app/views/admin/application_settings/_eks.html.haml
index 2e9cbd8d82e..81294bf9112 100644
--- a/app/views/admin/application_settings/_eks.html.haml
+++ b/app/views/admin/application_settings/_eks.html.haml
@@ -19,13 +19,13 @@
.form-group
= f.label :eks_access_key_id, _('AWS access key ID (Optional)'), class: 'label-bold'
= f.text_field :eks_access_key_id, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Only required if not using role instance credentials.')
.form-group
= f.label :eks_secret_access_key, _('AWS secret access key (Optional)'), class: 'label-bold'
= f.password_field :eks_secret_access_key, autocomplete: 'off', class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Only required if not using role instance credentials.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_email.html.haml b/app/views/admin/application_settings/_email.html.haml
index 705761dbdb4..4a1b774ce32 100644
--- a/app/views/admin/application_settings/_email.html.haml
+++ b/app/views/admin/application_settings/_email.html.haml
@@ -9,7 +9,7 @@
.form-group
= f.label :commit_email_hostname, _('Custom hostname (for private commit emails)'), class: 'label-bold'
= f.text_field :commit_email_hostname, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- commit_email_hostname_docs_link = link_to _('Learn more'), help_page_path('administration/settings/email.md', anchor: 'custom-hostname-for-private-commit-emails'), target: '_blank', rel: 'noopener noreferrer'
= _("Hostname used in private commit emails. %{learn_more}").html_safe % { learn_more: commit_email_hostname_docs_link }
@@ -21,7 +21,7 @@
.form-group
= f.label :deactivation_email_additional_text, _('Additional text for deactivation email')
= f.text_area :deactivation_email_additional_text, class: 'form-control gl-form-input', rows: 4
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Text added to the body of user deactivation email messages. 1000 character limit.')
- if Feature.enabled?(:pat_expiry_inherited_members_notification, :instance)
diff --git a/app/views/admin/application_settings/_external_authorization_service_form.html.haml b/app/views/admin/application_settings/_external_authorization_service_form.html.haml
index 2ea4bbb1102..b0e951f2613 100644
--- a/app/views/admin/application_settings/_external_authorization_service_form.html.haml
+++ b/app/views/admin/application_settings/_external_authorization_service_form.html.haml
@@ -20,31 +20,31 @@
.form-group
= f.label :external_authorization_service_url, s_('ExternalAuthorization|Service URL'), class: 'label-bold'
= f.text_field :external_authorization_service_url, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_url_help_text
.form-group
= f.label :external_authorization_service_timeout, s_('ExternalAuthorization|External authorization request timeout (seconds)'), class: 'label-bold'
= f.number_field :external_authorization_service_timeout, class: 'form-control gl-form-input', min: 0.001, max: 10, step: 0.001
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_timeout_help_text
.form-group
= f.label :external_auth_client_cert, s_('ExternalAuthorization|Client authorization certificate'), class: 'label-bold'
= f.text_area :external_auth_client_cert, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_client_certificate_help_text
.form-group
= f.label :external_auth_client_key, s_('ExternalAuthorization|Client authorization key'), class: 'label-bold'
= f.text_area :external_auth_client_key, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_client_key_help_text
.form-group
= f.label :external_auth_client_key_pass, s_('ExternalAuthorization|Client authorization key password (optional)'), class: 'label-bold'
= f.password_field :external_auth_client_key_pass, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_client_pass_help_text
.form-group
= f.label :external_authorization_service_default_label, s_('ExternalAuthorization|Default classification label'), class: 'label-bold'
= f.text_field :external_authorization_service_default_label, class: 'form-control gl-form-input'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_authorization_client_url_help_text
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_gitaly.html.haml b/app/views/admin/application_settings/_gitaly.html.haml
index f459ff5abc4..152bd2d2860 100644
--- a/app/views/admin/application_settings/_gitaly.html.haml
+++ b/app/views/admin/application_settings/_gitaly.html.haml
@@ -5,17 +5,17 @@
.form-group
= f.label :gitaly_timeout_default, _('Default timeout'), class: 'label-bold'
= f.number_field :gitaly_timeout_default, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Timeout for most Gitaly operations (in seconds).')
.form-group
= f.label :gitaly_timeout_fast, _('Fast timeout'), class: 'label-bold'
= f.number_field :gitaly_timeout_fast, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Timeout for the fastest Gitaly operations (in seconds).')
.form-group
= f.label :gitaly_timeout_medium, _('Medium timeout'), class: 'label-bold'
= f.number_field :gitaly_timeout_medium, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Timeout for moderately fast Gitaly operations (in seconds). Provide a value between Default timeout and Fast timeout.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml b/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
index 0a5d3282d9b..6e4c6c9143e 100644
--- a/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
+++ b/app/views/admin/application_settings/_gitlab_shell_operation_limits.html.haml
@@ -13,5 +13,5 @@
.form-group
= f.label :gitlab_shell_operation_limit, s_('ShellOperations|Maximum number of Git operations per minute'), class: 'gl-font-bold'
= f.number_field :gitlab_shell_operation_limit, class: 'form-control gl-form-input'
- %span.form-text.text-muted= _('Set to 0 to disable the limit.')
+ %span.form-text.gl-text-subtle= _('Set to 0 to disable the limit.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_gitpod.html.haml b/app/views/admin/application_settings/_gitpod.html.haml
index 1cf6abb0723..ab09d09db86 100644
--- a/app/views/admin/application_settings/_gitpod.html.haml
+++ b/app/views/admin/application_settings/_gitpod.html.haml
@@ -17,7 +17,7 @@
.form-group
= f.label :gitpod_url, s_('Gitpod|Gitpod URL'), class: 'label-bold'
= f.text_field :gitpod_url, class: 'form-control gl-form-input', placeholder: s_('Gitpod|https://gitpod.example.com')
- .form-text.text-muted
+ .form-text.gl-text-subtle
- help_link = link_to('', help_page_path('integration/gitpod.md', anchor: 'enable-gitpod-in-your-user-preferences', target: '_blank', rel: 'noopener noreferrer'))
= s_('Gitpod|The URL to your Gitpod instance configured to read your GitLab projects, such as https://gitpod.example.com.')
= safe_format(s_('Gitpod|To use the integration, each user must also enable Gitpod on their GitLab account. %{help_link_start}How do I enable it?%{help_link_end}'), tag_pair(help_link, :help_link_start, :help_link_end))
diff --git a/app/views/admin/application_settings/_grafana.html.haml b/app/views/admin/application_settings/_grafana.html.haml
index 402a6cceb6c..146c7d3ee6d 100644
--- a/app/views/admin/application_settings/_grafana.html.haml
+++ b/app/views/admin/application_settings/_grafana.html.haml
@@ -9,6 +9,6 @@
.form-group
= f.label :grafana_url, _('Grafana URL'), class: 'label-bold'
= f.text_field :grafana_url, class: 'form-control gl-form-input', placeholder: '/-/grafana'
- %span.form-text.text-muted#support_help_block= _('URL of the Grafana instance to link to from the Metrics Dashboard menu item.')
+ %span.form-text.gl-text-subtle#support_help_block= _('URL of the Grafana instance to link to from the Metrics Dashboard menu item.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_help_page.html.haml b/app/views/admin/application_settings/_help_page.html.haml
index 314c3e0ca49..87b83fda6ce 100644
--- a/app/views/admin/application_settings/_help_page.html.haml
+++ b/app/views/admin/application_settings/_help_page.html.haml
@@ -5,18 +5,18 @@
.form-group
= f.label :help_page_text, _('Additional text to show on the Help page'), class: 'label-bold'
= f.text_area :help_page_text, class: 'form-control gl-form-input', rows: 4
- .form-text.text-muted= _('Markdown enabled.')
+ .form-text.gl-text-subtle= _('Markdown enabled.')
.form-group
= f.gitlab_ui_checkbox_component :help_page_hide_commercial_content, _('Hide marketing-related entries from the Help page')
.form-group
= f.label :help_page_support_url, _('Support page URL'), class: 'label-bold'
= f.text_field :help_page_support_url, class: 'form-control gl-form-input', placeholder: 'https://company.example.com/get-help', :'aria-describedby' => 'support_help_block'
- %span.form-text.text-muted#support_help_block= _('Alternate support URL for Help page and Help dropdown.')
+ %span.form-text.gl-text-subtle#support_help_block= _('Alternate support URL for Help page and Help dropdown.')
.form-group
= f.label :help_page_documentation_base_url, _('Documentation pages URL'), class: 'gl-font-bold'
= f.text_field :help_page_documentation_base_url, class: 'form-control gl-form-input', placeholder: 'https://docs.gitlab.com'
- docs_link_url = help_page_path('administration/settings/help_page.md', anchor: 'destination-requirements')
- docs_link_start = ''.html_safe % { url: docs_link_url }
- %span.form-text.text-muted#support_help_block= html_escape(_('Requests for pages at %{code_start}%{help_text_url}%{code_end} redirect to the URL. The destination must meet certain requirements. %{docs_link_start}Learn more%{docs_link_end}.')) % { code_start: ''.html_safe, help_text_url: help_url, code_end: '
'.html_safe, docs_link_start: docs_link_start, docs_link_end: ''.html_safe }
+ %span.form-text.gl-text-subtle#support_help_block= html_escape(_('Requests for pages at %{code_start}%{help_text_url}%{code_end} redirect to the URL. The destination must meet certain requirements. %{docs_link_start}Learn more%{docs_link_end}.')) % { code_start: ''.html_safe, help_text_url: help_url, code_end: '
'.html_safe, docs_link_start: docs_link_start, docs_link_end: ''.html_safe }
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_import_and_export.html.haml b/app/views/admin/application_settings/_import_and_export.html.haml
index 31b7cccce20..1ad280e4b01 100644
--- a/app/views/admin/application_settings/_import_and_export.html.haml
+++ b/app/views/admin/application_settings/_import_and_export.html.haml
@@ -31,26 +31,26 @@
.form-group
= f.label :max_export_size, _('Maximum export size (MiB)'), class: 'label-light'
= f.number_field :max_export_size, class: 'form-control gl-form-input', title: _('Maximum size of export files.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted= _('Set to 0 for no size limit.')
+ %span.form-text.gl-text-subtle= _('Set to 0 for no size limit.')
.form-group
= f.label :max_import_size, _('Maximum import size (MiB)'), class: 'label-light'
= f.number_field :max_import_size, class: 'form-control gl-form-input', title: _('Maximum size of import files.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted= _('Only effective when remote storage is enabled. Set to 0 for no size limit.')
+ %span.form-text.gl-text-subtle= _('Only effective when remote storage is enabled. Set to 0 for no size limit.')
.form-group
= f.label :max_import_remote_file_size, s_('Import|Maximum import remote file size (MiB)'), class: 'label-light'
= f.number_field :max_import_remote_file_size, class: 'form-control gl-form-input', title: s_('Import|Maximum remote file size for imports from external object storages. For example, AWS S3.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted= _('Set to 0 for no size limit.')
+ %span.form-text.gl-text-subtle= _('Set to 0 for no size limit.')
.form-group
= f.label :bulk_import_max_download_file_size, s_('BulkImport|Direct transfer maximum download file size (MiB)'), class: 'label-light'
= f.number_field :bulk_import_max_download_file_size, class: 'form-control gl-form-input', title: s_('BulkImport|Maximum download file size when importing from source GitLab instances by direct transfer.'), data: { toggle: 'tooltip', container: 'body' }
.form-group
= f.label :max_decompressed_archive_size, s_('Import|Maximum decompressed file size for archives from imports (MiB)'), class: 'label-light'
= f.number_field :max_decompressed_archive_size, class: 'form-control gl-form-input', title: s_('Import|Maximum size of decompressed archive.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted= _('Set to 0 for no size limit.')
+ %span.form-text.gl-text-subtle= _('Set to 0 for no size limit.')
.form-group
= f.label :decompress_archive_file_timeout, s_('Import|Timeout for decompressing archived files (seconds)'), class: 'label-light'
= f.number_field :decompress_archive_file_timeout, class: 'form-control gl-form-input', title: s_('Import|Timeout for decompressing archived files.'), data: { toggle: 'tooltip', container: 'body' }
- %span.form-text.text-muted= _('Set to 0 to disable timeout.')
+ %span.form-text.gl-text-subtle= _('Set to 0 to disable timeout.')
.form-group
= f.label :concurrent_github_import_jobs_limit, s_('Import|Maximum number of simultaneous import jobs for GitHub importer'), class: 'label-light'
= f.number_field :concurrent_github_import_jobs_limit, class: 'form-control gl-form-input', title: s_('Import|Maximum number of simultaneous import jobs for GitHub importer'), data: { toggle: 'tooltip', container: 'body' }
diff --git a/app/views/admin/application_settings/_ip_limits.html.haml b/app/views/admin/application_settings/_ip_limits.html.haml
index 64a6e374074..a3343d82caf 100644
--- a/app/views/admin/application_settings/_ip_limits.html.haml
+++ b/app/views/admin/application_settings/_ip_limits.html.haml
@@ -68,7 +68,7 @@
= f.label :rate_limiting_response_text, class: 'label-bold' do
= _('Plain-text response to send to clients that hit a rate limit')
= f.text_area :rate_limiting_response_text, placeholder: ::Gitlab::Throttle::DEFAULT_RATE_LIMITING_RESPONSE_TEXT, class: 'form-control gl-form-input', rows: 5
- .form-text.text-muted
+ .form-text.gl-text-subtle
= html_escape(_("If blank, defaults to %{code_open}Retry later%{code_close}.")) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= f.submit _('Save changes'), data: { testid: 'save-changes-button' }, pajamas_button: true
diff --git a/app/views/admin/application_settings/_kroki.html.haml b/app/views/admin/application_settings/_kroki.html.haml
index 180209f1966..7fbd2ede999 100644
--- a/app/views/admin/application_settings/_kroki.html.haml
+++ b/app/views/admin/application_settings/_kroki.html.haml
@@ -17,13 +17,13 @@
.form-group
= f.label :kroki_url, 'Kroki URL', class: 'label-bold'
= f.text_field :kroki_url, class: 'form-control gl-form-input', placeholder: 'http://your-kroki-instance:8000'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- install_link_url = 'https://docs.kroki.io/kroki/setup/install/'
- install_link_start = ''.html_safe % { url: install_link_url }
= html_escape(_('Use the public cloud instance URL (%{kroki_public_url}) or %{install_link_start}install Kroki%{install_link_end} on your own infrastructure and use your own instance URL.')) % { kroki_public_url: 'https://kroki.io
'.html_safe, install_link_start: install_link_start, install_link_end: ''.html_safe }
.form-group
= f.label :kroki_formats, _('Additional diagram formats'), class: 'label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- container_link_url = 'https://docs.kroki.io/kroki/setup/install/#images'
- container_link_start = ''.html_safe % { url: container_link_url }
= html_escape(_('To use the additional formats, you must start the required %{container_link_start}companion containers%{container_link_end}.')) % { container_link_start: container_link_start, container_link_end: ''.html_safe }
diff --git a/app/views/admin/application_settings/_localization.html.haml b/app/views/admin/application_settings/_localization.html.haml
index 25038e6f221..5fec902b22d 100644
--- a/app/views/admin/application_settings/_localization.html.haml
+++ b/app/views/admin/application_settings/_localization.html.haml
@@ -5,7 +5,7 @@
.form-group
= f.label :first_day_of_week, _('Default first day of the week'), class: 'label-bold'
= f.select :first_day_of_week, first_day_of_week_choices, {}, class: 'form-control'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Default first day of the week in calendars and date pickers.')
= link_to _('Learn more.'), help_page_path('administration/settings/localization.md', anchor: 'change-the-default-first-day-of-the-week'), target: '_blank', rel: 'noopener noreferrer'
@@ -19,7 +19,7 @@
= f.label :default_preferred_language, class: 'label-bold' do
= _('Default language')
= f.select :default_preferred_language, default_preferred_language_choices, {}, class: 'gl-form-select custom-select'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Default language for users who are not logged in.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_note_limits.html.haml b/app/views/admin/application_settings/_note_limits.html.haml
index ed56f35dee4..b7623c3dbf4 100644
--- a/app/views/admin/application_settings/_note_limits.html.haml
+++ b/app/views/admin/application_settings/_note_limits.html.haml
@@ -8,7 +8,7 @@
.form-group
= f.label :notes_create_limit_allowlist, _('Users to exclude from the rate limit'), class: 'label-bold'
= f.text_area :notes_create_limit_allowlist_raw, class: 'form-control gl-form-input', rows: 5, aria: { describedBy: 'note-create-limits-allowlist-field-description' }
- .form-text.text-muted{ id: 'note-create-limits-allowlist-field-description' }
+ .form-text.gl-text-subtle{ id: 'note-create-limits-allowlist-field-description' }
= _('List of users who are allowed to exceed the rate limit. Example: username1, username2')
diff --git a/app/views/admin/application_settings/_outbound.html.haml b/app/views/admin/application_settings/_outbound.html.haml
index 727cb8c3849..606afe35f5f 100644
--- a/app/views/admin/application_settings/_outbound.html.haml
+++ b/app/views/admin/application_settings/_outbound.html.haml
@@ -24,7 +24,7 @@
= f.label :outbound_local_requests_allowlist_raw, class: 'label-bold' do
= s_('OutboundRequests|Local IP addresses and domain names that hooks and integrations can access')
= f.text_area :outbound_local_requests_allowlist_raw, placeholder: "example.com, 192.168.1.1, xn--itlab-j1a.com", class: 'form-control gl-form-input', rows: 8
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= s_('OutboundRequests|Requests can be made to these IP addresses and domains even when local requests are not allowed. IP ranges such as %{code_start}1:0:0:0:0:0:0:0/124%{code_end} and %{code_start}127.0.0.0/28%{code_end} are supported. Domain wildcards are not supported. To separate entries, use commas, semicolons, or newlines. The allowlist can have a maximum of 1000 entries. Domains must be IDNA-encoded.').html_safe % { code_start: ''.html_safe, code_end: '
'.html_safe }
= link_to _('Learn more.'), help_page_path('security/webhooks.md', anchor: 'allow-outbound-requests-to-certain-ip-addresses-and-domains'), target: '_blank', rel: 'noopener noreferrer'
diff --git a/app/views/admin/application_settings/_pages.html.haml b/app/views/admin/application_settings/_pages.html.haml
index 6e83e06775f..ccb4ca8ab98 100644
--- a/app/views/admin/application_settings/_pages.html.haml
+++ b/app/views/admin/application_settings/_pages.html.haml
@@ -18,19 +18,19 @@
.form-group
= f.label :max_pages_size, _('Maximum size of pages (MiB)'), class: 'label-bold'
= f.number_field :max_pages_size, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- link = link_to('', help_page_path('administration/pages/index.md', anchor: 'set-maximum-size-of-gitlab-pages-site-in-a-project'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_('AdminSettings|Set the maximum size of GitLab Pages per project (0 for unlimited). %{link_start}Learn more%{link_end}.'), tag_pair(link, :link_start, :link_end))
.form-group
= f.label :max_pages_custom_domains_per_project, s_('AdminSettings|Maximum number of custom domains per project'), class: 'label-bold'
= f.number_field :max_pages_custom_domains_per_project, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- link = link_to('', help_page_path('administration/pages/index.md', anchor: 'set-maximum-number-of-gitlab-pages-custom-domains-for-a-project'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_('AdminSettings|Set the maximum number of GitLab Pages custom domains per project (0 for unlimited). %{link_start}Learn more%{link_end}.'), tag_pair(link, :link_start, :link_end))
.form-group
= f.label :pages_extra_deployments_default_expiry_seconds, s_('AdminSettings|Default expiration time for parallel deployments (in seconds)'), class: 'label-bold'
= f.number_field :pages_extra_deployments_default_expiry_seconds, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- link = link_to('', help_page_path('user/project/pages/index.md', anchor: 'parallel-deployments'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_('AdminSettings|Set the default time after which parallel deployments expire (0 for unlimited). %{link_start}What are parallel deployments%{link_end}?'), tag_pair(link, :link_start, :link_end))
%h5
@@ -41,7 +41,7 @@
.form-group
= f.label :lets_encrypt_notification_email, s_("AdminSettings|Let's Encrypt email"), class: 'label-bold'
= f.text_field :lets_encrypt_notification_email, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
- link = link_to('', help_page_path('administration/pages/index.md', anchor: 'lets-encrypt-integration'), target: '_blank', rel: 'noopener noreferrer')
= safe_format(s_("AdminSettings|A Let's Encrypt account will be configured for this GitLab instance using this email address. You will receive emails to warn of expiring certificates. %{link_start}Learn more%{link_end}."), tag_pair(link, :link_start, :link_end))
.form-group
diff --git a/app/views/admin/application_settings/_performance.html.haml b/app/views/admin/application_settings/_performance.html.haml
index b61510ef891..cda88339ebf 100644
--- a/app/views/admin/application_settings/_performance.html.haml
+++ b/app/views/admin/application_settings/_performance.html.haml
@@ -10,17 +10,17 @@
.form-group
= f.label :raw_blob_request_limit, _('Raw blob request rate limit per minute'), class: 'label-bold'
= f.number_field :raw_blob_request_limit, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Maximum number of requests per minute for each raw path (default is 300). Set to 0 to disable throttling.')
.form-group
= f.label :push_event_hooks_limit, class: 'label-bold'
= f.number_field :push_event_hooks_limit, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Maximum number of changes (branches or tags) in a single push above which webhooks and integrations are not triggered (default is 3). Setting to 0 does not disable throttling.')
.form-group
= f.label :push_event_activities_limit, class: 'label-bold'
= f.number_field :push_event_activities_limit, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Maximum number of changes (branches or tags) in a single push above which a bulk push event is created (default is 3). Setting to 0 does not disable throttling.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_plantuml.html.haml b/app/views/admin/application_settings/_plantuml.html.haml
index b79d1030d46..56855d9d583 100644
--- a/app/views/admin/application_settings/_plantuml.html.haml
+++ b/app/views/admin/application_settings/_plantuml.html.haml
@@ -17,7 +17,7 @@
.form-group
= f.label :plantuml_url, _('PlantUML URL'), class: 'label-bold'
= f.text_field :plantuml_url, class: 'form-control gl-form-input', placeholder: 'http://your-plantuml-instance:8080'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('The hostname of your PlantUML server.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml
index 80b8ced3bc9..25e4bf11f32 100644
--- a/app/views/admin/application_settings/_prometheus.html.haml
+++ b/app/views/admin/application_settings/_prometheus.html.haml
@@ -15,7 +15,7 @@
.form-group
= f.label :metrics_method_call_threshold, _('Method call threshold (ms)'), class: 'label-bold'
= f.number_field :metrics_method_call_threshold, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
Only track method calls that take longer to complete than the given duration.
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_protected_paths.html.haml b/app/views/admin/application_settings/_protected_paths.html.haml
index cd17e4bdec3..848fa6529a8 100644
--- a/app/views/admin/application_settings/_protected_paths.html.haml
+++ b/app/views/admin/application_settings/_protected_paths.html.haml
@@ -20,7 +20,7 @@
= f.label :protected_paths_for_get_request, class: 'label-bold' do
= _('Paths with rate limiting for GET requests')
= f.text_area :protected_paths_for_get_request_raw, class: 'form-control gl-form-input', rows: 10
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
- link = link_to('', 'https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-a-relative-url-for-gitlab', target: '_blank', rel: 'noopener noreferrer')
= safe_format(_('All paths are relative to the GitLab URL. Do not include %{relative_url_link_start}relative URLs%{relative_url_link_end}.'), tag_pair(link, :relative_url_link_start, :relative_url_link_end))
diff --git a/app/views/admin/application_settings/_realtime.html.haml b/app/views/admin/application_settings/_realtime.html.haml
index 2b8b023baea..90f46ee13d3 100644
--- a/app/views/admin/application_settings/_realtime.html.haml
+++ b/app/views/admin/application_settings/_realtime.html.haml
@@ -5,7 +5,7 @@
.form-group
= f.label :polling_interval_multiplier, _('Polling interval multiplier'), class: 'label-bold'
= f.text_field :polling_interval_multiplier, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Multiplier to apply to polling intervals. Decimal values are supported. Defaults to 1.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_registry.html.haml b/app/views/admin/application_settings/_registry.html.haml
index 2f55e74cbb5..d9ca06f47aa 100644
--- a/app/views/admin/application_settings/_registry.html.haml
+++ b/app/views/admin/application_settings/_registry.html.haml
@@ -16,17 +16,17 @@
.form-group
= f.label :container_registry_delete_tags_service_timeout, _('Cleanup policy maximum processing time (seconds)'), class: 'label-bold'
= f.number_field :container_registry_delete_tags_service_timeout, min: 0, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Tags are deleted until the timeout is reached. Any remaining tags are included the next time the policy runs. To remove the time limit, set it to 0.")
.form-group
= f.label :container_registry_expiration_policies_worker_capacity, _('Cleanup policy maximum workers running concurrently'), class: 'label-bold'
= f.number_field :container_registry_expiration_policies_worker_capacity, min: 0, class: 'form-control'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Cleanup policies are executed by background workers. This setting defines the maximum number of workers that can run concurrently. Set it to 0 to remove all workers and not execute the cleanup policies.")
.form-group
= f.label :container_registry_cleanup_tags_service_max_list_size, _('Cleanup policy maximum number of tags to be deleted'), class: 'label-bold'
= f.number_field :container_registry_cleanup_tags_service_max_list_size, min: 0, class: 'form-control'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("The maximum number of tags that a single worker accepts for cleanup. If the number of tags goes above this limit, the list of tags to delete is truncated to this number. To remove this limit, set it to 0.")
.form-group
- help_text = _("When enabled, cleanup policies execute faster but put more load on Redis.")
diff --git a/app/views/admin/application_settings/_repository_check.html.haml b/app/views/admin/application_settings/_repository_check.html.haml
index 5751ae9059a..da1b5417795 100644
--- a/app/views/admin/application_settings/_repository_check.html.haml
+++ b/app/views/admin/application_settings/_repository_check.html.haml
@@ -9,7 +9,7 @@
_("Enable repository checks"),
help_text: html_escape(s_('Run %{code_start}git fsck%{code_end} periodically in all project and wiki repositories to look for silent disk corruption issues.')) % { code_start: ''.html_safe, code_end: '
'.html_safe }
.form-group
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("If you get a lot of false alarms from repository checks, you can clear all repository check information from the database.")
- clear_repository_checks_link = _('Clear all repository checks')
- clear_repository_checks_message = _('This clears repository check states for all projects in the database and cannot be undone. Are you sure?')
@@ -28,7 +28,7 @@
.form-group
= f.label :housekeeping_optimize_repository_period, _('Optimize repository period'), class: 'label-bold'
= f.number_field :housekeeping_optimize_repository_period, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Number of Git pushes after which Gitaly is asked to optimize a repository.')
.sub-section
%h4= s_("AdminSettings|Inactive project deletion")
diff --git a/app/views/admin/application_settings/_repository_size_limit_setting_registration_features_cta.html.haml b/app/views/admin/application_settings/_repository_size_limit_setting_registration_features_cta.html.haml
index 040a22ff2ac..144b7b1374e 100644
--- a/app/views/admin/application_settings/_repository_size_limit_setting_registration_features_cta.html.haml
+++ b/app/views/admin/application_settings/_repository_size_limit_setting_registration_features_cta.html.haml
@@ -4,5 +4,5 @@
= form.label :disabled_repository_size_limit, class: 'label-bold' do
= _('Size limit per repository (MiB)')
= form.number_field :disabled_repository_size_limit, value: '', class: 'form-control gl-form-input', disabled: true
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= render 'shared/registration_features_discovery_message'
diff --git a/app/views/admin/application_settings/_repository_static_objects.html.haml b/app/views/admin/application_settings/_repository_static_objects.html.haml
index b301ec15a0e..6a6ae0a175f 100644
--- a/app/views/admin/application_settings/_repository_static_objects.html.haml
+++ b/app/views/admin/application_settings/_repository_static_objects.html.haml
@@ -6,13 +6,13 @@
= f.label :static_objects_external_storage_url, class: 'label-bold' do
= _('External storage URL')
= f.text_field :static_objects_external_storage_url, class: 'form-control gl-form-input'
- %span.form-text.text-muted#static_objects_external_storage_url_help_block
+ %span.form-text.gl-text-subtle#static_objects_external_storage_url_help_block
= _('URL of the external storage to serve the repository static objects.')
.form-group
= f.label :static_objects_external_storage_auth_token, class: 'label-bold' do
= _('External storage authentication token')
= f.text_field :static_objects_external_storage_auth_token, class: 'form-control gl-form-input'
- %span.form-text.text-muted#static_objects_external_storage_auth_token_help_block
+ %span.form-text.gl-text-subtle#static_objects_external_storage_auth_token_help_block
= _('Secure token that identifies an external storage request.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_search_limits.html.haml b/app/views/admin/application_settings/_search_limits.html.haml
index 6692da85f9f..d1f04c5bcbc 100644
--- a/app/views/admin/application_settings/_search_limits.html.haml
+++ b/app/views/admin/application_settings/_search_limits.html.haml
@@ -15,7 +15,7 @@
.form-group
= f.label :search_rate_limit_allowlist, _('Users to exclude from the rate limit'), class: 'label-bold'
= f.text_area :search_rate_limit_allowlist_raw, class: 'form-control gl-form-input', rows: 5, aria: { describedBy: 'search-rate-limit-allowlist-field-description' }
- .form-text.text-muted{ id: 'search-rate-limit-allowlist-field-description' }
+ .form-text.gl-text-subtle{ id: 'search-rate-limit-allowlist-field-description' }
= _('List of users who are allowed to exceed the rate limit. Example: username1, username2')
diff --git a/app/views/admin/application_settings/_security_txt.html.haml b/app/views/admin/application_settings/_security_txt.html.haml
index f95d6278f18..c638c41e032 100644
--- a/app/views/admin/application_settings/_security_txt.html.haml
+++ b/app/views/admin/application_settings/_security_txt.html.haml
@@ -12,6 +12,6 @@
= f.label :security_txt_content do
= s_("SecurityTxt|Content for security.txt")
= f.text_area :security_txt_content, class: 'form-control gl-form-input', rows: 8
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('SecurityTxt|When present, this will be publicly available at %{codeOpen}https://gitlab.example.com/.well-known/security.txt%{codeClose}. Maximum 2048 characters.').html_safe % {codeOpen: ''.html_safe, codeClose: '
'.html_safe}
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_sentry.html.haml b/app/views/admin/application_settings/_sentry.html.haml
index 7058a4b5cca..fda99777b74 100644
--- a/app/views/admin/application_settings/_sentry.html.haml
+++ b/app/views/admin/application_settings/_sentry.html.haml
@@ -10,22 +10,22 @@
.form-group
= f.label :sentry_environment, _('Environment'), class: 'label-light'
= f.text_field :sentry_environment, class: 'form-control gl-form-input', placeholder: Rails.env
- .form-text.text-muted
+ .form-text.gl-text-subtle
= safe_format(s_('AdminSettings|%{setting_name} value used by both Rails and Browser JavaScript SDKs.'), setting_name: content_tag(:code, 'environment'))
.form-group
= f.label :sentry_dsn, _('DSN'), class: 'label-light'
= f.text_field :sentry_dsn, class: 'form-control gl-form-input', placeholder: 'https://public@sentry.example.com/1'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= safe_format(s_('AdminSettings|%{setting_name} value used by the Rails SDK.'), setting_name: content_tag(:code, 'dsn'))
.form-group
= f.label :sentry_clientside_dsn, _('Clientside DSN'), class: 'label-light'
= f.text_field :sentry_clientside_dsn, class: 'form-control gl-form-input', placeholder: 'https://public@sentry.example.com/2'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= safe_format(s_('AdminSettings|%{setting_name} value used by the Browser JavaScript SDK.'), setting_name: content_tag(:code, 'dsn'))
.form-group
= f.label :sentry_clientside_traces_sample_rate, _('Clientside traces sample rate'), class: 'label-light'
= f.number_field :sentry_clientside_traces_sample_rate, class: 'form-control gl-form-input', placeholder: '0.5', min: 0, max: 1, step: 0.001
- .form-text.text-muted
+ .form-text.gl-text-subtle
= safe_format(s_('AdminSettings|%{setting_name} value used by the Browser JavaScript SDK.'), setting_name: content_tag(:code, 'tracesSampleRate'))
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_sidekiq_job_limits.html.haml b/app/views/admin/application_settings/_sidekiq_job_limits.html.haml
index 068a8155450..dbb1be42a66 100644
--- a/app/views/admin/application_settings/_sidekiq_job_limits.html.haml
+++ b/app/views/admin/application_settings/_sidekiq_job_limits.html.haml
@@ -5,17 +5,17 @@
.form-group
= f.label :sidekiq_job_limiter_mode, _('Limiting mode'), class: 'label-bold'
= f.select :sidekiq_job_limiter_mode, sidekiq_job_limiter_modes_for_select, {}, class: 'form-control'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= sidekiq_job_limiter_mode_help_text
.form-group
= f.label :sidekiq_job_limiter_compression_threshold_bytes, _('Sidekiq job compression threshold (bytes)'), class: 'label-bold'
= f.number_field :sidekiq_job_limiter_compression_threshold_bytes, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Threshold in bytes at which to compress Sidekiq job arguments.')
.form-group
= f.label :sidekiq_job_limiter_limit_bytes, _('Sidekiq job size limit (bytes)'), class: 'label-bold'
= f.number_field :sidekiq_job_limiter_limit_bytes, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Threshold in bytes at which to reject Sidekiq jobs. Set this to 0 to if you don't want to limit Sidekiq jobs.")
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_signin.html.haml b/app/views/admin/application_settings/_signin.html.haml
index d11c713777b..4412fc29020 100644
--- a/app/views/admin/application_settings/_signin.html.haml
+++ b/app/views/admin/application_settings/_signin.html.haml
@@ -33,7 +33,7 @@
.form-group
= f.label :two_factor_authentication, _('Two-factor grace period'), class: 'label-bold'
= f.number_field :two_factor_grace_period, min: 0, class: 'form-control gl-form-input', placeholder: '0'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Maximum time that users are allowed to skip the setup of two-factor authentication (in hours). Set to 0 (zero) to enforce at next sign in.')
.form-group
= f.label :admin_mode, _('Admin Mode'), class: 'label-bold'
@@ -52,9 +52,9 @@
.form-group
= f.label :home_page_url, _('Home page URL'), class: 'label-bold'
= f.text_field :home_page_url, class: 'form-control gl-form-input', placeholder: 'http://company.example.com', :'aria-describedby' => 'home_help_block'
- %span.form-text.text-muted#home_help_block= _("Direct non-authenticated users to this page.")
+ %span.form-text.gl-text-subtle#home_help_block= _("Direct non-authenticated users to this page.")
.form-group
= f.label :after_sign_out_path, _('Sign-out page URL'), class: 'label-bold'
= f.text_field :after_sign_out_path, class: 'form-control gl-form-input', placeholder: 'http://company.example.com', :'aria-describedby' => 'after_sign_out_path_help_block'
- %span.form-text.text-muted#home_help_block= _("Direct users to this page after they sign out.")
+ %span.form-text.gl-text-subtle#home_help_block= _("Direct users to this page after they sign out.")
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_slack.html.haml b/app/views/admin/application_settings/_slack.html.haml
index 5ec77f7df73..fec410ba90c 100644
--- a/app/views/admin/application_settings/_slack.html.haml
+++ b/app/views/admin/application_settings/_slack.html.haml
@@ -36,17 +36,17 @@
.form-group
= f.label :slack_app_secret, s_('SlackIntegration|Client secret'), class: 'label-bold'
= f.text_field :slack_app_secret, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('SlackIntegration|Used for authenticating OAuth requests from the GitLab for Slack app.')
.form-group
= f.label :slack_app_signing_secret, s_('SlackIntegration|Signing secret'), class: 'label-bold'
= f.text_field :slack_app_signing_secret, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('SlackIntegration|Used for authenticating API requests from the GitLab for Slack app.')
.form-group
= f.label :slack_app_verification_token, s_('SlackIntegration|Verification token'), class: 'label-bold'
= f.text_field :slack_app_verification_token, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('SlackIntegration|Used only for authenticating slash commands from the GitLab for Slack app. This method of authentication is deprecated by Slack.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_snowplow.html.haml b/app/views/admin/application_settings/_snowplow.html.haml
index 65f3ea29fe5..4d69228abe3 100644
--- a/app/views/admin/application_settings/_snowplow.html.haml
+++ b/app/views/admin/application_settings/_snowplow.html.haml
@@ -18,17 +18,17 @@
.form-group
= f.label :snowplow_collector_hostname, _('Collector hostname'), class: 'label-light'
= f.text_field :snowplow_collector_hostname, class: 'form-control gl-form-input', placeholder: 'snowplow.example.com'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('The hostname of your Snowplow collector.')
.form-group
= f.label :snowplow_app_id, _('App ID'), class: 'label-light'
= f.text_field :snowplow_app_id, class: 'form-control gl-form-input', placeholder: 'gitlab'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('The ID of the application.')
.form-group
= f.label :snowplow_cookie_domain, _('Cookie domain'), class: 'label-light'
= f.text_field :snowplow_cookie_domain, class: 'form-control gl-form-input', placeholder: '.your-gitlab-instance.com'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('The Snowplow cookie domain.')
= f.submit _('Save changes'), data: { testid: 'save-changes-button' }, pajamas_button: true
diff --git a/app/views/admin/application_settings/_sourcegraph.html.haml b/app/views/admin/application_settings/_sourcegraph.html.haml
index 40a6266c066..88961900806 100644
--- a/app/views/admin/application_settings/_sourcegraph.html.haml
+++ b/app/views/admin/application_settings/_sourcegraph.html.haml
@@ -21,6 +21,6 @@
.form-group
= f.label :sourcegraph_url, s_('SourcegraphAdmin|Sourcegraph URL'), class: 'label-bold'
= f.text_field :sourcegraph_url, class: 'form-control gl-form-input', placeholder: s_('SourcegraphAdmin|https://sourcegraph.example.com')
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('SourcegraphAdmin|Configure the URL to a Sourcegraph instance which can read your GitLab projects.')
= f.submit s_('SourcegraphAdmin|Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_spam.html.haml b/app/views/admin/application_settings/_spam.html.haml
index 764fa6c99f8..bbef0f0f21c 100644
--- a/app/views/admin/application_settings/_spam.html.haml
+++ b/app/views/admin/application_settings/_spam.html.haml
@@ -18,7 +18,7 @@
.form-group
= f.label :recaptcha_site_key, _('reCAPTCHA site key'), class: 'label-bold'
= f.text_field :recaptcha_site_key, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Generate site and private keys at")
%a{ href: 'http://www.google.com/recaptcha', target: 'blank', rel: 'noopener noreferrer' } http://www.google.com/recaptcha
@@ -53,7 +53,7 @@
.form-group
= f.label :akismet_api_key, _('Akismet API Key'), class: 'label-bold'
= f.text_field :akismet_api_key, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Generate API key at %{site}").html_safe % { site: link_to('http://www.akismet.com', 'http://www.akismet.com', target: 'blank', ref: 'noopener noreferrer') }
%h5
@@ -66,13 +66,13 @@
.form-group
= f.label :unique_ips_limit_per_user, _('IP addresses per user'), class: 'label-bold'
= f.number_field :unique_ips_limit_per_user, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Maximum number of unique IP addresses per user.")
.form-group
= f.label :unique_ips_limit_time_window, _('IP address expiration time'), class: 'label-bold'
= f.number_field :unique_ips_limit_time_window, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("How many seconds an IP counts toward the IP address limit.")
%h5
@@ -87,6 +87,6 @@
.form-group
= f.label :spam_check_api_key, _('Spam Check API key'), class: 'gl-font-bold'
= f.text_field :spam_check_api_key, class: 'form-control gl-form-input'
- .form-text.text-muted= _('The API key used by GitLab for accessing the Spam Check service endpoint.')
+ .form-text.gl-text-subtle= _('The API key used by GitLab for accessing the Spam Check service endpoint.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_terminal.html.haml b/app/views/admin/application_settings/_terminal.html.haml
index b07db09d06c..1bc4fd2855a 100644
--- a/app/views/admin/application_settings/_terminal.html.haml
+++ b/app/views/admin/application_settings/_terminal.html.haml
@@ -5,6 +5,6 @@
.form-group
= f.label :terminal_max_session_time, _('Max session time'), class: 'label-bold'
= f.number_field :terminal_max_session_time, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Maximum time, in seconds, for a web terminal websocket connection. 0 for unlimited.')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_terms.html.haml b/app/views/admin/application_settings/_terms.html.haml
index 8da441d5245..ca4d44abee7 100644
--- a/app/views/admin/application_settings/_terms.html.haml
+++ b/app/views/admin/application_settings/_terms.html.haml
@@ -8,7 +8,7 @@
= f.label :terms do
= _("Terms of Service Agreement and Privacy Policy")
= f.text_area :terms, class: 'form-control gl-form-input', rows: 8
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("Markdown supported.")
= link_to _('What is Markdown?'), help_page_path('user/markdown.md'), target: '_blank', rel: 'noopener noreferrer'
= f.submit _("Save changes"), pajamas_button: true
diff --git a/app/views/admin/application_settings/_terraform_limits.html.haml b/app/views/admin/application_settings/_terraform_limits.html.haml
index bdb0ba5cc85..cf524ec36ab 100644
--- a/app/views/admin/application_settings/_terraform_limits.html.haml
+++ b/app/views/admin/application_settings/_terraform_limits.html.haml
@@ -5,7 +5,7 @@
.form-group
= f.label :max_terraform_state_size_bytes, s_('TerraformLimits|Terraform state size limit (bytes)'), class: 'label-bold'
= f.number_field :max_terraform_state_size_bytes, class: 'form-control gl-form-input'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_("TerraformLimits|Maximum file size (in bytes) of Terraform state files. Set to 0 for no limit.")
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_users_api_limits.html.haml b/app/views/admin/application_settings/_users_api_limits.html.haml
index 7dad581f885..ddeb4bd7710 100644
--- a/app/views/admin/application_settings/_users_api_limits.html.haml
+++ b/app/views/admin/application_settings/_users_api_limits.html.haml
@@ -8,7 +8,7 @@
.form-group
= f.label :users_get_by_id_limit_allowlist_raw, _('Users to exclude from the rate limit'), class: 'label-bold'
= f.text_area :users_get_by_id_limit_allowlist_raw, class: 'form-control gl-form-input', rows: 5, aria: { describedBy: 'users-api-limit-users-allowlist-field-description' }
- .form-text.text-muted{ id: 'users-api-limit-users-allowlist-field-description' }
+ .form-text.gl-text-subtle{ id: 'users-api-limit-users-allowlist-field-description' }
= _('List of users who are allowed to exceed the rate limit. Example: username1, username2')
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/admin/application_settings/_visibility_and_access.html.haml b/app/views/admin/application_settings/_visibility_and_access.html.haml
index bd38de542ea..291adb36881 100644
--- a/app/views/admin/application_settings/_visibility_and_access.html.haml
+++ b/app/views/admin/application_settings/_visibility_and_access.html.haml
@@ -33,13 +33,13 @@
.form-group
%label.label-bold= _('Enabled Git access protocols')
= select(:application_setting, :enabled_git_access_protocol, [['Both SSH and HTTP(S)', nil], ['Only SSH', 'ssh'], ['Only HTTP(S)', 'http']], {}, class: 'form-control')
- %span.form-text.text-muted#clone-protocol-help
+ %span.form-text.gl-text-subtle#clone-protocol-help
= _('Allow only the selected protocols to be used for Git access.')
.form-group
= f.label :custom_http_clone_url_root, _('Custom Git clone URL for HTTP(S)'), class: 'label-bold'
= f.text_field :custom_http_clone_url_root, class: 'form-control gl-form-input', placeholder: 'https://git.example.com', :'aria-describedby' => 'custom_http_clone_url_root_help_block'
- %span.form-text.text-muted#custom_http_clone_url_root_help_block
+ %span.form-text.gl-text-subtle#custom_http_clone_url_root_help_block
= _('Replaces the clone URL root.')
- Gitlab::SSHPublicKey.supported_types.each do |type|
diff --git a/app/views/admin/applications/_form.html.haml b/app/views/admin/applications/_form.html.haml
index c5185f05585..e094951a00f 100644
--- a/app/views/admin/applications/_form.html.haml
+++ b/app/views/admin/applications/_form.html.haml
@@ -12,7 +12,7 @@
= f.label :redirect_uri
= f.text_area :redirect_uri, class: 'form-control gl-form-input', data: { testid: 'redirect-uri-field' }
= doorkeeper_errors_for application, :redirect_uri
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
Use one line per URI
= content_tag :div, class: 'form-group row' do
diff --git a/app/views/admin/hooks/_form.html.haml b/app/views/admin/hooks/_form.html.haml
index 9f71297c700..e12d7216bdf 100644
--- a/app/views/admin/hooks/_form.html.haml
+++ b/app/views/admin/hooks/_form.html.haml
@@ -3,7 +3,7 @@
.form-group
= form.label :url, _('URL'), class: 'label-bold'
= form.text_field :url, class: 'form-control gl-form-input'
- %p.form-text.text-muted= _('URL must be percent-encoded if necessary.')
+ %p.form-text.gl-text-subtle= _('URL must be percent-encoded if necessary.')
.form-group
= form.label :name, s_('Webhooks|Name (optional)'), class: 'label-bold'
= form.text_field :name, value: hook.name, class: 'form-control gl-form-input gl-form-input-xl'
@@ -13,7 +13,7 @@
.form-group
= form.label :token, _('Secret token'), class: 'label-bold'
= form.password_field :token, value: hook.masked_token, autocomplete: 'new-password', class: 'form-control gl-form-input gl-max-w-48'
- %p.form-text.text-muted= _('Use this token to validate received payloads.')
+ %p.form-text.gl-text-subtle= _('Use this token to validate received payloads.')
.form-group
= form.label :url, _('Trigger'), class: 'label-bold gl-mb-0'
.form-text.text-secondary.gl-mb-5= _('System hooks are triggered on sets of events like creating a project or adding an SSH key. You can also enable extra triggers, such as push events.')
diff --git a/app/views/admin/initial_setup/new.html.haml b/app/views/admin/initial_setup/new.html.haml
index c2381c14b0b..003923badfa 100644
--- a/app/views/admin/initial_setup/new.html.haml
+++ b/app/views/admin/initial_setup/new.html.haml
@@ -14,7 +14,7 @@
.form-group
= f.label :email, _('Email')
= f.email_field :email, class: "form-control gl-form-input", required: true, autocomplete: 'off', value: @user.email, autofocus: true, title: _('Please provide a valid email address.')
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Please use an email address or domain you control.')
.form-group
diff --git a/app/views/clusters/clusters/_advanced_settings.html.haml b/app/views/clusters/clusters/_advanced_settings.html.haml
index bb41b577127..0088cb1f9e3 100644
--- a/app/views/clusters/clusters/_advanced_settings.html.haml
+++ b/app/views/clusters/clusters/_advanced_settings.html.haml
@@ -28,7 +28,7 @@
include_subgroups: true.to_s,
membership: true.to_s,
selected: @cluster.management_project_id } }
- %p.text-muted.-gl-mt-5
+ %p.gl-text-subtle.-gl-mt-5
= html_escape(s_('ClusterIntegration|A cluster management project can be used to run deployment jobs with Kubernetes %{code_open}cluster-admin%{code_close} privileges.')) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to _('More information'), help_page_path('user/clusters/management_project.md'), target: '_blank', rel: 'noopener noreferrer'
= field.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/clusters/clusters/_namespace.html.haml b/app/views/clusters/clusters/_namespace.html.haml
index 34576b6e5af..b06d72facec 100644
--- a/app/views/clusters/clusters/_namespace.html.haml
+++ b/app/views/clusters/clusters/_namespace.html.haml
@@ -6,9 +6,9 @@
.form-group
= platform_field.label :namespace, s_('ClusterIntegration|Project namespace prefix (optional, unique)'), class: 'label-bold'
= platform_field.text_field :namespace, class: 'form-control'
- %small.form-text.text-muted= '%{help_text} %{help_link}'.html_safe % { help_text: managed_namespace_help_text, help_link: managed_namespace_help_link }
+ %small.form-text.gl-text-subtle= '%{help_text} %{help_link}'.html_safe % { help_text: managed_namespace_help_text, help_link: managed_namespace_help_link }
.js-namespace.hidden
.form-group
= platform_field.label :namespace, s_('ClusterIntegration|Project namespace (optional, unique)'), class: 'label-bold'
= platform_field.text_field :namespace, class: 'form-control', disabled: true
- %small.form-text.text-muted= '%{help_text}'.html_safe % { help_text: non_managed_namespace_help_text }
+ %small.form-text.gl-text-subtle= '%{help_text}'.html_safe % { help_text: non_managed_namespace_help_text }
diff --git a/app/views/clusters/clusters/_provider_details_form.html.haml b/app/views/clusters/clusters/_provider_details_form.html.haml
index 5343e2637d3..1124cac3df3 100644
--- a/app/views/clusters/clusters/_provider_details_form.html.haml
+++ b/app/views/clusters/clusters/_provider_details_form.html.haml
@@ -41,7 +41,7 @@
.form-check
= platform_field.check_box :authorization_type, { disabled: true, inline: true, class: 'form-check-input' }, 'rbac', 'abac'
= platform_field.label :authorization_type, s_('ClusterIntegration|RBAC-enabled cluster'), class: 'form-check-label label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('ClusterIntegration|Enable this setting if using role-based access control (RBAC).')
= s_('ClusterIntegration|This option will allow you to install applications on RBAC clusters.')
@@ -49,7 +49,7 @@
.form-check
= field.check_box :managed, { class: 'js-gl-managed form-check-input' }
= field.label :managed, s_('ClusterIntegration|GitLab-managed cluster'), class: 'form-check-label label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('ClusterIntegration|Allow GitLab to manage namespaces and service accounts for this cluster.')
= link_to _('More information'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer'
@@ -57,7 +57,7 @@
.form-check
= field.check_box :namespace_per_environment, { class: 'form-check-input' }
= field.label :namespace_per_environment, s_('ClusterIntegration|Namespace per environment'), class: 'form-check-label label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('ClusterIntegration|Deploy each environment to its own namespace. Otherwise, environments within a project share a project-wide namespace. Note that anyone who can trigger a deployment of a namespace can read its secrets. If modified, existing environments will use their current namespaces until the cluster cache is cleared.')
= link_to _('More information'), help_page_path('user/project/clusters/deploy_to_cluster.md', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
diff --git a/app/views/clusters/clusters/user/_form.html.haml b/app/views/clusters/clusters/user/_form.html.haml
index 71fef5ec322..f53cf7c80fb 100644
--- a/app/views/clusters/clusters/user/_form.html.haml
+++ b/app/views/clusters/clusters/user/_form.html.haml
@@ -19,7 +19,7 @@
.form-group
= field.label :environment_scope, s_('ClusterIntegration|Environment scope'), class: 'label-bold required'
= field.text_field :environment_scope, required: true, title: s_('ClusterIntegration|Environment scope is required.'), class: 'form-control'
- %small.form-text.text-muted
+ %small.form-text.gl-text-subtle
= s_('ClusterIntegration|Choose which of your environments will use this cluster.')
= field.fields_for :platform_kubernetes, @user_cluster.platform_kubernetes do |platform_kubernetes_field|
@@ -27,7 +27,7 @@
= platform_kubernetes_field.label :api_url, s_('ClusterIntegration|API URL'), class: 'label-bold required'
= platform_kubernetes_field.url_field :api_url, required: true,
title: s_('ClusterIntegration|API URL should be a valid http/https url.'), class: 'form-control'
- %small.form-text.text-muted
+ %small.form-text.gl-text-subtle
= '%{help_text} %{help_link}'.html_safe % { help_text: api_url_help_text, help_link: more_info_link }
.form-group
@@ -36,27 +36,27 @@
rows: '10',
placeholder: s_('ClusterIntegration|Certificate Authority bundle (PEM format)'),
class: 'form-control'
- %small.form-text.text-muted
+ %small.form-text.gl-text-subtle
= '%{help_text} %{help_link}'.html_safe % { help_text: ca_cert_help_text, help_link: more_info_link }
.form-group
= platform_kubernetes_field.label :token, s_('ClusterIntegration|Service Token'), class: 'label-bold required'
= platform_kubernetes_field.text_field :token, required: true, title: s_('ClusterIntegration|Service token is required.'), autocomplete: 'off', class: 'form-control'
- %small.form-text.text-muted
+ %small.form-text.gl-text-subtle
= '%{help_text} %{help_link}'.html_safe % { help_text: token_help_text, help_link: more_info_link }
.form-group
.form-check
= platform_kubernetes_field.check_box :authorization_type, { inline: true, class: 'form-check-input' }, 'rbac', 'abac'
= platform_kubernetes_field.label :authorization_type, s_('ClusterIntegration|RBAC-enabled cluster'), class: 'form-check-label label-bold'
- %small.form-text.text-muted
+ %small.form-text.gl-text-subtle
= '%{help_text} %{help_link}'.html_safe % { help_text: rbac_help_text, help_link: rbac_help_link }
.form-group
.form-check
= field.check_box :managed, { class: 'js-gl-managed form-check-input' }
= field.label :managed, s_('ClusterIntegration|GitLab-managed cluster'), class: 'form-check-label label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('ClusterIntegration|Allow GitLab to manage namespaces and service accounts for this cluster.')
= link_to _('Learn more.'), help_page_path('user/project/clusters/gitlab_managed_clusters.md'), target: '_blank', rel: 'noopener noreferrer'
@@ -64,7 +64,7 @@
.form-check
= field.check_box :namespace_per_environment, { class: 'form-check-input' }
= field.label :namespace_per_environment, s_('ClusterIntegration|Namespace per environment'), class: 'form-check-label label-bold'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('ClusterIntegration|Deploy each environment to its own namespace. Otherwise, environments within a project share a project-wide namespace. Note that anyone who can trigger a deployment of a namespace can read its secrets. If modified, existing environments will use their current namespaces until the cluster cache is cleared.')
= link_to _('Learn more.'), help_page_path('user/project/clusters/deploy_to_cluster.md', anchor: 'custom-namespace'), target: '_blank', rel: 'noopener noreferrer'
diff --git a/app/views/devise/passwords/new.html.haml b/app/views/devise/passwords/new.html.haml
index b3c915ea887..56282dc2c70 100644
--- a/app/views/devise/passwords/new.html.haml
+++ b/app/views/devise/passwords/new.html.haml
@@ -4,7 +4,7 @@
.form-group
= f.label :email, _('Email')
= f.email_field :email, class: "form-control gl-form-input", required: true, autocomplete: 'off', value: params[:user_email], autofocus: true, title: _('Please provide a valid email address.')
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Requires your primary or verified secondary GitLab email address.')
.form-group
diff --git a/app/views/devise/shared/_totp_recovery_code_or_webauthn.html.haml b/app/views/devise/shared/_totp_recovery_code_or_webauthn.html.haml
index 2803f1db7d2..63e58557723 100644
--- a/app/views/devise/shared/_totp_recovery_code_or_webauthn.html.haml
+++ b/app/views/devise/shared/_totp_recovery_code_or_webauthn.html.haml
@@ -6,7 +6,7 @@
= f.label :otp_attempt, _('Enter verification code')
-# Note: we use inputmode="numeric", because TOTP. However, recovery codes are alphanumeric.
= f.text_field :otp_attempt, class: 'form-control gl-form-input', required: true, autofocus: true, autocomplete: 'off', inputmode: 'numeric', title: _('This field is required.'), data: { testid: 'two-fa-code-field' }
- %p.form-text.text-muted.hint
+ %p.form-text.gl-text-subtle.hint
= _("Enter the code from your two-factor authenticator app. If you've lost your device, you can enter one of your recovery codes.")
- if render_remember_me
diff --git a/app/views/groups/settings/_general.html.haml b/app/views/groups/settings/_general.html.haml
index 478204553dc..2643d8d324b 100644
--- a/app/views/groups/settings/_general.html.haml
+++ b/app/views/groups/settings/_general.html.haml
@@ -7,7 +7,7 @@
.form-group.col-md-5
= f.label :name, s_('Groups|Group name'), class: 'label-bold'
= f.text_field :name, class: 'form-control', data: { testid: 'group-name-field' }
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= s_('Groups|Must start with letter, digit, emoji, or underscore. Can also contain periods, dashes, spaces, and parentheses.')
.form-group.col-md-4
diff --git a/app/views/groups/settings/_git_access_protocols.html.haml b/app/views/groups/settings/_git_access_protocols.html.haml
index c6d32cae760..bddfa2e6eaa 100644
--- a/app/views/groups/settings/_git_access_protocols.html.haml
+++ b/app/views/groups/settings/_git_access_protocols.html.haml
@@ -3,5 +3,5 @@
= f.label _('Enabled Git access protocols'), class: 'label-bold'
= f.select :enabled_git_access_protocol, options_for_select(enabled_git_access_protocol_options_for_group, group.enabled_git_access_protocol), {}, class: 'form-control', disabled: !::Gitlab::CurrentSettings.enabled_git_access_protocol.blank?
- if !::Gitlab::CurrentSettings.enabled_git_access_protocol.blank?
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("This setting has been configured at the instance level and cannot be overridden per group")
diff --git a/app/views/groups/settings/_ip_restriction_registration_features_cta.html.haml b/app/views/groups/settings/_ip_restriction_registration_features_cta.html.haml
index 3067220ea8f..2d9085d4158 100644
--- a/app/views/groups/settings/_ip_restriction_registration_features_cta.html.haml
+++ b/app/views/groups/settings/_ip_restriction_registration_features_cta.html.haml
@@ -4,5 +4,5 @@
= f.label :disabled_ip_restriction_ranges, class: 'label-bold' do
= _('Allow access to the following IP addresses')
= f.text_field :disabled_ip_restriction_ranges, value: '', class: 'form-control', disabled: true
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= render 'shared/registration_features_discovery_message'
diff --git a/app/views/groups/settings/_remove_dormant_members.html.haml b/app/views/groups/settings/_remove_dormant_members.html.haml
index f040cb05112..bfd3eacdb92 100644
--- a/app/views/groups/settings/_remove_dormant_members.html.haml
+++ b/app/views/groups/settings/_remove_dormant_members.html.haml
@@ -14,5 +14,5 @@
disabled: !group.namespace_settings&.remove_dormant_members?
#group_remove_dormant_members_period_error.form-text.gl-text-red-500.gl-hidden
= _('Please enter a value of 90 days or more')
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Must be 90 days or more.')
diff --git a/app/views/groups/settings/_two_factor_auth.html.haml b/app/views/groups/settings/_two_factor_auth.html.haml
index e7bd0392105..9e22902f5fa 100644
--- a/app/views/groups/settings/_two_factor_auth.html.haml
+++ b/app/views/groups/settings/_two_factor_auth.html.haml
@@ -13,7 +13,7 @@
.form-group
= f.label :two_factor_grace_period, _('Delay 2FA enforcement (hours)')
= f.text_field :two_factor_grace_period, class: 'form-control form-control-sm w-auto gl-form-input gl-mb-3'
- .form-text.text-muted= _("The maximum amount of time users have to set up two-factor authentication before it's enforced.")
+ .form-text.gl-text-subtle= _("The maximum amount of time users have to set up two-factor authentication before it's enforced.")
- unless group.has_parent?
.form-group
= f.gitlab_ui_checkbox_component :allow_mfa_for_subgroups,
diff --git a/app/views/groups/settings/ci_cd/_form.html.haml b/app/views/groups/settings/ci_cd/_form.html.haml
index a77af729638..eab1e966410 100644
--- a/app/views/groups/settings/ci_cd/_form.html.haml
+++ b/app/views/groups/settings/ci_cd/_form.html.haml
@@ -5,7 +5,7 @@
.form-group
= f.label :max_artifacts_size, _('Maximum artifacts size'), class: 'label-bold'
= f.number_field :max_artifacts_size, class: 'form-control'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= _("The maximum file size in megabytes for individual job artifacts.")
= link_to _('Learn more.'), help_page_path('administration/settings/continuous_integration.md', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer'
= f.submit _('Save changes'), pajamas_button: true
diff --git a/app/views/groups/settings/repository/_default_branch.html.haml b/app/views/groups/settings/repository/_default_branch.html.haml
index c5f281f852e..e79e1177db2 100644
--- a/app/views/groups/settings/repository/_default_branch.html.haml
+++ b/app/views/groups/settings/repository/_default_branch.html.haml
@@ -12,7 +12,7 @@
.form-group
= f.label :default_branch_name, _('Initial default branch name'), class: 'label-light'
= f.text_field :default_branch_name, value: group.namespace_settings&.default_branch_name, placeholder: Gitlab::DefaultBranch.value(object: @group), class: 'form-control'
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= (s_("GroupSettings|If not specified at the group or instance level, the default is %{default_initial_branch_name}. Does not affect existing repositories.") % { default_initial_branch_name: fallback_branch_name }).html_safe
= render 'groups/settings/default_branch_protection_defaults', f: f, group: @group
diff --git a/app/views/import/manifest/_form.html.haml b/app/views/import/manifest/_form.html.haml
index c21ed15334a..f1368d48ad8 100644
--- a/app/views/import/manifest/_form.html.haml
+++ b/app/views/import/manifest/_form.html.haml
@@ -10,14 +10,14 @@
input_id: 'group_id',
input_name: 'group_id',
root_url: root_url } }
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Choose the top-level group for your repository imports.')
.form-group
= label_tag :manifest, class: 'label-bold' do
= _('Manifest')
= file_field_tag :manifest, class: 'form-control-file w-auto', required: true
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Import multiple repositories by uploading a manifest file.')
= link_to sprite_icon('question-o'), help_page_path('user/project/import/manifest.md')
diff --git a/app/views/profiles/preferences/show.html.haml b/app/views/profiles/preferences/show.html.haml
index 2380d6540c5..c3b67ee09b0 100644
--- a/app/views/profiles/preferences/show.html.haml
+++ b/app/views/profiles/preferences/show.html.haml
@@ -111,7 +111,7 @@
= f.label :project_view, class: 'label-bold' do
= s_('Preferences|Project overview content')
= f.select :project_view, project_view_choices, {}, class: 'gl-form-select custom-select gl-form-input-xl gl-block'
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('Preferences|Choose what content you want to see on a project’s overview page.')
.form-group
= f.gitlab_ui_checkbox_component :project_shortcut_buttons, s_('Preferences|Show shortcut buttons above files on project overview')
@@ -140,7 +140,7 @@
min: Gitlab::TabWidth::MIN,
max: Gitlab::TabWidth::MAX,
required: true
- .form-text.text-muted
+ .form-text.gl-text-subtle
= s_('Preferences|Must be a number between %{min} and %{max}') % { min: Gitlab::TabWidth::MIN, max: Gitlab::TabWidth::MAX }
.settings-section.js-preferences-form.js-search-settings-section#localization
diff --git a/app/views/profiles/two_factor_auths/show.html.haml b/app/views/profiles/two_factor_auths/show.html.haml
index 289c655c2a8..a12719a67b8 100644
--- a/app/views/profiles/two_factor_auths/show.html.haml
+++ b/app/views/profiles/two_factor_auths/show.html.haml
@@ -55,7 +55,7 @@
.form-group
= label_tag :current_password, _('Current password'), class: 'label-bold'
= password_field_tag :current_password, nil, autocomplete: 'current-password', required: true, class: 'form-control gl-form-input', data: { testid: 'current-password-field' }
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= _('Your current password is required to register a two-factor authenticator app.')
.form-group
= label_tag :pin_code, _('Enter verification code'), class: "label-bold"
diff --git a/app/views/projects/_classification_policy_settings.html.haml b/app/views/projects/_classification_policy_settings.html.haml
index 5a766ab024f..3a238fce9e2 100644
--- a/app/views/projects/_classification_policy_settings.html.haml
+++ b/app/views/projects/_classification_policy_settings.html.haml
@@ -2,5 +2,5 @@
.form-group.col-md-9
= f.label :external_authorization_classification_label, _('Classification Label (optional)'), class: 'label-bold'
= f.text_field :external_authorization_classification_label, class: "form-control"
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= external_classification_label_help_message
diff --git a/app/views/projects/branch_defaults/_branch_names_fields.html.haml b/app/views/projects/branch_defaults/_branch_names_fields.html.haml
index 3e77cb51a85..6e5335e4a20 100644
--- a/app/views/projects/branch_defaults/_branch_names_fields.html.haml
+++ b/app/views/projects/branch_defaults/_branch_names_fields.html.haml
@@ -7,7 +7,7 @@
.form-group
.gl-mb-2
= f.text_field :issue_branch_template, class: 'form-control gl-mb-2 gl-form-input-xl', placeholder: "%{id}-%{title}"
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= s_('ProjectSettings|Leave empty to use default template.')
= sprintf(s_('ProjectSettings|Maximum %{maxLength} characters.'), { maxLength: Issue::MAX_BRANCH_TEMPLATE })
- branch_name_help_link = help_page_path('user/project/repository/branches/index.md', anchor: 'name-your-branch')
diff --git a/app/views/projects/branches/new.html.haml b/app/views/projects/branches/new.html.haml
index e0df7c94e8c..ebdde4b8c76 100644
--- a/app/views/projects/branches/new.html.haml
+++ b/app/views/projects/branches/new.html.haml
@@ -16,7 +16,7 @@
.form-group.gl-max-w-80
= label_tag :ref, _('Create from')
.js-new-branch-ref-selector{ data: { project_id: @project.id, default_branch_name: default_ref, hidden_input_name: 'ref' } }
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Existing branch name, tag, or commit SHA')
= render Pajamas::ButtonComponent.new(variant: :confirm, button_options: { type: 'submit', class: 'gl-mr-3' }) do
= _('Create branch')
diff --git a/app/views/projects/maintenance/_cleanup.html.haml b/app/views/projects/maintenance/_cleanup.html.haml
index 97619abf494..47e2a0eb737 100644
--- a/app/views/projects/maintenance/_cleanup.html.haml
+++ b/app/views/projects/maintenance/_cleanup.html.haml
@@ -24,7 +24,7 @@
%span.gl-ml-3.js-filename
= _("No file selected")
= f.file_field :bfg_object_map, class: "hidden js-object-map-input", required: true
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _("The maximum file size is %{size}.") % { size: number_to_human_size(Gitlab::CurrentSettings.max_attachment_size.megabytes) }
= f.submit _('Start cleanup'), pajamas_button: true
diff --git a/app/views/projects/mattermosts/_team_selection.html.haml b/app/views/projects/mattermosts/_team_selection.html.haml
index b48aadd348b..5f6f63a6cb9 100644
--- a/app/views/projects/mattermosts/_team_selection.html.haml
+++ b/app/views/projects/mattermosts/_team_selection.html.haml
@@ -11,7 +11,7 @@
- options = options_for_select(mattermost_teams_options(@teams), selected_id)
= f.select(:team_id, options, { include_blank: 'Select team...'}, { class: 'form-control', disabled: @teams.one?, selected: selected_id, required: true })
= f.hidden_field(:team_id, value: selected_id, required: true) if @teams.one?
- .form-text.text-muted
+ .form-text.gl-text-subtle
- if @teams.one?
This is the only available team that you are a member of.
- else
@@ -25,7 +25,7 @@
%h4 Command trigger word
%p Choose the word that will trigger commands
= f.text_field(:trigger, value: @project.path, class: 'form-control', required: true)
- .form-text.text-muted
+ .form-text.gl-text-subtle
%p
Trigger word must be unique, and can't begin with a slash or contain any spaces.
Use the word that works best for your team.
diff --git a/app/views/projects/mirrors/_ssh_host_keys.html.haml b/app/views/projects/mirrors/_ssh_host_keys.html.haml
index 8dd9d845d74..6896d2fa0cb 100644
--- a/app/views/projects/mirrors/_ssh_host_keys.html.haml
+++ b/app/views/projects/mirrors/_ssh_host_keys.html.haml
@@ -13,7 +13,7 @@
- mirror.ssh_known_hosts_fingerprints.each do |fp|
%code= fp.fingerprint_sha256 || fp.fingerprint
- if verified_at
- .form-text.text-muted.js-fingerprint-verification
+ .form-text.gl-text-subtle.js-fingerprint-verification
= sprite_icon('check', css_class: 'gl-text-green-500')
Verified by
- if verified_by
diff --git a/app/views/projects/project_templates/_template.html.haml b/app/views/projects/project_templates/_template.html.haml
index 4d2f9ce50fd..8af436a3520 100644
--- a/app/views/projects/project_templates/_template.html.haml
+++ b/app/views/projects/project_templates/_template.html.haml
@@ -5,7 +5,7 @@
%strong
= template.title
%br
- .text-muted
+ .gl-text-subtle
= template.description
.controls.gl-items-center{ class: '!gl-flex' }
= render Pajamas::ButtonComponent.new(button_options: { class: 'gl-mr-3', data: { track_label: "template_preview", track_property: template.name, track_action: "click_button", track_value: "" } }, href: template.preview, target: '_blank') do
diff --git a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml
index 0b22c77a8bc..7ca9b95bf6b 100644
--- a/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml
+++ b/app/views/projects/protected_tags/shared/_create_protected_tag.html.haml
@@ -5,7 +5,7 @@
= f.label :name, _('Tag')
.protected-tags-dropdown
= render partial: "projects/protected_tags/shared/dropdown", locals: { f: f }
- .form-text.text-muted
+ .form-text.gl-text-subtle
- wildcards_url = help_page_path('user/project/protected_tags.md', anchor: 'wildcard-protected-tags')
- wildcards_link_start = ''.html_safe % { url: wildcards_url }
= html_escape(_("%{wildcards_link_start}Wildcards%{wildcards_link_end} such as %{code_tag_start}v*%{code_tag_end} or %{code_tag_start}*-release%{code_tag_end} are supported.")) % { wildcards_link_start: wildcards_link_start, wildcards_link_end: ''.html_safe, code_tag_start: ''.html_safe, code_tag_end: '
'.html_safe }
diff --git a/app/views/projects/settings/_general.html.haml b/app/views/projects/settings/_general.html.haml
index 5ec5969e82d..a57bbf236e7 100644
--- a/app/views/projects/settings/_general.html.haml
+++ b/app/views/projects/settings/_general.html.haml
@@ -8,7 +8,7 @@
= f.label :name, class: 'label-bold', for: 'project_name_edit' do
= _('Project name')
= f.text_field :name, class: 'form-control gl-form-input', id: "project_name_edit", data: { testid: 'project-name-field' }
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= _('Must start with letter, digit, emoji, or underscore. Can also contain periods, dashes, spaces, and parentheses.')
.form-group.col-md-4
diff --git a/app/views/projects/settings/ci_cd/_form.html.haml b/app/views/projects/settings/ci_cd/_form.html.haml
index 385fb6890a9..f5d1384cf27 100644
--- a/app/views/projects/settings/ci_cd/_form.html.haml
+++ b/app/views/projects/settings/ci_cd/_form.html.haml
@@ -41,7 +41,7 @@
.form-group
= f.label :ci_config_path, _('CI/CD configuration file'), class: 'label-bold'
= f.text_field :ci_config_path, class: 'form-control', placeholder: '.gitlab-ci.yml'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= html_escape(_("The name of the CI/CD configuration file. A path relative to the root directory is optional (for example %{code_open}my/path/.myfile.yml%{code_close}).")) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings.md', anchor: 'specify-a-custom-cicd-configuration-file'), target: '_blank', rel: 'noopener noreferrer'
@@ -65,7 +65,7 @@
= f.fields_for :ci_cd_settings_attributes, @project.ci_cd_settings do |form|
= form.label :default_git_depth, _('Git shallow clone'), class: 'label-bold'
= form.number_field :default_git_depth, { class: 'form-control gl-form-input', min: 0, max: 1000 }
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= html_escape(_('The number of changes to fetch from GitLab when cloning a repository. Lower values can speed up pipeline execution. Set to %{code_open}0%{code_close} or blank to fetch all branches and tags for each job')) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings.md', anchor: 'limit-the-number-of-changes-fetched-during-clone'), target: '_blank', rel: 'noopener noreferrer'
@@ -73,7 +73,7 @@
.form-group
= f.label :build_timeout_human_readable, _('Timeout'), class: 'label-bold'
= f.text_field :build_timeout_human_readable, class: 'form-control gl-form-input'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= html_escape(_('Jobs fail if they run longer than the timeout time. Input value is in seconds by default. Human readable input is also accepted, for example %{code_open}1 hour%{code_close}.')) % { code_open: ''.html_safe, code_close: '
'.html_safe }
= link_to sprite_icon('question-o'), help_page_path('ci/pipelines/settings.md', anchor: 'set-a-limit-for-how-long-jobs-can-run'), target: '_blank', rel: 'noopener noreferrer'
@@ -81,7 +81,7 @@
.form-group
= f.label :max_artifacts_size, _('Maximum artifacts size'), class: 'label-bold'
= f.number_field :max_artifacts_size, class: 'form-control gl-form-input'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= _("The maximum file size in megabytes for individual job artifacts.")
= link_to sprite_icon('question-o'), help_page_path('administration/settings/continuous_integration.md', anchor: 'maximum-artifacts-size'), target: '_blank', rel: 'noopener noreferrer'
diff --git a/app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml b/app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml
index da1965f549c..968bc6d29c0 100644
--- a/app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml
+++ b/app/views/projects/settings/merge_requests/_merge_request_merge_commit_template.html.haml
@@ -6,7 +6,7 @@
= s_('ProjectSettings|The commit message used when merging, if the merge method creates a merge commit.')
.mb-2
= form.text_area :merge_commit_template_or_default, class: 'form-control gl-form-input', rows: 8, maxlength: Project::MAX_COMMIT_TEMPLATE_LENGTH, placeholder: s_('ProjectSettings|The default template will be applied on save.')
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= s_('ProjectSettings|Leave empty to use default template.')
= sprintf(s_('ProjectSettings|Maximum %{maxLength} characters.'), { maxLength: Project::MAX_COMMIT_TEMPLATE_LENGTH })
- link = link_to('', help_page_path('user/project/merge_requests/commit_templates.md'), target: '_blank', rel: 'noopener noreferrer')
diff --git a/app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml b/app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml
index 5be7ee77c38..51224f66d90 100644
--- a/app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml
+++ b/app/views/projects/settings/merge_requests/_merge_request_merge_suggestions_settings.html.haml
@@ -6,7 +6,7 @@
= s_('ProjectSettings|The commit message used when applying merge request suggestions.')
.mb-2
= form.text_area :suggestion_commit_message, class: 'form-control gl-form-input', rows: 4, placeholder: Gitlab::Suggestions::CommitMessage::DEFAULT_SUGGESTION_COMMIT_MESSAGE
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= s_('ProjectSettings|Leave empty to use default template.')
= sprintf(s_('ProjectSettings|Maximum %{maxLength} characters.'), { maxLength: Project::MAX_SUGGESTIONS_TEMPLATE_LENGTH })
- link = link_to('', help_page_path('user/project/merge_requests/reviews/suggestions.md', anchor: 'configure-the-commit-message-for-applied-suggestions'), target: '_blank', rel: 'noopener noreferrer')
diff --git a/app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml b/app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml
index bc6530b927c..8f83df7b7d0 100644
--- a/app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml
+++ b/app/views/projects/settings/merge_requests/_merge_request_squash_commit_template.html.haml
@@ -6,7 +6,7 @@
= s_('ProjectSettings|The commit message used when squashing commits.')
.mb-2
= form.text_area :squash_commit_template_or_default, class: 'form-control gl-form-input', rows: 8, maxlength: Project::MAX_COMMIT_TEMPLATE_LENGTH, placeholder: s_('ProjectSettings|The default template will be applied on save.')
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= s_('ProjectSettings|Leave empty to use default template.')
= sprintf(s_('ProjectSettings|Maximum %{maxLength} characters.'), { maxLength: Project::MAX_COMMIT_TEMPLATE_LENGTH })
- link = link_to('', help_page_path('user/project/merge_requests/commit_templates.md'), target: '_blank', rel: 'noopener noreferrer')
diff --git a/app/views/protected_branches/shared/_create_protected_branch.html.haml b/app/views/protected_branches/shared/_create_protected_branch.html.haml
index e24ca91f061..79b5c6831e5 100644
--- a/app/views/protected_branches/shared/_create_protected_branch.html.haml
+++ b/app/views/protected_branches/shared/_create_protected_branch.html.haml
@@ -12,7 +12,7 @@
= f.text_field :name, placeholder: 'prod*', class: 'form-control !gl-w-full gl-form-input-lg'
- else
= render partial: "protected_branches/shared/dropdown", locals: { f: f, toggle_classes: '!gl-w-full gl-form-input-lg' }
- .form-text.text-muted
+ .form-text.gl-text-subtle
- wildcards_url = help_page_url('user/project/repository/branches/protected.md', anchor: 'protect-multiple-branches-with-wildcard-rules')
- wildcards_link_tag_pair = tag_pair(link_to('', wildcards_url, target: '_blank', rel: 'noopener noreferrer'), :wildcards_link_start, :wildcards_link_end)
diff --git a/app/views/protected_branches/shared/_protected_branch.html.haml b/app/views/protected_branches/shared/_protected_branch.html.haml
index a655800b684..06ee3c26811 100644
--- a/app/views/protected_branches/shared/_protected_branch.html.haml
+++ b/app/views/protected_branches/shared/_protected_branch.html.haml
@@ -15,7 +15,7 @@
- matching_branches = protected_branch.matching(repository.branch_names)
= link_to pluralize(matching_branches.count, "matching branch"), namespace_project_protected_branch_path(@project.namespace, @project, protected_branch)
- elsif !protected_branch.commit
- %span.text-muted= s_('ProtectedBranch|Branch does not exist.')
+ %span.gl-text-subtle= s_('ProtectedBranch|Branch does not exist.')
= yield
diff --git a/app/views/shared/_repository_size_limit_setting_registration_features_cta.html.haml b/app/views/shared/_repository_size_limit_setting_registration_features_cta.html.haml
index 0d084a99528..9b23a291daa 100644
--- a/app/views/shared/_repository_size_limit_setting_registration_features_cta.html.haml
+++ b/app/views/shared/_repository_size_limit_setting_registration_features_cta.html.haml
@@ -5,5 +5,5 @@
= form.label :disabled_repository_size_limit, class: 'label-bold' do
= _('Repository size limit (MiB)')
= form.number_field :disabled_repository_size_limit, value: '', class: 'form-control', disabled: true
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= render 'shared/registration_features_discovery_message'
diff --git a/app/views/shared/_visibility_radios.html.haml b/app/views/shared/_visibility_radios.html.haml
index 5f1352f6372..ed1bdef0c7b 100644
--- a/app/views/shared/_visibility_radios.html.haml
+++ b/app/views/shared/_visibility_radios.html.haml
@@ -25,6 +25,6 @@
= form.gitlab_ui_radio_component model_method, level,
"#{visibility_level_icon(level)} #{visibility_level_label(level)} #{disabled_visibility_level_icon_with_popover}".html_safe,
- help_text: '%{visibility_level_description}%{option_disabled_reason}'.html_safe % { visibility_level_description: visibility_level_description(level, form_model), option_disabled_reason: 'Not allowed by administrators' },
+ help_text: '%{visibility_level_description}%{option_disabled_reason}'.html_safe % { visibility_level_description: visibility_level_description(level, form_model), option_disabled_reason: 'Not allowed by administrators' },
radio_options: { checked: (selected_level == level), disabled: disabled_visibility_level?(form_model, level), data: { track_label: "blank_project", track_action: "activate_form_input", track_property: "#{model_method}_#{level}", track_value: "" } },
label_options: { class: 'js-visibility-level-radio' }
diff --git a/app/views/shared/access_tokens/_form.html.haml b/app/views/shared/access_tokens/_form.html.haml
index e40024daad8..7f7152419e2 100644
--- a/app/views/shared/access_tokens/_form.html.haml
+++ b/app/views/shared/access_tokens/_form.html.haml
@@ -16,7 +16,7 @@
.form-group
= f.label :name, s_('AccessTokens|Token name'), class: 'label-bold'
= f.text_field :name, class: 'form-control gl-form-input gl-form-input-xl', required: true, data: { testid: 'access-token-name-field' }, :'aria-describedby' => 'access_token_help_text'
- %span.form-text.text-muted#access_token_help_text
+ %span.form-text.gl-text-subtle#access_token_help_text
- if resource
- resource_type = resource.is_a?(Group) ? "group" : "project"
= s_("AccessTokens|For example, the application using the token or the purpose of the token. Do not give sensitive information for the name of the token, as it will be visible to all %{resource_type} members.") % { resource_type: resource_type }
diff --git a/app/views/shared/deploy_keys/_project_group_form.html.haml b/app/views/shared/deploy_keys/_project_group_form.html.haml
index 509aaf1ac69..1290b82214e 100644
--- a/app/views/shared/deploy_keys/_project_group_form.html.haml
+++ b/app/views/shared/deploy_keys/_project_group_form.html.haml
@@ -10,7 +10,7 @@
.form-group
= f.label :key, class: "label-bold"
= f.text_area :key, class: 'form-control gl-form-input gl-form-input-xl !gl-h-auto', rows: 5, required: true, data: { testid: 'deploy-key-field' }
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Paste a public key here.')
= link_to _('How do I generate it?'), help_page_path("user/ssh.md")
@@ -22,7 +22,7 @@
= f.label :expires_at, _('Expiration date (optional)'), class: 'label-bold'
.gl-form-input-xl
= f.gitlab_ui_datepicker :expires_at, data: { testid: 'deploy-key-expires-at-field' }, value: f.object.expires_at
- .form-text.text-muted= ssh_key_expires_field_description
+ .form-text.gl-text-subtle= ssh_key_expires_field_description
.form-group.gl-mb-0
= f.submit _("Add key"), data: { testid: "add-deploy-key-button"}, pajamas_button: true
diff --git a/app/views/shared/doorkeeper/applications/_form.html.haml b/app/views/shared/doorkeeper/applications/_form.html.haml
index 5d85210bc90..40f731ed3b7 100644
--- a/app/views/shared/doorkeeper/applications/_form.html.haml
+++ b/app/views/shared/doorkeeper/applications/_form.html.haml
@@ -11,7 +11,7 @@
= f.label :redirect_uri, class: 'label-bold'
= f.text_area :redirect_uri, class: 'form-control gl-form-input gl-form-textarea', required: true
- %span.form-text.text-muted
+ %span.form-text.gl-text-subtle
= _('Use one line per URI')
.form-group
diff --git a/app/views/shared/doorkeeper/applications/_index.html.haml b/app/views/shared/doorkeeper/applications/_index.html.haml
index 4abad94837c..2c891c0ee29 100644
--- a/app/views/shared/doorkeeper/applications/_index.html.haml
+++ b/app/views/shared/doorkeeper/applications/_index.html.haml
@@ -80,7 +80,7 @@
= token.application.name
- else
= _('Anonymous')
- .form-text.text-muted
+ .form-text.gl-text-subtle
%em= _("Authorization was granted by entering your username and password in the application.")
%td{ data: { label: _('Authorized At') } }
= token.created_at
diff --git a/app/views/shared/issuable/form/_type_selector.html.haml b/app/views/shared/issuable/form/_type_selector.html.haml
index 9e6e773445c..9bfd60b7638 100644
--- a/app/views/shared/issuable/form/_type_selector.html.haml
+++ b/app/views/shared/issuable/form/_type_selector.html.haml
@@ -9,7 +9,7 @@
#js-type-select{ data: issuable_type_selector_data(issuable) }
- if issuable.incident_type_issue?
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
- incident_docs_url = help_page_path('operations/incident_management/incidents.md')
- incident_docs_start = format('', url: incident_docs_url)
= format(_('A %{incident_docs_start}modified issue%{incident_docs_end} to guide the resolution of incidents.'), incident_docs_start: incident_docs_start, incident_docs_end: '').html_safe
diff --git a/app/views/shared/labels/_form.html.haml b/app/views/shared/labels/_form.html.haml
index 60fca903861..43f319abc72 100644
--- a/app/views/shared/labels/_form.html.haml
+++ b/app/views/shared/labels/_form.html.haml
@@ -21,7 +21,7 @@
.input-group-prepend
%input.label-color-preview.gl-w-7.gl-h-full.gl-border-1.gl-border-solid.gl-border-gray-500.gl-border-r-0.gl-rounded-tr-none.gl-rounded-br-none{ type: "color", placeholder: _('Select color') }
= f.text_field :color, class: "gl-form-input form-control", data: { testid: 'label-color-field' }
- .form-text.text-muted
+ .form-text.gl-text-subtle
= _('Select a color from the color picker or from the presets below.')
= render_suggested_colors
- if show_lock_on_merge
diff --git a/app/views/shared/web_hooks/_form.html.haml b/app/views/shared/web_hooks/_form.html.haml
index 790973f9e9a..8e334a54dbb 100644
--- a/app/views/shared/web_hooks/_form.html.haml
+++ b/app/views/shared/web_hooks/_form.html.haml
@@ -10,7 +10,7 @@
.form-group
= form.label :token, s_('Webhooks|Secret token'), class: 'label-bold'
= form.password_field :token, value: hook.masked_token, autocomplete: 'new-password', class: 'form-control gl-form-input gl-form-input-xl'
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
- code_start = ''.html_safe
- code_end = '
'.html_safe
= s_('Webhooks|Used to validate received payloads. Sent with the request in the %{code_start}X-Gitlab-Token%{code_end} HTTP header.').html_safe % { code_start: code_start, code_end: code_end }
@@ -86,7 +86,7 @@
.form-group
= form.label :custom_webhook_template, s_('Webhooks|Custom webhook template (optional)'), class: 'label-bold'
= form.text_area :custom_webhook_template, value: hook.custom_webhook_template, class: 'form-control gl-form-input gl-form-input-xl', rows: 8, maxlength: 4096
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= link_to s_('Webhooks|How to create a custom webhook template?'), help_page_path('user/project/integrations/webhooks.md', anchor: 'custom-webhook-template')
.form-group
diff --git a/app/views/user_settings/passwords/edit.html.haml b/app/views/user_settings/passwords/edit.html.haml
index 179f54ac45e..7ba937d90f6 100644
--- a/app/views/user_settings/passwords/edit.html.haml
+++ b/app/views/user_settings/passwords/edit.html.haml
@@ -19,7 +19,7 @@
.form-group
= f.label :password, _('Current password'), class: 'label-bold'
= f.password_field :password, required: true, autocomplete: 'current-password', class: 'form-control gl-form-input gl-max-w-80', data: { testid: 'current-password-field' }
- %p.form-text.text-muted
+ %p.form-text.gl-text-subtle
= _('You must provide your current password in order to change it.')
.form-group
= f.label :new_password, _('New password'), class: 'label-bold'
diff --git a/app/views/user_settings/ssh_keys/_form.html.haml b/app/views/user_settings/ssh_keys/_form.html.haml
index cff287875f2..352740a42ce 100644
--- a/app/views/user_settings/ssh_keys/_form.html.haml
+++ b/app/views/user_settings/ssh_keys/_form.html.haml
@@ -6,12 +6,12 @@
.form-group
= f.label :key, s_('Profiles|Key'), class: 'label-bold'
= f.text_area :key, class: "form-control gl-form-input js-add-ssh-key-validation-input", rows: 8, required: true, data: { supported_algorithms: Gitlab::SSHPublicKey.supported_algorithms, testid: 'key-public-key-field' }
- %p.form-text.text-muted= s_('Profiles|Begins with %{ssh_key_algorithms}.') % { ssh_key_algorithms: ssh_key_allowed_algorithms }
+ %p.form-text.gl-text-subtle= s_('Profiles|Begins with %{ssh_key_algorithms}.') % { ssh_key_algorithms: ssh_key_allowed_algorithms }
.form-row
.col.form-group
= f.label :title, s_('Profiles|Title'), class: 'label-bold'
= f.text_field :title, class: "form-control gl-form-input input-lg", required: true, placeholder: s_('Profiles|Example: MacBook key'), data: { testid: 'key-title-field' }
- %p.form-text.text-muted= s_('Profiles|Key titles are publicly visible.')
+ %p.form-text.gl-text-subtle= s_('Profiles|Key titles are publicly visible.')
.form-row
.col.form-group
= f.label :usage_type, s_('Profiles|Usage type')
@@ -22,7 +22,7 @@
.js-access-tokens-expires-at{ data: {min_date: Date.tomorrow, max_date: max_date, default_date_offset: 365, description: ssh_key_expires_field_description } }
= f.label :expires_at, s_('Profiles|Expiration date'), class: 'label-bold'
= f.text_field :expires_at, class: "form-control gl-form-input", placeholder: 'YYYY-MM-DD', min: Date.tomorrow, max: max_date, data: { js_name: 'expiresAt' }
- %p.form-text.text-muted= ssh_key_expires_field_description
+ %p.form-text.gl-text-subtle= ssh_key_expires_field_description
.js-add-ssh-key-validation-warning.hide
= render Pajamas::AlertComponent.new(title: _('Are you sure?'), variant: :warning, dismissible: false) do |c|
diff --git a/config/events/fallback_current_organization_to_default.yml b/config/events/fallback_current_organization_to_default.yml
new file mode 100644
index 00000000000..cdab48c56c4
--- /dev/null
+++ b/config/events/fallback_current_organization_to_default.yml
@@ -0,0 +1,17 @@
+---
+description: Tracks when the current organization fallbacks to the Default organization.
+internal_events: true
+action: fallback_current_organization_to_default
+additional_properties:
+ label:
+ description: Caller ID containing either the controller action or request path from where the event triggered.
+product_group: tenant_scale
+milestone: '17.6'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172017
+distributions:
+- ce
+- ee
+tiers:
+- free
+- premium
+- ultimate
diff --git a/config/feature_flags/ops/track_organization_fallback.yml b/config/feature_flags/ops/track_organization_fallback.yml
new file mode 100644
index 00000000000..e93c1f626b5
--- /dev/null
+++ b/config/feature_flags/ops/track_organization_fallback.yml
@@ -0,0 +1,9 @@
+---
+name: track_organization_fallback
+feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/499994
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172017
+rollout_issue_url:
+milestone: '17.6'
+group: group::tenant scale
+type: ops
+default_enabled: false
diff --git a/config/metrics/counts_all/count_total_fallback_current_organization_to_default.yml b/config/metrics/counts_all/count_total_fallback_current_organization_to_default.yml
new file mode 100644
index 00000000000..a4fad052f46
--- /dev/null
+++ b/config/metrics/counts_all/count_total_fallback_current_organization_to_default.yml
@@ -0,0 +1,25 @@
+---
+key_path: counts.count_total_fallback_current_organization_to_default
+description: Total count of instances where the current organization fallbacks to the Default organization
+product_group: tenant_scale
+performance_indicator_type: []
+value_type: number
+status: active
+milestone: '17.6'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172017
+time_frame: all
+data_source: internal_events
+data_category: optional
+distribution:
+- ce
+- ee
+tier:
+- free
+- premium
+- ultimate
+tiers:
+- free
+- premium
+- ultimate
+events:
+- name: fallback_current_organization_to_default
diff --git a/db/docs/ai_settings.yml b/db/docs/ai_settings.yml
new file mode 100644
index 00000000000..86dad1e7d52
--- /dev/null
+++ b/db/docs/ai_settings.yml
@@ -0,0 +1,10 @@
+---
+table_name: ai_settings
+classes:
+ - Ai::Setting
+feature_categories:
+ - ai_abstraction_layer
+description: Stores instance-wide AI-related settings
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/172007
+milestone: "17.6"
+gitlab_schema: gitlab_main_clusterwide
diff --git a/db/docs/batched_background_migrations/backfill_packages_debian_publications_project_id.yml b/db/docs/batched_background_migrations/backfill_packages_debian_publications_project_id.yml
index 52f87825ff3..64521a3b3d3 100644
--- a/db/docs/batched_background_migrations/backfill_packages_debian_publications_project_id.yml
+++ b/db/docs/batched_background_migrations/backfill_packages_debian_publications_project_id.yml
@@ -1,8 +1,9 @@
---
migration_job_name: BackfillPackagesDebianPublicationsProjectId
-description: Backfills sharding key `packages_debian_publications.project_id` from `packages_packages`.
+description: Backfills sharding key `packages_debian_publications.project_id` from
+ `packages_packages`.
feature_category: package_registry
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/155870
milestone: '17.1'
queued_migration_version: 20240610140905
-finalized_by: # version of the migration that finalized this BBM
+finalized_by: '20241113232546'
diff --git a/db/docs/batched_background_migrations/backfill_related_epic_links_group_id.yml b/db/docs/batched_background_migrations/backfill_related_epic_links_group_id.yml
index 5b9ef1832a5..15db341f294 100644
--- a/db/docs/batched_background_migrations/backfill_related_epic_links_group_id.yml
+++ b/db/docs/batched_background_migrations/backfill_related_epic_links_group_id.yml
@@ -5,4 +5,4 @@ feature_category: portfolio_management
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156251
milestone: '17.1'
queued_migration_version: 20240613065420
-finalized_by: # version of the migration that finalized this BBM
+finalized_by: '20241113232650'
diff --git a/db/docs/batched_background_migrations/backfill_release_links_project_id.yml b/db/docs/batched_background_migrations/backfill_release_links_project_id.yml
index b251dc47de9..b85e266a7de 100644
--- a/db/docs/batched_background_migrations/backfill_release_links_project_id.yml
+++ b/db/docs/batched_background_migrations/backfill_release_links_project_id.yml
@@ -5,4 +5,4 @@ feature_category: release_orchestration
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156018
milestone: '17.1'
queued_migration_version: 20240611132547
-finalized_by: # version of the migration that finalized this BBM
+finalized_by: '20241113232731'
diff --git a/db/migrate/20241107232900_add_ai_settings_table.rb b/db/migrate/20241107232900_add_ai_settings_table.rb
new file mode 100644
index 00000000000..b4ff43c914b
--- /dev/null
+++ b/db/migrate/20241107232900_add_ai_settings_table.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class AddAiSettingsTable < Gitlab::Database::Migration[2.2]
+ milestone '17.6'
+
+ disable_ddl_transaction!
+
+ def up
+ create_table :ai_settings do |t| # rubocop:disable Migration/EnsureFactoryForTable -- FactoryBot does not support Singleton classes https://github.com/thoughtbot/factory_bot/issues/642
+ t.text :ai_gateway_url, limit: 2048 # Most browsers support URLs up to 2048 characters
+ t.boolean :singleton, null: false, default: true, comment: 'Always true, used for singleton enforcement'
+ end
+
+ add_check_constraint :ai_settings, "(singleton IS TRUE)", 'check_singleton'
+ add_index :ai_settings, :singleton, unique: true
+ end
+
+ def down
+ drop_table :ai_settings
+ end
+end
diff --git a/db/post_migrate/20241113232546_finalize_backfill_packages_debian_publications_project_id.rb b/db/post_migrate/20241113232546_finalize_backfill_packages_debian_publications_project_id.rb
new file mode 100644
index 00000000000..7f84f0c79f4
--- /dev/null
+++ b/db/post_migrate/20241113232546_finalize_backfill_packages_debian_publications_project_id.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class FinalizeBackfillPackagesDebianPublicationsProjectId < Gitlab::Database::Migration[2.2]
+ milestone '17.6'
+
+ disable_ddl_transaction!
+
+ restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
+
+ def up
+ ensure_batched_background_migration_is_finished(
+ job_class_name: 'BackfillPackagesDebianPublicationsProjectId',
+ table_name: :packages_debian_publications,
+ column_name: :id,
+ job_arguments: [:project_id, :packages_packages, :project_id, :package_id],
+ finalize: true
+ )
+ end
+
+ def down; end
+end
diff --git a/db/post_migrate/20241113232650_finalize_backfill_related_epic_links_group_id.rb b/db/post_migrate/20241113232650_finalize_backfill_related_epic_links_group_id.rb
new file mode 100644
index 00000000000..38f1a9cb4ee
--- /dev/null
+++ b/db/post_migrate/20241113232650_finalize_backfill_related_epic_links_group_id.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class FinalizeBackfillRelatedEpicLinksGroupId < Gitlab::Database::Migration[2.2]
+ milestone '17.6'
+
+ disable_ddl_transaction!
+
+ restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
+
+ def up
+ ensure_batched_background_migration_is_finished(
+ job_class_name: 'BackfillRelatedEpicLinksGroupId',
+ table_name: :related_epic_links,
+ column_name: :id,
+ job_arguments: [:group_id, :epics, :group_id, :source_id],
+ finalize: true
+ )
+ end
+
+ def down; end
+end
diff --git a/db/post_migrate/20241113232731_finalize_backfill_release_links_project_id.rb b/db/post_migrate/20241113232731_finalize_backfill_release_links_project_id.rb
new file mode 100644
index 00000000000..ade90e8873d
--- /dev/null
+++ b/db/post_migrate/20241113232731_finalize_backfill_release_links_project_id.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+class FinalizeBackfillReleaseLinksProjectId < Gitlab::Database::Migration[2.2]
+ milestone '17.6'
+
+ disable_ddl_transaction!
+
+ restrict_gitlab_migration gitlab_schema: :gitlab_main_cell
+
+ def up
+ ensure_batched_background_migration_is_finished(
+ job_class_name: 'BackfillReleaseLinksProjectId',
+ table_name: :release_links,
+ column_name: :id,
+ job_arguments: [:project_id, :releases, :project_id, :release_id],
+ finalize: true
+ )
+ end
+
+ def down; end
+end
diff --git a/db/schema_migrations/20241107232900 b/db/schema_migrations/20241107232900
new file mode 100644
index 00000000000..8ba0f68ed0e
--- /dev/null
+++ b/db/schema_migrations/20241107232900
@@ -0,0 +1 @@
+5443a2ae70c79be0704422b5247e7f2e0c75faf36d1d0b1999dbc6def3e11571
\ No newline at end of file
diff --git a/db/schema_migrations/20241113232546 b/db/schema_migrations/20241113232546
new file mode 100644
index 00000000000..d36b56f07ab
--- /dev/null
+++ b/db/schema_migrations/20241113232546
@@ -0,0 +1 @@
+ceed07df1816cfe2ee62dd3afa04a6217b2cc679ecdd619cb4218fcad8ad331d
\ No newline at end of file
diff --git a/db/schema_migrations/20241113232650 b/db/schema_migrations/20241113232650
new file mode 100644
index 00000000000..a504c3143a6
--- /dev/null
+++ b/db/schema_migrations/20241113232650
@@ -0,0 +1 @@
+75a55f5535b83e5cee6715ee9d9e17fe0319e1f1e78ea12d1284c8fd15f2344c
\ No newline at end of file
diff --git a/db/schema_migrations/20241113232731 b/db/schema_migrations/20241113232731
new file mode 100644
index 00000000000..966596ea2ac
--- /dev/null
+++ b/db/schema_migrations/20241113232731
@@ -0,0 +1 @@
+31a575eb19f635f45e3e6f3b9c75256e805a51d14b434f1ca104de267f4efdc7
\ No newline at end of file
diff --git a/db/structure.sql b/db/structure.sql
index 0285f83a1ee..9812b27149c 100644
--- a/db/structure.sql
+++ b/db/structure.sql
@@ -5881,6 +5881,25 @@ CREATE SEQUENCE ai_self_hosted_models_id_seq
ALTER SEQUENCE ai_self_hosted_models_id_seq OWNED BY ai_self_hosted_models.id;
+CREATE TABLE ai_settings (
+ id bigint NOT NULL,
+ ai_gateway_url text,
+ singleton boolean DEFAULT true NOT NULL,
+ CONSTRAINT check_3cf9826589 CHECK ((char_length(ai_gateway_url) <= 2048)),
+ CONSTRAINT check_singleton CHECK ((singleton IS TRUE))
+);
+
+COMMENT ON COLUMN ai_settings.singleton IS 'Always true, used for singleton enforcement';
+
+CREATE SEQUENCE ai_settings_id_seq
+ START WITH 1
+ INCREMENT BY 1
+ NO MINVALUE
+ NO MAXVALUE
+ CACHE 1;
+
+ALTER SEQUENCE ai_settings_id_seq OWNED BY ai_settings.id;
+
CREATE TABLE ai_testing_terms_acceptances (
created_at timestamp with time zone NOT NULL,
user_id bigint NOT NULL,
@@ -22648,6 +22667,8 @@ ALTER TABLE ONLY ai_feature_settings ALTER COLUMN id SET DEFAULT nextval('ai_fea
ALTER TABLE ONLY ai_self_hosted_models ALTER COLUMN id SET DEFAULT nextval('ai_self_hosted_models_id_seq'::regclass);
+ALTER TABLE ONLY ai_settings ALTER COLUMN id SET DEFAULT nextval('ai_settings_id_seq'::regclass);
+
ALTER TABLE ONLY ai_vectorizable_files ALTER COLUMN id SET DEFAULT nextval('ai_vectorizable_files_id_seq'::regclass);
ALTER TABLE ONLY alert_management_alert_assignees ALTER COLUMN id SET DEFAULT nextval('alert_management_alert_assignees_id_seq'::regclass);
@@ -24470,6 +24491,9 @@ ALTER TABLE ONLY ai_feature_settings
ALTER TABLE ONLY ai_self_hosted_models
ADD CONSTRAINT ai_self_hosted_models_pkey PRIMARY KEY (id);
+ALTER TABLE ONLY ai_settings
+ ADD CONSTRAINT ai_settings_pkey PRIMARY KEY (id);
+
ALTER TABLE ONLY ai_testing_terms_acceptances
ADD CONSTRAINT ai_testing_terms_acceptances_pkey PRIMARY KEY (user_id);
@@ -28605,6 +28629,8 @@ CREATE UNIQUE INDEX index_ai_feature_settings_on_feature ON ai_feature_settings
CREATE UNIQUE INDEX index_ai_self_hosted_models_on_name ON ai_self_hosted_models USING btree (name);
+CREATE UNIQUE INDEX index_ai_settings_on_singleton ON ai_settings USING btree (singleton);
+
CREATE INDEX index_ai_vectorizable_files_on_project_id ON ai_vectorizable_files USING btree (project_id);
CREATE INDEX index_alert_assignees_on_alert_id ON alert_management_alert_assignees USING btree (alert_id);
diff --git a/doc/administration/geo/secondary_proxy/location_aware_external_url.md b/doc/administration/geo/secondary_proxy/location_aware_external_url.md
deleted file mode 100644
index 927ba600231..00000000000
--- a/doc/administration/geo/secondary_proxy/location_aware_external_url.md
+++ /dev/null
@@ -1,10 +0,0 @@
----
-redirect_to: 'index.md#configure-location-aware-dns'
-remove_date: '2024-11-01'
----
-
-
-
-This document was moved to [another location](index.md#configure-location-aware-dns).
-
-
diff --git a/doc/development/documentation/versions.md b/doc/development/documentation/versions.md
deleted file mode 100644
index d75a2235e9d..00000000000
--- a/doc/development/documentation/versions.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: '../documentation/styleguide/availability_details.md'
-remove_date: '2024-11-02'
----
-
-
-
-This document was moved to [another location](../documentation/styleguide/availability_details.md).
-
-
-
-
-
diff --git a/doc/development/documentation/workflow.md b/doc/development/documentation/workflow.md
index f675e8ab6e5..569188c02bc 100644
--- a/doc/development/documentation/workflow.md
+++ b/doc/development/documentation/workflow.md
@@ -13,7 +13,7 @@ Documentation at GitLab follows a workflow.
Ensure your documentation includes:
- [Product availability details](styleguide/availability_details.md).
-- The GitLab [version](versions.md) that introduced the feature.
+- The GitLab [version](styleguide/availability_details.md) that introduced the feature.
- Accurate [links](styleguide/index.md#links).
- Accurate [user permissions](../../user/permissions.md).
diff --git a/doc/development/fe_guide/merge_request_widget_extensions.md b/doc/development/fe_guide/merge_request_widget_extensions.md
deleted file mode 100644
index 039ea318e03..00000000000
--- a/doc/development/fe_guide/merge_request_widget_extensions.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: 'merge_request_widgets.md'
-remove_date: '2024-10-25'
----
-
-
-
-This document was moved to [another location](merge_request_widgets.md).
-
-
-
-
-
diff --git a/doc/tutorials/observability/observabillty_java_tutorial.md b/doc/tutorials/observability/observabillty_java_tutorial.md
deleted file mode 100644
index 10508607616..00000000000
--- a/doc/tutorials/observability/observabillty_java_tutorial.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: 'observability_java_tutorial.md'
-remove_date: '2024-10-25'
----
-
-
-
-This document was moved to [another location](observability_java_tutorial.md).
-
-
-
-
-
diff --git a/doc/update/upgrade_paths.md b/doc/update/upgrade_paths.md
index 25cf05c2948..ab61c0e8a2f 100644
--- a/doc/update/upgrade_paths.md
+++ b/doc/update/upgrade_paths.md
@@ -21,7 +21,7 @@ later versions. When moving through an upgrade path:
1. Allow the background migrations for the upgrade to finish.
1. Upgrade to the next required upgrade stop.
-From GitLab 17.5, required upgrade stops consistently land on minor versions X.2, X.5, X.8, and X.11. This schedule provides a predictable upgrade schedule for instance administrators.
+To provide a predictable upgrade schedule for instance administrators, from GitLab 17.5, required upgrade stops will occur at versions `x.2.z`, `x.5.z`, `x.8.z`, and `x.11.z`.
To determine your upgrade path:
@@ -44,7 +44,8 @@ To determine your upgrade path:
- GitLab 17 includes the following required upgrade stops:
- [`17.3.z`](versions/gitlab_17_changes.md#1730). The latest GitLab 17.3 release.
- [`17.5.z`](versions/gitlab_17_changes.md#1750). The latest GitLab 17.5 release.
- - [`17.y.z`](versions/gitlab_17_changes.md). The latest GitLab 17 release.
+ - `17.8.z`. Not yet released.
+ - `17.11.z`. Not yet released.
1. Consult the version-specific upgrade instructions:
- [GitLab 17 changes](versions/gitlab_17_changes.md)
diff --git a/doc/user/application_security/policies/scan-execution-policies.md b/doc/user/application_security/policies/scan-execution-policies.md
deleted file mode 100644
index 24bd03ea383..00000000000
--- a/doc/user/application_security/policies/scan-execution-policies.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: 'scan_execution_policies.md'
-remove_date: '2024-10-25'
----
-
-
-
-This document was moved to [another location](scan_execution_policies.md).
-
-
-
-
-
diff --git a/doc/user/application_security/policies/scan-result-policies.md b/doc/user/application_security/policies/scan-result-policies.md
deleted file mode 100644
index 2ba46d2774c..00000000000
--- a/doc/user/application_security/policies/scan-result-policies.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: 'merge_request_approval_policies.md'
-remove_date: '2024-10-25'
----
-
-
-
-This document was moved to [another location](merge_request_approval_policies.md).
-
-
-
-
-
diff --git a/doc/user/application_security/secret_detection/pipeline/customize_rulesets.md b/doc/user/application_security/secret_detection/pipeline/customize_rulesets.md
deleted file mode 100644
index 570577b550c..00000000000
--- a/doc/user/application_security/secret_detection/pipeline/customize_rulesets.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-redirect_to: 'custom_rulesets_schema.md'
-remove_date: '2024-10-23'
----
-
-
-
-This document was moved to [another location](custom_rulesets_schema.md).
-
-
-
-
-
diff --git a/doc/user/project/merge_requests/auto_merge.md b/doc/user/project/merge_requests/auto_merge.md
index 2f9f65e9644..07e419e9f3d 100644
--- a/doc/user/project/merge_requests/auto_merge.md
+++ b/doc/user/project/merge_requests/auto_merge.md
@@ -15,6 +15,7 @@ DETAILS:
> - [Generally available](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/120922) in GitLab 16.0. Feature flag `auto_merge_labels_mr_widget` removed.
> - [Introduced](https://gitlab.com/groups/gitlab-org/-/epics/10874) in GitLab 16.5 [with two flags](../../../administration/feature_flags.md) named `merge_when_checks_pass` and `additional_merge_when_checks_ready`. Disabled by default.
> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/412995) the flags `merge_when_checks_pass` and `additional_merge_when_checks_ready` on GitLab.com in GitLab 17.0.
+> - [Merged](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/154366) the flag `additional_merge_when_checks_ready` with `merge_when_checks_pass` in GitLab 17.1.
> - [Enabled](https://gitlab.com/gitlab-org/gitlab/-/issues/412995) the flags `merge_when_checks_pass` by default in GitLab 17.4.
When you enable the `merge_when_checks_pass` feature flag, if the content of a merge request is ready to merge,
diff --git a/lib/gitlab/current/organization.rb b/lib/gitlab/current/organization.rb
index ac5451ec181..a8d7d1f9b4f 100644
--- a/lib/gitlab/current/organization.rb
+++ b/lib/gitlab/current/organization.rb
@@ -11,7 +11,7 @@ module Gitlab
end
def organization
- from_params || from_user || ::Organizations::Organization.default_organization
+ from_params || from_user || fallback_organization
end
def from_params
@@ -41,6 +41,12 @@ module Gitlab
::Organizations::Organization.find_by_path(path)
end
+
+ def fallback_organization
+ Gitlab::SafeRequestStore.write(:fallback_organization_used, true)
+
+ ::Organizations::Organization.default_organization
+ end
end
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 33620ca65d7..cd77afff56d 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -14191,7 +14191,7 @@ msgstr ""
msgid "ComplianceFrameworks|Action"
msgstr ""
-msgid "ComplianceFrameworks|Add a new control"
+msgid "ComplianceFrameworks|Add another control"
msgstr ""
msgid "ComplianceFrameworks|Add framework"
@@ -14350,6 +14350,9 @@ msgstr ""
msgid "ComplianceFrameworks|Requires Ultimate subscription"
msgstr ""
+msgid "ComplianceFrameworks|Save changes to the framework"
+msgstr ""
+
msgid "ComplianceFrameworks|Saved changes to compliance framework"
msgstr ""
@@ -14395,6 +14398,9 @@ msgstr ""
msgid "ComplianceFrameworks|You are about to permanently delete the compliance framework %{framework} from all projects which currently have it applied, which may remove other functionality. This cannot be undone."
msgstr ""
+msgid "ComplianceFrameworks|You can create a maximum of %{maxControlsNumber} controls"
+msgstr ""
+
msgid "ComplianceFrameworks|You can only create the compliance framework in top-level group %{linkStart}namespace%{linkEnd}"
msgstr ""
@@ -21511,12 +21517,6 @@ msgstr ""
msgid "Environment scope"
msgstr ""
-msgid "Environment variable %{env_variable_name} is not set."
-msgstr ""
-
-msgid "Environment variable %{env_variable_name} is set to %{url}."
-msgstr ""
-
msgid "Environment variables on this GitLab instance are configured to be %{help_link_start}protected%{help_link_end} by default."
msgstr ""
@@ -51365,6 +51365,12 @@ msgstr ""
msgid "Selecting a GitLab user will add a link to the GitLab user in the descriptions of issues and comments (e.g. \"By %{link_open}@johnsmith%{link_close}\"). It will also associate and/or assign these issues and comments with the selected user."
msgstr ""
+msgid "Self hosted AI Gateway URL is not set.To set it, in a rails console run: `Ai::Setting.instance.update!(ai_gateway_url: URL)`"
+msgstr ""
+
+msgid "Self hosted AI Gateway URL is set to %{url}.To change it, in a rails console run: `Ai::Setting.instance.update!(ai_gateway_url: URL)`"
+msgstr ""
+
msgid "Send"
msgstr ""
diff --git a/scripts/lint-doc.sh b/scripts/lint-doc.sh
index 775605333bf..490fa2243ac 100755
--- a/scripts/lint-doc.sh
+++ b/scripts/lint-doc.sh
@@ -106,7 +106,7 @@ fi
# Do not use dashes (-) in filenames, use underscores (_) instead.
# Number of filenames with dashes as of 2024-06-17
-FILE_NUMBER_DASHES=70
+FILE_NUMBER_DASHES=68
FILE_FIND_DASHES=$(find doc -type f -name "*-*.md" | wc -l)
# shellcheck disable=2059
printf "${COLOR_GREEN}INFO: Checking for filenames containing dashes...${COLOR_RESET}\n"
diff --git a/spec/frontend/webhooks/components/__snapshots__/push_events_spec.js.snap b/spec/frontend/webhooks/components/__snapshots__/push_events_spec.js.snap
index 56f8bf0a5e3..d196ea1e915 100644
--- a/spec/frontend/webhooks/components/__snapshots__/push_events_spec.js.snap
+++ b/spec/frontend/webhooks/components/__snapshots__/push_events_spec.js.snap
@@ -96,7 +96,7 @@ exports[`Webhook push events form editor component Different push events rules w
/>