import { GlLink, GlIcon, GlPopover } from '@gitlab/ui';
-import * as Sentry from '~/sentry/sentry_browser_wrapper';
+import * as Sentry from '~/sentry/sentry_browser_wrapper';
import { s__ } from '~/locale';
import WorkItemSidebarDropdownWidget from '~/work_items/components/shared/work_item_sidebar_dropdown_widget.vue';
import updateWorkItemMutation from '~/work_items/graphql/update_work_item.mutation.graphql';
+import { isValidURL } from '~/lib/utils/url_utility';
import { updateParent } from '../graphql/cache_utils';
import groupWorkItemsQuery from '../graphql/group_work_items.query.graphql';
import projectWorkItemsQuery from '../graphql/project_work_items.query.graphql';
+import workItemsByReferencesQuery from '../graphql/work_items_by_references.query.graphql';
import {
I18N_WORK_ITEM_ERROR_UPDATING,
sprintfWorkItem,
SUPPORTED_PARENT_TYPE_MAP,
WORK_ITEM_TYPE_VALUE_ISSUE,
} from '../constants';
+import { isReference } from '../utils';
export default {
name: 'WorkItemParent',
@@ -69,10 +72,9 @@ export default {
},
data() {
return {
- search: '',
+ searchTerm: '',
updateInProgress: false,
searchStarted: false,
- availableWorkItems: [],
localSelectedItem: this.parent?.id,
oldParent: this.parent,
};
@@ -82,7 +84,13 @@ export default {
return this.workItemType === WORK_ITEM_TYPE_VALUE_ISSUE;
},
isLoading() {
- return this.$apollo.queries.availableWorkItems.loading;
+ return (
+ this.$apollo.queries.workspaceWorkItems.loading ||
+ this.$apollo.queries.workItemsByReference.loading
+ );
+ },
+ availableWorkItems() {
+ return this.isSearchingByReference ? this.workItemsByReference : this.workspaceWorkItems;
},
listboxText() {
return (
@@ -92,7 +100,7 @@ export default {
);
},
workItems() {
- return this.availableWorkItems.map(({ id, title }) => ({ text: title, value: id }));
+ return this.availableWorkItems?.map(({ id, title }) => ({ text: title, value: id })) || [];
},
parentType() {
return SUPPORTED_PARENT_TYPE_MAP[this.workItemType];
@@ -103,6 +111,9 @@ export default {
showCustomNoneValue() {
return this.hasParent && this.parent === null;
},
+ isSearchingByReference() {
+ return isReference(this.searchTerm) || isValidURL(this.searchTerm);
+ },
},
watch: {
parent: {
@@ -112,7 +123,7 @@ export default {
},
},
apollo: {
- availableWorkItems: {
+ workspaceWorkItems: {
query() {
// TODO: Remove the this.isIssue check once issues are migrated to work items
return this.isGroup || this.isIssue ? groupWorkItemsQuery : projectWorkItemsQuery;
@@ -121,9 +132,9 @@ export default {
// TODO: Remove the this.isIssue check once issues are migrated to work items
return {
fullPath: this.isIssue ? this.groupPath : this.fullPath,
- searchTerm: this.search,
+ searchTerm: this.searchTerm,
types: this.parentType,
- in: this.search ? 'TITLE' : undefined,
+ in: this.searchTerm ? 'TITLE' : undefined,
iid: null,
isNumber: false,
includeAncestors: true,
@@ -139,10 +150,28 @@ export default {
this.$emit('error', this.$options.i18n.workItemsFetchError);
},
},
+ workItemsByReference: {
+ query: workItemsByReferencesQuery,
+ variables() {
+ return {
+ contextNamespacePath: this.fullPath,
+ refs: [this.searchTerm],
+ };
+ },
+ skip() {
+ return !this.isSearchingByReference;
+ },
+ update(data) {
+ return data?.workItemsByReference?.nodes || [];
+ },
+ error() {
+ this.$emit('error', this.$options.i18n.workItemsFetchError);
+ },
+ },
},
methods: {
- searchWorkItems(searchTerm) {
- this.search = searchTerm;
+ searchWorkItems(value) {
+ this.searchTerm = value;
this.searchStarted = true;
},
async updateParent() {
@@ -191,7 +220,7 @@ export default {
handleItemClick(item) {
this.localSelectedItem = item;
this.searchStarted = false;
- this.search = '';
+ this.searchTerm = '';
this.updateParent();
},
unassignParent() {
@@ -203,7 +232,7 @@ export default {
},
onListboxHide() {
this.searchStarted = false;
- this.search = '';
+ this.searchTerm = '';
},
},
};
diff --git a/app/controllers/concerns/wiki_actions.rb b/app/controllers/concerns/wiki_actions.rb
index 59502ade012..384ecb899cc 100644
--- a/app/controllers/concerns/wiki_actions.rb
+++ b/app/controllers/concerns/wiki_actions.rb
@@ -422,8 +422,6 @@ module WikiActions
end
def find_redirection(path, redirect_limit = 50)
- return unless Feature.enabled?(:wiki_redirection, container)
-
seen = Set[]
current_path = path
diff --git a/app/controllers/groups/work_items_controller.rb b/app/controllers/groups/work_items_controller.rb
index e5d165a8426..373c16ce1b5 100644
--- a/app/controllers/groups/work_items_controller.rb
+++ b/app/controllers/groups/work_items_controller.rb
@@ -6,6 +6,7 @@ module Groups
before_action :handle_new_work_item_path, only: [:show]
before_action do
+ push_frontend_feature_flag(:comment_tooltips)
push_frontend_feature_flag(:notifications_todos_buttons)
push_force_frontend_feature_flag(:work_items, group&.work_items_feature_flag_enabled?)
push_force_frontend_feature_flag(:work_items_beta, group&.work_items_beta_feature_flag_enabled?)
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 6667945f7b5..efef76f8d24 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -49,6 +49,7 @@ class Projects::IssuesController < Projects::ApplicationController
push_frontend_feature_flag(:service_desk_ticket)
push_frontend_feature_flag(:issues_list_drawer, project)
push_frontend_feature_flag(:notifications_todos_buttons, current_user)
+ push_frontend_feature_flag(:comment_tooltips, current_user)
end
before_action only: [:index, :show] do
diff --git a/app/controllers/projects/work_items_controller.rb b/app/controllers/projects/work_items_controller.rb
index 55684def944..48da2d44b74 100644
--- a/app/controllers/projects/work_items_controller.rb
+++ b/app/controllers/projects/work_items_controller.rb
@@ -13,6 +13,7 @@ class Projects::WorkItemsController < Projects::ApplicationController
push_force_frontend_feature_flag(:work_items_beta, project&.work_items_beta_feature_flag_enabled?)
push_force_frontend_feature_flag(:work_items_alpha, project&.work_items_alpha_feature_flag_enabled?)
push_frontend_feature_flag(:namespace_level_work_items, project&.group)
+ push_frontend_feature_flag(:comment_tooltips)
end
feature_category :team_planning
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index c081931dd86..7fd3b2edc8e 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -69,7 +69,7 @@ module DiffHelper
if rapid_diffs?
expand_button = content_tag(:button, '...', class: 'gl-bg-none gl-border-0 gl-p-0', data: { visible_when_loading: false, **expand_data })
- spinner = render(Pajamas::SpinnerComponent.new(size: :sm, class: 'gl-display-none gl-text-align-right', data: { visible_when_loading: true }))
+ spinner = render(Pajamas::SpinnerComponent.new(size: :sm, class: 'gl-hidden gl-text-align-right', data: { visible_when_loading: true }))
expand_html = content_tag(:div, [expand_button, spinner].join.html_safe, data: { expand_wrapper: true })
else
expand_html = '...'
diff --git a/app/helpers/projects/project_members_helper.rb b/app/helpers/projects/project_members_helper.rb
index fd4277a4092..90752a774b4 100644
--- a/app/helpers/projects/project_members_helper.rb
+++ b/app/helpers/projects/project_members_helper.rb
@@ -30,6 +30,7 @@ module Projects::ProjectMembersHelper
can_manage_access_requests: Ability.allowed?(current_user, :admin_member_access_request, project),
group_name: project.group&.name,
group_path: project.group&.full_path,
+ project_path: project.full_path,
can_approve_access_requests: true, # true for CE, overridden in EE
available_roles: available_project_roles(project)
}
diff --git a/app/models/wiki.rb b/app/models/wiki.rb
index efb837c91a2..cd6914b19ed 100644
--- a/app/models/wiki.rb
+++ b/app/models/wiki.rb
@@ -444,7 +444,7 @@ class Wiki
private
def update_redirection_actions(new_path, old_path = nil, **options)
- return [] unless Feature.enabled?(:wiki_redirection, container) && old_path != new_path
+ return [] unless old_path != new_path
old_contents = repository.blob_at(default_branch, REDIRECTS_YML)
redirects = old_contents ? YAML.safe_load(old_contents.data).to_h : {}
diff --git a/app/models/work_item.rb b/app/models/work_item.rb
index 0f195914b45..cde805f97fa 100644
--- a/app/models/work_item.rb
+++ b/app/models/work_item.rb
@@ -143,6 +143,10 @@ class WorkItem < Issue
hierarchy.ancestors(hierarchy_order: :asc)
end
+ def descendants
+ hierarchy.descendants
+ end
+
def same_type_base_and_ancestors
hierarchy(same_type: true).base_and_ancestors(hierarchy_order: :asc)
end
diff --git a/app/services/packages/create_event_service.rb b/app/services/packages/create_event_service.rb
index c46613a1a1c..cb114a5cb26 100644
--- a/app/services/packages/create_event_service.rb
+++ b/app/services/packages/create_event_service.rb
@@ -4,7 +4,8 @@ module Packages
class CreateEventService < BaseService
INTERNAL_EVENTS_NAMES = {
'delete_package' => 'delete_package_from_registry',
- 'pull_package' => 'pull_package_from_registry'
+ 'pull_package' => 'pull_package_from_registry',
+ 'push_package' => 'push_package_to_registry'
}.freeze
def execute
diff --git a/app/views/admin/application_settings/_outbound.html.haml b/app/views/admin/application_settings/_outbound.html.haml
index ed7ed99e841..8f2c0b818fd 100644
--- a/app/views/admin/application_settings/_outbound.html.haml
+++ b/app/views/admin/application_settings/_outbound.html.haml
@@ -10,7 +10,7 @@
checkbox_options: { class: 'js-deny-all-requests' }
= render Pajamas::AlertComponent.new(variant: :warning,
dismissible: false,
- alert_options: { class: "gl-mb-3 js-deny-all-requests-warning #{'gl-display-none' unless deny_all_requests}" }) do |c|
+ alert_options: { class: "gl-mb-3 js-deny-all-requests-warning #{'gl-hidden' unless deny_all_requests}" }) do |c|
- c.with_body do
= s_('OutboundRequests|Webhooks and integrations might not work properly. GitLab Duo will not work unless `cloud.gitlab.com` is in the following allowlist.')
= f.gitlab_ui_checkbox_component :allow_local_requests_from_web_hooks_and_services,
diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml
index bdaef614033..c0929a457c3 100644
--- a/app/views/admin/application_settings/_usage.html.haml
+++ b/app/views/admin/application_settings/_usage.html.haml
@@ -24,12 +24,12 @@
.form-text.gl-pl-6.gl-mb-6
- if @service_ping_data.present?
= render Pajamas::ButtonComponent.new(button_options: { class: 'js-payload-preview-trigger gl-mr-2', data: { payload_selector: ".#{payload_class}" } }) do
- = gl_loading_icon(css_class: 'js-spinner gl-display-none', inline: true)
+ = gl_loading_icon(css_class: 'js-spinner gl-hidden', inline: true)
%span.js-text.gl-display-inline= s_('AdminSettings|Preview payload')
= render Pajamas::ButtonComponent.new(button_options: { class: 'js-payload-download-trigger gl-mr-2', data: { endpoint: usage_data_admin_application_settings_path(format: :json) } }) do
- = gl_loading_icon(css_class: 'js-spinner gl-display-none', inline: true)
+ = gl_loading_icon(css_class: 'js-spinner gl-hidden', inline: true)
%span.js-text.gl-display-inline= s_('AdminSettings|Download payload')
- %pre.js-syntax-highlight.code.highlight.gl-mt-2.gl-display-none{ class: payload_class, data: { endpoint: usage_data_admin_application_settings_path(format: :html) } }
+ %pre.js-syntax-highlight.code.highlight.gl-mt-2.gl-hidden{ class: payload_class, data: { endpoint: usage_data_admin_application_settings_path(format: :html) } }
- else
= render Pajamas::AlertComponent.new(variant: :warning,
dismissible: false,
diff --git a/app/views/admin/impersonation_tokens/index.html.haml b/app/views/admin/impersonation_tokens/index.html.haml
index 37dd0a68f47..40140e2c4ba 100644
--- a/app/views/admin/impersonation_tokens/index.html.haml
+++ b/app/views/admin/impersonation_tokens/index.html.haml
@@ -22,7 +22,7 @@
= render Pajamas::ButtonComponent.new(size: :small, button_options: { class: 'js-toggle-button js-toggle-content', data: { testid: 'add-new-token-button' } }) do
= _('Add new token')
- c.with_body do
- .gl-new-card-add-form.gl-mt-3.gl-display-none.js-toggle-content.js-add-new-token-form
+ .gl-new-card-add-form.gl-mt-3.gl-hidden.js-toggle-content.js-add-new-token-form
= render 'shared/access_tokens/form',
ajax: true,
type: type,
diff --git a/app/views/groups/settings/access_tokens/index.html.haml b/app/views/groups/settings/access_tokens/index.html.haml
index 907633aa6f9..d6f89063cb5 100644
--- a/app/views/groups/settings/access_tokens/index.html.haml
+++ b/app/views/groups/settings/access_tokens/index.html.haml
@@ -40,7 +40,7 @@
= _('Add new token')
- c.with_body do
- if current_user.can?(:create_resource_access_tokens, @group)
- .gl-new-card-add-form.gl-mt-3.gl-display-none.js-toggle-content.js-add-new-token-form
+ .gl-new-card-add-form.gl-mt-3.gl-hidden.js-toggle-content.js-add-new-token-form
= render 'shared/access_tokens/form',
ajax: true,
type: type,
diff --git a/app/views/projects/_commit_button.html.haml b/app/views/projects/_commit_button.html.haml
index afb241dba7c..0373f74bcb1 100644
--- a/app/views/projects/_commit_button.html.haml
+++ b/app/views/projects/_commit_button.html.haml
@@ -2,7 +2,7 @@
- submit_button_options = { type: :submit, variant: :confirm, button_options: { id: 'commit-changes', class: 'js-commit-button', data: { testid: 'commit-button' } } }
= render Pajamas::ButtonComponent.new(**submit_button_options) do
= _('Commit changes')
- = render Pajamas::ButtonComponent.new(loading: true, disabled: true, **submit_button_options.merge({ button_options: { class: 'js-commit-button-loading gl-display-none' } })) do
+ = render Pajamas::ButtonComponent.new(loading: true, disabled: true, **submit_button_options.merge({ button_options: { class: 'js-commit-button-loading gl-hidden' } })) do
= _('Commit changes')
= render Pajamas::ButtonComponent.new(href: cancel_path, button_options: { class: 'gl-ml-3', id: 'cancel-changes', aria: { label: _('Discard changes') }, data: { confirm: leave_edit_message, confirm_btn_variant: "danger" } }) do
diff --git a/app/views/projects/_new_project_fields.html.haml b/app/views/projects/_new_project_fields.html.haml
index ede7dbdadd6..49286700503 100644
--- a/app/views/projects/_new_project_fields.html.haml
+++ b/app/views/projects/_new_project_fields.html.haml
@@ -13,7 +13,7 @@
= f.text_field :name, placeholder: "My awesome project", class: "form-control gl-form-input input-lg", data: { testid: 'project-name', track_label: "#{track_label}", track_action: "activate_form_input", track_property: "project_name", track_value: "" }, required: true, aria: { required: true }
%small#js-project-name-description.form-text.gl-text-secondary
= s_("ProjectsNew|Must start with a lowercase or uppercase letter, digit, emoji, or underscore. Can also contain dots, pluses, dashes, or spaces.")
- #js-project-name-error.gl-field-error.gl-mt-2.gl-display-none
+ #js-project-name-error.gl-field-error.gl-mt-2.gl-hidden
.form-group.gl-form-group.gl-w-full.gl-display-flex.gl-flex-wrap
.form-group.project-path.col-sm-6.gl-pr-0
= f.label :namespace_id, class: 'label-bold' do
@@ -38,9 +38,9 @@
= f.label :path, class: 'label-bold' do
%span= _("Project slug")
= f.text_field :path, placeholder: "my-awesome-project", class: "form-control gl-form-input", required: true, aria: { required: true }, data: { testid: 'project-path', username: current_user.username }
- .js-group-namespace-error.gl-my-3.gl-text-red-500.gl-display-none.col-12
+ .js-group-namespace-error.gl-my-3.gl-text-red-500.gl-hidden.col-12
= s_('ProjectsNew|Pick a group or namespace where you want to create this project.')
- .js-user-readme-repo.gl-my-3.gl-display-none.col-12
+ .js-user-readme-repo.gl-my-3.gl-hidden.col-12
= render Pajamas::AlertComponent.new(dismissible: false,
variant: :success) do |c|
- c.with_body do
diff --git a/app/views/projects/_sidebar.html.haml b/app/views/projects/_sidebar.html.haml
index 351625a4896..74ccde0119e 100644
--- a/app/views/projects/_sidebar.html.haml
+++ b/app/views/projects/_sidebar.html.haml
@@ -13,7 +13,7 @@
.home-panel-description-markdown.read-more-container{ itemprop: 'description', data: { 'read-more-height': 320 } }
.read-more-content.read-more-content--has-scrim
= markdown_field(@project, :description)
- .js-read-more-trigger.gl-display-none.gl-w-full.gl-h-8.gl-absolute.gl-bottom-0.gl-z-2.gl-bg-default
+ .js-read-more-trigger.gl-hidden.gl-w-full.gl-h-8.gl-absolute.gl-bottom-0.gl-z-2.gl-bg-default
= render Pajamas::ButtonComponent.new(variant: :link, button_options: { 'aria-label': _("Expand project information") }) do
= sprite_icon('chevron-down', size: 14)
= _("Read more")
diff --git a/app/views/projects/diffs/_file_header.html.haml b/app/views/projects/diffs/_file_header.html.haml
index cf2275e6cc7..e8221926904 100644
--- a/app/views/projects/diffs/_file_header.html.haml
+++ b/app/views/projects/diffs/_file_header.html.haml
@@ -1,7 +1,7 @@
- if local_assigns.fetch(:show_toggle, true)
%span.diff-toggle-caret
- = sprite_icon('chevron-right', css_class: 'chevron-right gl-display-none')
- = sprite_icon('chevron-down', css_class: 'chevron-down gl-display-none')
+ = sprite_icon('chevron-right', css_class: 'chevron-right gl-hidden')
+ = sprite_icon('chevron-down', css_class: 'chevron-down gl-hidden')
- if diff_file.submodule?
%span
diff --git a/app/views/projects/diffs/_replaced_image_diff.html.haml b/app/views/projects/diffs/_replaced_image_diff.html.haml
index 1f9533ade83..fac338fbc58 100644
--- a/app/views/projects/diffs/_replaced_image_diff.html.haml
+++ b/app/views/projects/diffs/_replaced_image_diff.html.haml
@@ -14,7 +14,7 @@
.wrap
.frame.deleted
= image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false)
- %p.image-info.gl-display-none
+ %p.image-info.gl-hidden
%span.meta-filesize= number_to_human_size(old_blob.size)
|
%strong W:
@@ -24,7 +24,7 @@
%span.meta-height
.wrap
= render partial: "projects/diffs/image_diff_frame", locals: { class_name: "added js-image-frame #{class_name}", position: position, note_type: DiffNote.name, image_path: blob_raw_url, alt: diff_file.new_path }
- %p.image-info.gl-display-none
+ %p.image-info.gl-hidden
%span.meta-filesize= number_to_human_size(blob.size)
|
%strong W:
@@ -33,7 +33,7 @@
%strong H:
%span.meta-height
- .swipe.view.gl-display-none
+ .swipe.view.gl-hidden
.swipe-frame
.frame.deleted.old-diff
= image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false)
@@ -43,7 +43,7 @@
%span.top-handle
%span.bottom-handle
- .onion-skin.view.gl-display-none
+ .onion-skin.view.gl-hidden
.onion-skin-frame
.frame.deleted
= image_tag(old_blob_raw_url, alt: diff_file.old_path, lazy: false)
@@ -54,7 +54,7 @@
.dragger{ :style => "left: 0px;" }
.opaque
-.view-modes.gl-display-none
+.view-modes.gl-hidden
%ul.view-modes-menu
%li.two-up{ data: { mode: 'two-up' } } 2-up
%li.swipe{ data: { mode: 'swipe' } } Swipe
diff --git a/app/views/projects/mirrors/_ssh_host_keys.html.haml b/app/views/projects/mirrors/_ssh_host_keys.html.haml
index cd9580d15e9..110c2b68b9f 100644
--- a/app/views/projects/mirrors/_ssh_host_keys.html.haml
+++ b/app/views/projects/mirrors/_ssh_host_keys.html.haml
@@ -4,7 +4,7 @@
.form-group.js-ssh-host-keys-section{ class: ('collapse' unless mirror.ssh_mirror_url?) }
= render Pajamas::ButtonComponent.new(button_options: { class: 'js-detect-host-keys gl-mr-3', data: { testid: 'detect-host-keys' } }) do
- = gl_loading_icon(inline: true, css_class: 'js-spinner gl-display-none gl-mr-2')
+ = gl_loading_icon(inline: true, css_class: 'js-spinner gl-hidden gl-mr-2')
= _('Detect host keys')
.fingerprint-ssh-info.js-fingerprint-ssh-info.gl-mt-3.gl-mb-3{ class: ('collapse' unless mirror.ssh_mirror_url?) }
%label.label-bold
diff --git a/app/views/projects/settings/access_tokens/index.html.haml b/app/views/projects/settings/access_tokens/index.html.haml
index 12202578cfe..99061dc5a53 100644
--- a/app/views/projects/settings/access_tokens/index.html.haml
+++ b/app/views/projects/settings/access_tokens/index.html.haml
@@ -39,7 +39,7 @@
= _('Add new token')
- c.with_body do
- if current_user.can?(:create_resource_access_tokens, @project)
- .gl-new-card-add-form.gl-mt-3.gl-display-none.js-toggle-content.js-add-new-token-form
+ .gl-new-card-add-form.gl-mt-3.gl-hidden.js-toggle-content.js-add-new-token-form
= render_if_exists 'projects/settings/access_tokens/form', type: type
#js-access-token-table-app{ data: { access_token_type: type, access_token_type_plural: type_plural, initial_active_access_tokens: @active_access_tokens.to_json, no_active_tokens_message: _('This project has no active access tokens.'), show_role: true } }
diff --git a/app/views/shared/_integration_settings.html.haml b/app/views/shared/_integration_settings.html.haml
index 46ef6550335..54c34ca7cd5 100644
--- a/app/views/shared/_integration_settings.html.haml
+++ b/app/views/shared/_integration_settings.html.haml
@@ -4,7 +4,7 @@
- if @default_integration
.js-vue-default-integration-settings{ data: integration_form_data(@default_integration, group: @group, project: @project) }
.js-vue-integration-settings{ data: integration_form_data(integration, group: @group, project: @project) }
- .js-integration-help-html.gl-display-none
+ .js-integration-help-html.gl-hidden
-# All content below will be repositioned in Vue
- if lookup_context.template_exists?('help', "shared/integrations/#{integration.to_param}", true)
= render "shared/integrations/#{integration.to_param}/help", integration: integration
diff --git a/app/views/shared/blob/_markdown_buttons.html.haml b/app/views/shared/blob/_markdown_buttons.html.haml
index 16bffaca810..9c615d52a66 100644
--- a/app/views/shared/blob/_markdown_buttons.html.haml
+++ b/app/views/shared/blob/_markdown_buttons.html.haml
@@ -29,11 +29,11 @@
= markdown_toolbar_button({ icon: "list-numbered", css_class: 'haml-markdown-button gl-mr-3', data: { "md-tag" => "1. ", "md-prepend" => true }, title: _("Add a numbered list") })
= markdown_toolbar_button({ icon: "list-task", css_class: 'haml-markdown-button gl-mr-3', data: { "md-tag" => "- [ ] ", "md-prepend" => true }, title: _("Add a checklist") })
= markdown_toolbar_button({ icon: "list-indent",
- css_class: 'gl-display-none gl-mr-3',
+ css_class: 'gl-hidden gl-mr-3',
data: { "md-command" => 'indentLines', "md-shortcuts": '["mod+]"]' },
title: sprintf(s_("MarkdownEditor|Indent line (%{modifier_key}])") % { modifier_key: modifier_key }) })
= markdown_toolbar_button({ icon: "list-outdent",
- css_class: 'gl-display-none gl-mr-3',
+ css_class: 'gl-hidden gl-mr-3',
data: { "md-command" => 'outdentLines', "md-shortcuts": '["mod+["]' },
title: sprintf(s_("MarkdownEditor|Outdent line (%{modifier_key}[)") % { modifier_key: modifier_key }) })
= markdown_toolbar_button({ icon: "details-block",
diff --git a/app/views/shared/members/_member.html.haml b/app/views/shared/members/_member.html.haml
index 15de82e0ea3..ff1e72b17e2 100644
--- a/app/views/shared/members/_member.html.haml
+++ b/app/views/shared/members/_member.html.haml
@@ -41,7 +41,7 @@
= _("Requested %{time_ago}").html_safe % { time_ago: time_ago_with_tooltip(member.requested_at) }
- else
= _("Given access %{time_ago}").html_safe % { time_ago: time_ago_with_tooltip(member.created_at) }
- %span.js-expires-in{ class: ('gl-display-none' unless member.expires?) }
+ %span.js-expires-in{ class: ('gl-hidden' unless member.expires?) }
·
%span.js-expires-in-text{ class: "has-tooltip#{' text-warning' if member.expires_soon?}", title: (member.expires_at.to_time.in_time_zone.to_fs(:medium) if member.expires?) }
- if member.expires?
diff --git a/app/views/shared/notes/_note.html.haml b/app/views/shared/notes/_note.html.haml
index b2d25f8b3c4..01a270e6f22 100644
--- a/app/views/shared/notes/_note.html.haml
+++ b/app/views/shared/notes/_note.html.haml
@@ -68,7 +68,7 @@
.system-note-commit-list-toggler.hide
= _("Toggle commit list")
= sprite_icon('chevron-down', css_class: 'js-chevron-down gl-ml-1 gl-vertical-align-text-bottom')
- = sprite_icon('chevron-up', css_class: 'js-chevron-up gl-ml-1 gl-vertical-align-text-bottom gl-display-none')
+ = sprite_icon('chevron-up', css_class: 'js-chevron-up gl-ml-1 gl-vertical-align-text-bottom gl-hidden')
- if note.attachment.url
.note-attachment
- if note.attachment.image?
diff --git a/app/views/shared/wikis/history.html.haml b/app/views/shared/wikis/history.html.haml
index c4a5a7eec7d..a27680a5855 100644
--- a/app/views/shared/wikis/history.html.haml
+++ b/app/views/shared/wikis/history.html.haml
@@ -17,39 +17,33 @@
= wiki_sidebar_toggle_button
-.prepend-top-default.gl-mb-3
- = render Pajamas::CardComponent.new(card_options: { class: 'gl-new-card gl-mt-0 gl-mb-5' }, header_options: { class: 'gl-new-card-header gl-border-b-0' }, body_options: { class: 'gl-new-card-body gl-px-0' }) do |c|
- - c.with_header do
- .gl-new-card-title-wrapper.gl-flex-col
- %h3.gl-new-card-title
- = _('Versions')
- .gl-new-card-count
- = sprite_icon('history', css_class: 'gl-mr-2')
- = @commits_count
- - c.with_body do
- .table-holder{ data: { testid: 'wiki-history-table' } }
- %table.table.wiki-history{ class: '!gl-mb-0' }
- %thead
+= render ::Layouts::CrudComponent.new(_('Versions'),
+ icon: 'history',
+ count: @commits_count) do |c|
+ - c.with_body do
+ .table-holder{ data: { testid: 'wiki-history-table' } }
+ %table.table.b-table.gl-table.b-table-stacked-sm.-gl-mt-1.-gl-mb-2.wiki-history
+ %thead.gl-hidden.md:gl-table-header-group
+ %tr
+ %th= _('Version')
+ %th= _('Author')
+ %th= _('Diff')
+ %th= _('Last updated')
+ %tbody
+ - @commits.each_with_index do |commit, i|
%tr
- %th= _('Version')
- %th= _('Author')
- %th= _('Diff')
- %th= _('Last updated')
- %tbody
- - @commits.each_with_index do |commit, i|
- %tr
- %td
- = link_to wiki_page_path(@wiki, @page, version_id: commit.id) do
- v#{@commits_count - i}
- %td
- = commit.author_name
- %td
- .commit-content
- = link_to wiki_page_path(@wiki, @page, action: :diff, version_id: commit.id), { title: commit.message } do
- = commit.message
- %td
- = time_ago_with_tooltip(commit.authored_date)
-
- = paginate @commits, theme: 'gitlab'
+ %td{ data: { label: _('Version') } }
+ = link_to wiki_page_path(@wiki, @page, version_id: commit.id) do
+ v#{@commits_count - i}
+ %td{ data: { label: _('Author') } }
+ = commit.author_name
+ %td{ data: { label: _('Diff') } }
+ .commit-content
+ = link_to wiki_page_path(@wiki, @page, action: :diff, version_id: commit.id), { title: commit.message } do
+ = commit.message
+ %td{ data: { label: _('Last updated') } }
+ = time_ago_with_tooltip(commit.authored_date)
+ - c.with_pagination do
+ = paginate @commits, theme: 'gitlab'
= render 'shared/wikis/sidebar'
diff --git a/app/views/user_settings/personal_access_tokens/index.html.haml b/app/views/user_settings/personal_access_tokens/index.html.haml
index dc87407adc7..90c58b2afa8 100644
--- a/app/views/user_settings/personal_access_tokens/index.html.haml
+++ b/app/views/user_settings/personal_access_tokens/index.html.haml
@@ -28,7 +28,7 @@
= render Pajamas::ButtonComponent.new(size: :small, button_options: { class: 'js-toggle-button js-toggle-content', data: { testid: 'add-new-token-button' } }) do
= _('Add new token')
- c.with_body do
- .gl-new-card-add-form.gl-mt-3.gl-display-none.js-toggle-content.js-add-new-token-form
+ .gl-new-card-add-form.gl-mt-3.gl-hidden.js-toggle-content.js-add-new-token-form
= render 'shared/access_tokens/form',
ajax: true,
type: type,
diff --git a/app/views/user_settings/ssh_keys/index.html.haml b/app/views/user_settings/ssh_keys/index.html.haml
index 8477d87a587..662cf69ee93 100644
--- a/app/views/user_settings/ssh_keys/index.html.haml
+++ b/app/views/user_settings/ssh_keys/index.html.haml
@@ -1,8 +1,8 @@
- page_title _('SSH Keys')
- add_page_specific_style 'page_bundles/profile'
- @force_desktop_expanded_sidebar = true
-- add_form_class = 'gl-display-none' if !form_errors(@key)
-- hide_class = 'gl-display-none' if form_errors(@key)
+- add_form_class = 'gl-hidden' if !form_errors(@key)
+- hide_class = 'gl-hidden' if form_errors(@key)
.settings-section.js-search-settings-section
.settings-sticky-header
diff --git a/config/events/push_package_to_registry.yml b/config/events/push_package_to_registry.yml
new file mode 100644
index 00000000000..a5d6e91a3ff
--- /dev/null
+++ b/config/events/push_package_to_registry.yml
@@ -0,0 +1,23 @@
+---
+description: Packaged pushed to the registry
+internal_events: true
+action: push_package_to_registry
+identifiers:
+ - project
+ - namespace
+ - user
+additional_properties:
+ label:
+ description: The name of the package type
+ property:
+ description: The auth type. Either 'guest', 'user' or 'deploy_token'
+product_group: package_registry
+milestone: '17.3'
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/161199
+distributions:
+ - ce
+ - ee
+tiers:
+ - free
+ - premium
+ - ultimate
diff --git a/config/feature_flags/development/wiki_redirection.yml b/config/feature_flags/development/comment_tooltips.yml
similarity index 55%
rename from config/feature_flags/development/wiki_redirection.yml
rename to config/feature_flags/development/comment_tooltips.yml
index 46a9ef5e591..eb530808622 100644
--- a/config/feature_flags/development/wiki_redirection.yml
+++ b/config/feature_flags/development/comment_tooltips.yml
@@ -1,8 +1,8 @@
---
-name: wiki_redirection
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/150727
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/460097
-milestone: '17.1'
+name: comment_tooltips
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/158020
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/476395
+milestone: '17.3'
type: development
-group: group::knowledge
-default_enabled: true
+group: group::project management
+default_enabled: false
diff --git a/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml b/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml
index 719530d28ad..488f8cb9454 100644
--- a/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml
+++ b/config/metrics/counts_all/20210216182859_package_events_i_package_composer_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_composer_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: composer
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml b/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml
index 209e7aa4bde..8a199294b74 100644
--- a/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml
+++ b/config/metrics/counts_all/20210216182905_package_events_i_package_conan_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_conan_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: conan
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml b/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml
index 1da1ea8c4cf..223a3aec27d 100644
--- a/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml
+++ b/config/metrics/counts_all/20210216182931_package_events_i_package_generic_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_generic_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: generic
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml b/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml
index d780e079008..cc81d57e8ec 100644
--- a/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml
+++ b/config/metrics/counts_all/20210216182936_package_events_i_package_golang_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_golang_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: golang
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml b/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml
index 76fca9ca695..c0f79845c47 100644
--- a/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml
+++ b/config/metrics/counts_all/20210216182942_package_events_i_package_maven_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_maven_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: maven
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml b/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml
index 4761c17a5aa..f50b9655894 100644
--- a/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml
+++ b/config/metrics/counts_all/20210216182948_package_events_i_package_npm_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_npm_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: npm
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml b/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml
index 54d7676cc59..2172214c42f 100644
--- a/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml
+++ b/config/metrics/counts_all/20210216182954_package_events_i_package_nuget_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_nuget_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: nuget
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml b/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml
index 4627ce01ef6..fd98c2ccc99 100644
--- a/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml
+++ b/config/metrics/counts_all/20210216183004_package_events_i_package_push_package.yml
@@ -6,11 +6,9 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml b/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml
index 26ba5279c09..cf1e31439ac 100644
--- a/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml
+++ b/config/metrics/counts_all/20210216183005_package_events_i_package_push_package_by_deploy_token.yml
@@ -7,11 +7,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_push_package_by_deploy_token
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ property: deploy_token
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml b/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml
index 759d814a63d..c664df74338 100644
--- a/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml
+++ b/config/metrics/counts_all/20210216183007_package_events_i_package_push_package_by_guest.yml
@@ -7,11 +7,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_push_package_by_guest
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ property: guest
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml b/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml
index cbf653c6365..3ea6f74d974 100644
--- a/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml
+++ b/config/metrics/counts_all/20210216183009_package_events_i_package_push_package_by_user.yml
@@ -7,11 +7,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_push_package_by_user
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ property: user
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml b/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml
index 8e2150d8ca2..e8ec6b8b1da 100644
--- a/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml
+++ b/config/metrics/counts_all/20210216183015_package_events_i_package_pypi_push_package.yml
@@ -6,11 +6,11 @@ product_group: package_registry
value_type: number
status: active
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_pypi_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: pypi
distribution:
- ee
- ce
diff --git a/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml b/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml
index 27d69b3830b..d7492bc96e8 100644
--- a/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml
+++ b/config/metrics/counts_all/20210303153004_package_events_i_package_rubygems_push_package.yml
@@ -8,11 +8,11 @@ status: active
time_frame: all
milestone: '13.10'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/53480
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_rubygems_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: rubygems
distribution:
- ce
- ee
diff --git a/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml b/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml
index c1ec6ab97f9..676d8983a51 100644
--- a/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml
+++ b/config/metrics/counts_all/20210410012204_package_events_i_package_terraform_module_push_package.yml
@@ -8,11 +8,11 @@ status: active
milestone: '13.11'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/55018
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_terraform_module_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: terraform_module
distribution:
- ce
- ee
diff --git a/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml b/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml
index 5412672e663..d980546f5db 100644
--- a/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml
+++ b/config/metrics/counts_all/20210625095025_package_events_i_package_helm_push_package.yml
@@ -7,11 +7,11 @@ status: active
milestone: "14.1"
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/64814
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_helm_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: helm
data_category: optional
distribution:
- ce
diff --git a/config/metrics/counts_all/20220906074525_package_events_i_package_rpm_push_package.yml b/config/metrics/counts_all/20220906074525_package_events_i_package_rpm_push_package.yml
index d8c45b0b498..b14637bd457 100644
--- a/config/metrics/counts_all/20220906074525_package_events_i_package_rpm_push_package.yml
+++ b/config/metrics/counts_all/20220906074525_package_events_i_package_rpm_push_package.yml
@@ -8,11 +8,11 @@ status: active
milestone: '15.6'
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/97133
time_frame: all
-data_source: redis
-instrumentation_class: RedisMetric
-options:
- prefix: package_events
- event: i_package_rpm_push_package
+data_source: internal_events
+events:
+ - name: push_package_to_registry
+ filter:
+ label: rpm
distribution:
- ce
- ee
diff --git a/config/metrics/schema/redis.json b/config/metrics/schema/redis.json
index 6a3f9942302..5150dc48720 100644
--- a/config/metrics/schema/redis.json
+++ b/config/metrics/schema/redis.json
@@ -7,7 +7,7 @@
}
},
"then": {
- "oneOf": [
+ "anyOf": [
{
"properties": {
"instrumentation_class": {
@@ -43,23 +43,9 @@
},
{
"properties": {
- "key_path": {
+ "status": {
"description": "Legacy metrics that do not match with the schema",
- "enum": [
- "counts.dependency_list_usages_total",
- "counts.network_policy_forwards",
- "counts.network_policy_drops",
- "counts.static_site_editor_views",
- "counts.static_site_editor_commits",
- "counts.static_site_editor_merge_requests",
- "counts.package_events_i_package_container_delete_package",
- "counts.package_events_i_package_container_pull_package",
- "counts.package_events_i_package_container_push_package",
- "counts.package_events_i_package_debian_push_package",
- "counts.package_events_i_package_tag_delete_package",
- "counts.package_events_i_package_tag_pull_package",
- "counts.package_events_i_package_tag_push_package"
- ]
+ "const": "removed"
}
}
}
diff --git a/doc/administration/raketasks/import_export_rake_tasks_troubleshooting.md b/doc/administration/raketasks/import_export_rake_tasks_troubleshooting.md
index 73b7dd15239..bef141bbd81 100644
--- a/doc/administration/raketasks/import_export_rake_tasks_troubleshooting.md
+++ b/doc/administration/raketasks/import_export_rake_tasks_troubleshooting.md
@@ -4,7 +4,7 @@ group: Distribution
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
---
-## Troubleshooting project import and export
+# Troubleshooting project import and export
If you are having trouble with import or export, use a Rake task to enable debug mode:
@@ -18,11 +18,11 @@ EXPORT_DEBUG=true gitlab-rake "gitlab:import_export:export[root, group/subgroup,
Then, review the following details on specific error messages.
-### `Exception: undefined method 'name' for nil:NilClass`
+## `Exception: undefined method 'name' for nil:NilClass`
The `username` is not valid.
-### `Exception: undefined method 'full_path' for nil:NilClass`
+## `Exception: undefined method 'full_path' for nil:NilClass`
The `namespace_path` does not exist.
For example, one of the groups or subgroups is mistyped or missing,
@@ -31,11 +31,11 @@ or you've specified the project name in the path.
The task only creates the project.
If you want to import it to a new group or subgroup, create it first.
-### `Exception: No such file or directory @ rb_sysopen - (filename)`
+## `Exception: No such file or directory @ rb_sysopen - (filename)`
The specified project export file in `archive_path` is missing.
-### `Exception: Permission denied @ rb_sysopen - (filename)`
+## `Exception: Permission denied @ rb_sysopen - (filename)`
The specified project export file cannot be accessed by the `git` user.
@@ -45,7 +45,7 @@ To fix the issue:
1. Change the file permissions to `0400`.
1. Move the file to a public folder (for example `/tmp/`).
-### `Name can contain only letters, digits, emoji ...`
+## `Name can contain only letters, digits, emoji ...`
```plaintext
Name can contain only letters, digits, emoji, '_', '.', '+', dashes, or spaces. It must start with a letter,
@@ -58,11 +58,11 @@ The project name specified in `project_path` is not valid for one of the specifi
Only put the project name in `project_path`. For example, if you provide a path of subgroups
it fails with this error as `/` is not a valid character in a project name.
-### `Name has already been taken and Path has already been taken`
+## `Name has already been taken and Path has already been taken`
A project with that name already exists.
-### `Exception: Error importing repository into (namespace) - No space left on device`
+## `Exception: Error importing repository into (namespace) - No space left on device`
The disk has insufficient space to complete the import.
@@ -70,7 +70,7 @@ During import, the tarball is cached in your configured `shared_path` directory.
disk has enough free space to accommodate both the cached tarball and the unpacked
project files on disk.
-### Import succeeds with `Total number of not imported relations: XX` message
+## Import succeeds with `Total number of not imported relations: XX` message
If you receive a `Total number of not imported relations: XX` message, and issues
aren't created during the import, check [exceptions_json.log](../logs/index.md#exceptions_jsonlog).
@@ -89,7 +89,7 @@ Issue.where(project_id: Project.find(ID).root_namespace.all_projects).maximum(:r
Repeat the import attempt and check if the issues are imported successfully.
-### Gitaly calls error when importing
+## Gitaly calls error when importing
If you're attempting to import a large project into a development environment, Gitaly might throw an error about too many calls or invocations. For example:
diff --git a/doc/user/application_security/dependency_list/index.md b/doc/user/application_security/dependency_list/index.md
index 391fa0a98a3..136e693e465 100644
--- a/doc/user/application_security/dependency_list/index.md
+++ b/doc/user/application_security/dependency_list/index.md
@@ -24,7 +24,16 @@ For an overview, see [Project Dependency](https://www.youtube.com/watch?v=ckqkn9
## Prerequisites
-To view your project's dependencies, ensure you meet the following requirements:
+To list your project's dependencies the SBOM document must:
+
+- Comply with [the CycloneDX specification](https://github.com/CycloneDX/specification) version `1.4` or `1.5`.
+- Be uploaded as [a CI/CD artifact report](../../../ci/yaml/artifacts_reports.md#artifactsreportscyclonedx) from a successful pipeline on the default branch.
+
+NOTE:
+Although this is not mandatory for the dependency list, some security features also require the
+document to include and comply with the [GitLab CycloneDX property taxonomy](../../../development/sec/cyclonedx_property_taxonomy.md).
+
+GitLab already generates this document when the following requirements are met:
- The [Dependency Scanning](../dependency_scanning/index.md)
or [Container Scanning](../container_scanning/index.md)
diff --git a/doc/user/gitlab_duo/index.md b/doc/user/gitlab_duo/index.md
index 25689a8d109..d6371f642b0 100644
--- a/doc/user/gitlab_duo/index.md
+++ b/doc/user/gitlab_duo/index.md
@@ -191,7 +191,7 @@ DETAILS:
**Status:** Experiment
- Help resolve a vulnerability by generating a merge request that addresses it.
-- LLM: Anthropic [Claude 3.5 Sonnet`](https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-sonnet).
+- LLM: Anthropic [Claude 3.5 Sonnet](https://console.cloud.google.com/vertex-ai/publishers/anthropic/model-garden/claude-3-5-sonnet).
- [View documentation](../application_security/vulnerabilities/index.md#vulnerability-resolution).
### Product Analytics
diff --git a/doc/user/group/settings/group_access_tokens.md b/doc/user/group/settings/group_access_tokens.md
index c0acae4e5a3..97a48816dff 100644
--- a/doc/user/group/settings/group_access_tokens.md
+++ b/doc/user/group/settings/group_access_tokens.md
@@ -36,9 +36,6 @@ associated with a group rather than a project or user.
In self-managed instances, group access tokens are subject to the same [maximum lifetime limits](../../../administration/settings/account_and_limit_settings.md#limit-the-lifetime-of-access-tokens) as personal access tokens if the limit is set.
-WARNING:
-The ability to create group access tokens without an expiry date was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/369122) in GitLab 15.4 and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/392855) in GitLab 16.0. In GitLab 16.0 and later, existing group access tokens without an expiry date are automatically given an expiry date 365 days later than the current date. The automatic adding of an expiry date occurs on GitLab.com during the 16.0 milestone. The automatic adding of an expiry date occurs on self-managed instances when they are upgraded to GitLab 16.0. This change is a breaking change.
-
You cannot use group access tokens to create other group, project, or personal access tokens.
Group access tokens inherit the [default prefix setting](../../../administration/settings/account_and_limit_settings.md#personal-access-token-prefix)
@@ -50,9 +47,7 @@ configured for personal access tokens.
> - Ability to create non-expiring group access tokens [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/392855) in GitLab 16.0.
WARNING:
-Project access tokens are treated as [internal users](../../../development/internal_users.md).
-If an internal user creates a project access token, that token is able to access
-all projects that have visibility level set to [Internal](../../public_access.md).
+The ability to create group access tokens without an expiry date was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/369122) in GitLab 15.4 and [removed](https://gitlab.com/gitlab-org/gitlab/-/issues/392855) in GitLab 16.0. For more information on expiry dates added to existing tokens, see the documentation on [access token expiration](#access-token-expiration).
To create a group access token:
@@ -71,6 +66,11 @@ To create a group access token:
A group access token is displayed. Save the group access token somewhere safe. After you leave or refresh the page, you can't view it again.
+WARNING:
+Group access tokens are treated as [internal users](../../../development/internal_users.md).
+If an internal user creates a group access token, that token is able to access
+all projects that have visibility level set to [Internal](../../public_access.md).
+
## Create a group access token using Rails console
If you are an administrator, you can create group access tokens in the Rails console:
@@ -188,6 +188,40 @@ To enable or disable group access token creation for all subgroups in a top-leve
Even when creation is disabled, you can still use and revoke existing group access tokens.
+## Access token expiration
+
+Whether your existing group access tokens have expiry dates automatically applied
+depends on what GitLab offering you have, and when you upgraded to GitLab 16.0 or later:
+
+- On GitLab.com, during the 16.0 milestone, existing group access tokens without
+ an expiry date were automatically given an expiry date of 365 days later than the current date.
+- On GitLab self-managed, if you upgraded from GitLab 15.11 or earlier to GitLab 16.0 or later:
+ - On or before July 23, 2024, existing group access tokens without an expiry
+ date were automatically given an expiry date of 365 days later than the current date.
+ This change is a breaking change.
+ - On or after July 24, 2024, existing group access tokens without an expiry
+ date did not have an expiry date set.
+
+On GitLab self-managed, if you do a new install of one of the following GitLab
+versions, your existing group access tokens do not have expiry dates
+automatically applied:
+
+- 16.0.9
+- 16.1.7
+- 16.2.10
+- 16.3.8
+- 16.4.6
+- 16.5.9
+- 16.6.9
+- 16.7.9
+- 16.8.9
+- 16.9.10
+- 16.10.9
+- 16.11.7
+- 17.0.5
+- 17.1.3
+- 17.2.1
+
## Bot users for groups
Bot users for groups are [GitLab-created non-billable users](../../../subscriptions/self_managed/index.md#billable-users).
diff --git a/doc/user/markdown.md b/doc/user/markdown.md
index 0adf1c5005b..843eb626cc7 100644
--- a/doc/user/markdown.md
+++ b/doc/user/markdown.md
@@ -50,6 +50,8 @@ You can use GitLab Flavored Markdown in the following areas:
You can also use other rich text files in GitLab. You might have to install a dependency
to do so. For more information, see the [`gitlab-markup` gem project](https://gitlab.com/gitlab-org/gitlab-markup).
+Support for improvements to Markdown preview when using GitLab Flavored Markdown in the Web IDE is proposed in [issue 645](https://gitlab.com/gitlab-org/gitlab-vscode-extension/-/issues/645).
+
### Differences between GitLab Flavored Markdown and standard Markdown