Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-12-04 21:15:15 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-12-04 21:15:15 +0300
commit795b6eb292706d577c13556a3583897f082dda6e (patch)
tree198ce8bed9a60d80609c9bb82615649e321c8af9
parenta155ff5671d06afd4c219a49b6c9fd673af69876 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitlab/merge_request_templates/Quarantine End to End Test.md6
-rw-r--r--DEI.md76
-rw-r--r--app/assets/javascripts/clusters_list/components/agents.vue6
-rw-r--r--app/assets/javascripts/content_editor/components/formatting_toolbar.vue113
-rw-r--r--app/assets/javascripts/content_editor/components/toolbar_attachment_button.vue2
-rw-r--r--app/assets/javascripts/content_editor/components/toolbar_button.vue2
-rw-r--r--app/assets/javascripts/content_editor/components/toolbar_table_button.vue2
-rw-r--r--app/assets/javascripts/jira_connect/subscriptions/components/feedback_banner.vue2
-rw-r--r--app/views/groups/show.html.haml2
-rw-r--r--app/views/projects/pipelines/charts.html.haml2
-rw-r--r--doc/administration/backup_restore/migrate_to_new_server.md3
-rw-r--r--doc/development/testing_guide/best_practices.md8
-rw-r--r--doc/integration/jira/configure.md4
-rw-r--r--doc/integration/jira/issues.md24
-rw-r--r--doc/subscriptions/gitlab_com/index.md14
-rw-r--r--doc/user/project/merge_requests/methods/index.md7
-rw-r--r--doc/user/project/protected_branches.md4
-rw-r--r--spec/frontend/content_editor/components/__snapshots__/toolbar_button_spec.js.snap2
-rw-r--r--spec/frontend/diffs/components/diff_row_spec.js6
19 files changed, 209 insertions, 76 deletions
diff --git a/.gitlab/merge_request_templates/Quarantine End to End Test.md b/.gitlab/merge_request_templates/Quarantine End to End Test.md
index 731b51b169b..c2f8143f13b 100644
--- a/.gitlab/merge_request_templates/Quarantine End to End Test.md
+++ b/.gitlab/merge_request_templates/Quarantine End to End Test.md
@@ -19,12 +19,12 @@ the noise (due to constantly failing tests, flaky tests, and so on) so that new
- [ ] [Code review guidelines](https://docs.gitlab.com/ee/development/code_review.html)
- [ ] [Style guides](https://docs.gitlab.com/ee/development/contributing/style_guides.html)
- [ ] Quarantine test check-list
- - [ ] Follow the [Quarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#quarantining-tests).
- - [ ] Confirm the test has a [`quarantine:` tag with the specified quarantine type](https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#quarantined-test-types).
+ - [ ] Follow the [Quarantining Tests guide](https://about.gitlab.com/handbook/engineering/infrastructure/test-platform/debugging-qa-test-failures/#quarantining-tests).
+ - [ ] Confirm the test has a [`quarantine:` tag with the specified quarantine type](https://about.gitlab.com/handbook/engineering/infrastructure/test-platform/debugging-qa-test-failures/#quarantined-test-types).
- [ ] Note if the test should be [quarantined for a specific environment](https://docs.gitlab.com/ee/development/testing_guide/end_to_end/execution_context_selection.html#quarantine-a-test-for-a-specific-environment).
- [ ] (Optionally) In case of an emergency (e.g. blocked deployments), consider adding labels to pick into auto-deploy (~"Pick into auto-deploy" ~"priority::1" ~"severity::1").
- [ ] Dequarantine test check-list
- - [ ] Follow the [Dequarantining Tests guide](https://about.gitlab.com/handbook/engineering/quality/quality-engineering/debugging-qa-test-failures/#dequarantining-tests).
+ - [ ] Follow the [Dequarantining Tests guide](https://about.gitlab.com/handbook/engineering/infrastructure/test-platform/debugging-qa-test-failures/#dequarantining-tests).
- [ ] Confirm the test consistently passes on the target GitLab environment(s).
- [ ] To ensure a faster turnaround, ask in the `#quality_maintainers` Slack channel for someone to review and merge the merge request, rather than assigning it directly.
diff --git a/DEI.md b/DEI.md
new file mode 100644
index 00000000000..014008a1ac8
--- /dev/null
+++ b/DEI.md
@@ -0,0 +1,76 @@
+# Diversity, Equity, and Inclusion Project Statement
+
+<!---
+The DEI.md file was originally created in the CHAOSS project. This comment provides attribution of that work as defined under the MIT license.
+-->
+
+<!---
+Please use the DEI.md Guide at https://github.com/badging/ProjectBadging/blob/main/Guide.DEI.md when creating your DEI.md file
+-->
+
+## GitLab
+
+The scope of this DEI.md file is intended to cover the entire organization of GitLab. Any specific differences for a particular GitLab project may be noted within this document.
+
+Our project prioritizes and reflects on DEI through a regular review of project policies and performance. This reflection is documented in the following DEI.md file based on specific [CHAOSS project](https://chaoss.community) DEI metrics.
+
+### [Project Access](https://chaoss.community/?p=4953)
+
+Project access is addressed in our project through various efforts. Through these efforts, we aim to support access for all. Specific efforts in our project include:
+
+- GitLab’s mission is “everyone can contribute."
+- All areas of GitLab are considered open to community contributions.
+- The GitLab Community Edition (CE) is open source and licensed under the terms of the MIT license.
+- The GitLab Enterprise Edition (EE) is licensed under The GitLab Enterprise Edition (EE) license and anyone can contribute to GitLab’s paid EE features by requesting a free EE license for contributing.
+- The GitLab Community is accessible online through the GitLab Forum, GitLab Discord server, online events and community pairing sessions as well as in-person through Contribution Days, GitLab Meetups, and World Tour days.
+- The GitLab.com SaaS product is conformant with the Voluntary Product Accessibility Template (VPAT 2.4) revised in June 2023.
+- GitLab aims to conform to level AA of the World Wide Web Consortium (W3C) Web Content Accessibility Guidelines 2.1.
+- Anyone can open up an issue on GitLab to express concerns or requests for accessibility improvements.
+- GitLab has an internal Product Accessibility working group to perform accessibility checks and report accessibility violations.
+- GitLab’s project maintainers and merge request coaches span global timezones and work asynchronously with contributors across the world.
+- GitLab is developing a unified contributor program that recognizes and rewards non-code contributors including contributions through events, blog posts, and comments in issues and merge requests.
+- GitLab encourages translation contributions and features translation documentation for making contributions through Crowdin.
+
+### [Communication Transparency](https://chaoss.community/?p=4957)
+
+Communication Transparency is addressed in our project through a variety of different efforts. Through these efforts, we aim to support transparency for all. Specific efforts in our project include:
+
+- Transparency is one of GitLab’s six core values.
+- GitLab is public by default.
+- Any information that cannot be made public (e.g. security and abuse vulnerabilities, financial information, customer data) is marked as internal to the company or limited access within the company. All of the internal and limited access topics are listed publicly and any other information not marked as internal or limited access should be available externally to the public.
+- GitLab operates using a single source of truth for all GitLab team members, users, customers, and other community members.
+- The GitLab Docs are public and open to contribution.
+- The GitLab Handbook is public and open to contribution.
+- GitLab is transparent about security incidents.
+- Incidents on GitLab SaaS are reported on the GitLab System Status and communicated on Twitter and Discord.
+- GitLab operates the GitLab Unfiltered YouTube channel that shares all publicly available meetings, recordings and community pairing sessions.
+
+### [Newcomer Experiences](https://chaoss.community/?p=4891)
+
+The newcomer experience is addressed in our project through a variety of different efforts. Through these efforts, we aim to support the newcomer experience for all new members. Specific efforts in our project include:
+
+- GitLab automatically applies a 1st contribution label to first-time contributors who open a merge request so they may be better identified and assisted by reviewers and coaches.
+- GitLab uses weekly triage reports on first-time contributors who are awaiting a response to a merge request. This ensures newcomers always hear back from a real person about their merge request.
+- GitLab reviews contributor documentation for inclusivity of newcomers, including improvements to documentation navigation, technical content and jargon, and improving workflow processes for newcomers.
+- GitLab's contributor documentation includes a full walkthrough tutorial for newcomers to make their first contribution. This includes setting up the development environment, making code changes, documentation updates and ways to find support.
+- GitLab uses quick win labels to identify issues for newcomers.
+- GitLab has a dedicated Contributor Success team to facilitate newcomer onboarding, help newcomers find issues, assist newcomers through merge requests and communicate to reviewers on the behalf of contributors to ensure a smoother review experience.
+- Newcomers are instructed to use the automated @gitlab-bot to ask for help directly in issues and merge requests. The bot will ping a merge request coach who will assist the newcomer.
+- GitLab offers a community fork which helps newcomers collaborate with other contributors under a shared fork. This means newcomers do not have to maintain and update a personal fork.
+- GitLab offers swag gifts to newcomers who make their first contribution.
+- GitLab tracks metrics for new contributors with the goal of increasing total contributors to the project and helping convert new contributors into returning contributors.
+
+### [Inclusive Leadership](https://chaoss.community/?p=3522)
+
+Inclusive leadership is addressed in our project through a variety of different efforts. Through these efforts, we aim to support leadership opportunities for project members with an interest. Specific efforts in our project include:
+
+- One or more project maintainers in the GitLab organization have completed neurodiversity and other DEI training.
+- One or more project maintainers in the GitLab organization are a member of a working group related to a DEI initiative.
+- One or more project maintainers in the GitLab organization participate in DEI group meetings or events.
+- GitLab's hiring managers ensure a diverse candidate slate and interview panel.
+
+Our project recognizes that the inclusion of the DEI.md file and the provided reflection on the specific DEI metrics does not ensure community safety nor community inclusiveness. The inclusion of the DEI.md file signals that we, as a project, are committed to centering DEI in our project and regularly reviewing and reflecting on our project DEI practices.
+
+If you do not feel that the DEI.md file appropriately addresses concerns you have about community safety and inclusiveness, please let us know. You can review the [GitLab Community Code of Conduct](https://about.gitlab.com/community/contribute/code-of-conduct/) and report your concerns or questions to the GitLab Trust and Safety team (abuse@gitlab.com).
+
+Last Reviewed: 2023-11-29
diff --git a/app/assets/javascripts/clusters_list/components/agents.vue b/app/assets/javascripts/clusters_list/components/agents.vue
index 33d98c381fb..39b6e287288 100644
--- a/app/assets/javascripts/clusters_list/components/agents.vue
+++ b/app/assets/javascripts/clusters_list/components/agents.vue
@@ -1,6 +1,7 @@
<!-- eslint-disable vue/multi-word-component-names -->
<script>
import { GlAlert, GlLoadingIcon, GlBanner } from '@gitlab/ui';
+import feedbackBannerIllustration from '@gitlab/svgs/dist/illustrations/chat-sm.svg?url';
import { s__ } from '~/locale';
import glFeatureFlagMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
@@ -112,6 +113,9 @@ export default {
feedbackBannerClasses() {
return this.isChildComponent ? 'gl-my-2' : 'gl-mb-4';
},
+ feedbackBannerIllustration() {
+ return feedbackBannerIllustration;
+ },
},
methods: {
updateTreeList(data) {
@@ -145,11 +149,11 @@ export default {
>
<gl-banner
v-if="!feedbackBannerDismissed"
- variant="introduction"
:class="feedbackBannerClasses"
:title="$options.i18n.feedbackBannerTitle"
:button-text="$options.i18n.feedbackBannerButton"
:button-link="$options.AGENT_FEEDBACK_ISSUE"
+ :svg-path="feedbackBannerIllustration"
@close="handleBannerClose"
>
<p>{{ $options.i18n.feedbackBannerText }}</p>
diff --git a/app/assets/javascripts/content_editor/components/formatting_toolbar.vue b/app/assets/javascripts/content_editor/components/formatting_toolbar.vue
index dc27278d255..f4c28ff9dda 100644
--- a/app/assets/javascripts/content_editor/components/formatting_toolbar.vue
+++ b/app/assets/javascripts/content_editor/components/formatting_toolbar.vue
@@ -3,6 +3,7 @@ import CommentTemplatesDropdown from '~/vue_shared/components/markdown/comment_t
import { __, sprintf } from '~/locale';
import { getModifierKey } from '~/constants';
import trackUIControl from '../services/track_ui_control';
+import HeaderDivider from '../../vue_shared/components/markdown/header_divider.vue';
import ToolbarButton from './toolbar_button.vue';
import ToolbarAttachmentButton from './toolbar_attachment_button.vue';
import ToolbarTableButton from './toolbar_table_button.vue';
@@ -17,6 +18,7 @@ export default {
ToolbarAttachmentButton,
ToolbarMoreDropdown,
CommentTemplatesDropdown,
+ HeaderDivider,
},
inject: {
newCommentTemplatePath: { default: null },
@@ -76,21 +78,27 @@ export default {
class="gl-w-full gl-display-flex gl-align-items-center gl-flex-wrap gl-border-b gl-border-gray-100 gl-px-3 gl-rounded-top-base gl-justify-content-space-between"
data-testid="formatting-toolbar"
>
- <div class="gl-py-3 gl-display-flex gl-flex-wrap">
- <toolbar-text-style-dropdown
- data-testid="text-styles"
- @execute="trackToolbarControlExecution"
- />
- <toolbar-button
- v-if="codeSuggestionsEnabled"
- data-testid="code-suggestion"
- content-type="codeSuggestion"
- icon-name="doc-code"
- editor-command="insertCodeSuggestion"
- :label="__('Insert suggestion')"
- :show-active-state="false"
- @execute="trackToolbarControlExecution"
- />
+ <div class="gl-py-3 gl-w-full gl-display-flex gl-align-items-flex-start">
+ <div class="gl-display-flex">
+ <toolbar-text-style-dropdown
+ data-testid="text-styles"
+ @execute="trackToolbarControlExecution"
+ />
+ <header-divider />
+ </div>
+ <div v-if="codeSuggestionsEnabled" class="gl-display-flex">
+ <toolbar-button
+ v-if="codeSuggestionsEnabled"
+ data-testid="code-suggestion"
+ content-type="codeSuggestion"
+ icon-name="doc-code"
+ editor-command="insertCodeSuggestion"
+ :label="__('Insert suggestion')"
+ :show-active-state="false"
+ @execute="trackToolbarControlExecution"
+ />
+ <header-divider />
+ </div>
<toolbar-button
data-testid="bold"
content-type="bold"
@@ -107,14 +115,17 @@ export default {
:label="i18n.italic"
@execute="trackToolbarControlExecution"
/>
- <toolbar-button
- data-testid="strike"
- content-type="strike"
- icon-name="strikethrough"
- editor-command="toggleStrike"
- :label="i18n.strike"
- @execute="trackToolbarControlExecution"
- />
+ <div class="gl-display-flex">
+ <toolbar-button
+ data-testid="strike"
+ content-type="strike"
+ icon-name="strikethrough"
+ editor-command="toggleStrike"
+ :label="i18n.strike"
+ @execute="trackToolbarControlExecution"
+ />
+ <header-divider />
+ </div>
<toolbar-button
data-testid="blockquote"
content-type="blockquote"
@@ -157,32 +168,38 @@ export default {
:label="i18n.numberedList"
@execute="trackToolbarControlExecution"
/>
- <toolbar-button
- data-testid="task-list"
- content-type="taskList"
- icon-name="list-task"
- class="gl-display-none gl-sm-display-inline"
- editor-command="toggleTaskList"
- :label="i18n.taskList"
- @execute="trackToolbarControlExecution"
- />
+ <div class="gl-display-flex">
+ <toolbar-button
+ data-testid="task-list"
+ content-type="taskList"
+ icon-name="list-task"
+ class="gl-display-none gl-sm-display-inline"
+ editor-command="toggleTaskList"
+ :label="i18n.taskList"
+ @execute="trackToolbarControlExecution"
+ />
+ <header-divider />
+ </div>
<toolbar-table-button data-testid="table" @execute="trackToolbarControlExecution" />
- <toolbar-attachment-button
- v-if="!hideAttachmentButton"
- data-testid="attachment"
- @execute="trackToolbarControlExecution"
- />
- <!-- TODO Add icon and trigger functionality from here -->
- <toolbar-button
- v-if="supportsQuickActions"
- data-testid="quick-actions"
- content-type="quickAction"
- icon-name="quick-actions"
- class="gl-display-none gl-sm-display-inline"
- editor-command="insertQuickAction"
- :label="__('Add a quick action')"
- @execute="trackToolbarControlExecution"
- />
+ <div class="gl-display-flex">
+ <toolbar-attachment-button
+ v-if="!hideAttachmentButton"
+ data-testid="attachment"
+ @execute="trackToolbarControlExecution"
+ />
+ <!-- TODO Add icon and trigger functionality from here -->
+ <toolbar-button
+ v-if="supportsQuickActions"
+ data-testid="quick-actions"
+ content-type="quickAction"
+ icon-name="quick-actions"
+ class="gl-display-none gl-sm-display-inline"
+ editor-command="insertQuickAction"
+ :label="__('Add a quick action')"
+ @execute="trackToolbarControlExecution"
+ />
+ <header-divider v-if="newCommentTemplatePath" />
+ </div>
<comment-templates-dropdown
v-if="newCommentTemplatePath"
:new-comment-template-path="newCommentTemplatePath"
diff --git a/app/assets/javascripts/content_editor/components/toolbar_attachment_button.vue b/app/assets/javascripts/content_editor/components/toolbar_attachment_button.vue
index 78a01693f14..9093fc323cc 100644
--- a/app/assets/javascripts/content_editor/components/toolbar_attachment_button.vue
+++ b/app/assets/javascripts/content_editor/components/toolbar_attachment_button.vue
@@ -47,7 +47,7 @@ export default {
category="tertiary"
icon="paperclip"
size="small"
- class="gl-mr-3"
+ class="gl-mr-2"
lazy
@click="openFileUpload"
/>
diff --git a/app/assets/javascripts/content_editor/components/toolbar_button.vue b/app/assets/javascripts/content_editor/components/toolbar_button.vue
index 60bfaab25a5..a4c4814fde9 100644
--- a/app/assets/javascripts/content_editor/components/toolbar_button.vue
+++ b/app/assets/javascripts/content_editor/components/toolbar_button.vue
@@ -87,7 +87,7 @@ export default {
:aria-label="label"
:title="label"
:icon="iconName"
- class="gl-mr-3"
+ class="gl-mr-2"
@click="execute"
/>
</editor-state-observer>
diff --git a/app/assets/javascripts/content_editor/components/toolbar_table_button.vue b/app/assets/javascripts/content_editor/components/toolbar_table_button.vue
index ab1546b9016..f09d583996c 100644
--- a/app/assets/javascripts/content_editor/components/toolbar_table_button.vue
+++ b/app/assets/javascripts/content_editor/components/toolbar_table_button.vue
@@ -93,7 +93,7 @@ export default {
:aria-label="__('Insert table')"
:toggle-text="__('Insert table')"
positioning-strategy="fixed"
- class="content-editor-table-dropdown gl-mr-3"
+ class="content-editor-table-dropdown gl-mr-2"
text-sr-only
:fluid-width="true"
@shown="setFocus(1, 1)"
diff --git a/app/assets/javascripts/jira_connect/subscriptions/components/feedback_banner.vue b/app/assets/javascripts/jira_connect/subscriptions/components/feedback_banner.vue
index 5d6117b836d..352d729794a 100644
--- a/app/assets/javascripts/jira_connect/subscriptions/components/feedback_banner.vue
+++ b/app/assets/javascripts/jira_connect/subscriptions/components/feedback_banner.vue
@@ -1,6 +1,6 @@
<script>
import { GlBanner } from '@gitlab/ui';
-import ChatBubbleSvg from '@gitlab/svgs/dist/illustrations/chat-bubble-sm.svg?url';
+import ChatBubbleSvg from '@gitlab/svgs/dist/illustrations/chat-sm.svg?url';
import { s__, __ } from '~/locale';
import LocalStorageSync from '~/vue_shared/components/local_storage_sync.vue';
diff --git a/app/views/groups/show.html.haml b/app/views/groups/show.html.haml
index 6758598d4dd..32975562875 100644
--- a/app/views/groups/show.html.haml
+++ b/app/views/groups/show.html.haml
@@ -7,7 +7,7 @@
- if show_invite_banner?(@group)
= content_for :group_invite_members_banner do
.container-fluid.container-limited{ class: "gl-pb-2! gl-pt-6! #{@content_class}" }
- .js-group-invite-members-banner{ data: { svg_path: image_path('illustrations/empty-state/empty-merge-requests-md.svg'),
+ .js-group-invite-members-banner{ data: { svg_path: image_path('illustrations/add-user-sm.svg'),
track_label: 'invite_members_banner',
invite_members_path: group_group_members_path(@group),
callouts_path: group_callouts_path,
diff --git a/app/views/projects/pipelines/charts.html.haml b/app/views/projects/pipelines/charts.html.haml
index c3d6d0c5971..818184903d6 100644
--- a/app/views/projects/pipelines/charts.html.haml
+++ b/app/views/projects/pipelines/charts.html.haml
@@ -7,5 +7,5 @@
failed_pipelines_link: project_pipelines_path(@project, page: '1', scope: 'all', status: 'failed'),
coverage_chart_path: charts_project_graph_path(@project, @project.default_branch),
test_runs_empty_state_image_path: image_path('illustrations/pipeline.svg'),
- project_quality_summary_feedback_image_path: image_path('illustrations/chat-bubble-sm.svg'),
+ project_quality_summary_feedback_image_path: image_path('illustrations/chat-sm.svg'),
default_branch: @project.default_branch } }
diff --git a/doc/administration/backup_restore/migrate_to_new_server.md b/doc/administration/backup_restore/migrate_to_new_server.md
index 7544fc680be..f8d01cb6e2a 100644
--- a/doc/administration/backup_restore/migrate_to_new_server.md
+++ b/doc/administration/backup_restore/migrate_to_new_server.md
@@ -180,8 +180,7 @@ To prepare the new server:
1. [Restore the GitLab backup](restore_gitlab.md).
1. Verify that the Redis database restored correctly:
- 1. On the left sidebar, select **Search or go to**.
- 1. Select **Admin Area**.
+ 1. On the left sidebar, at the bottom, select **Admin Area**.
1. On the left sidebar, select **Monitoring > Background Jobs**.
1. Under the Sidekiq dashboard, verify that the numbers
match with what was shown on the old server.
diff --git a/doc/development/testing_guide/best_practices.md b/doc/development/testing_guide/best_practices.md
index dbee7acac69..5648c39e370 100644
--- a/doc/development/testing_guide/best_practices.md
+++ b/doc/development/testing_guide/best_practices.md
@@ -1298,7 +1298,7 @@ creates and deletes indices before and after all examples.
The `:elastic_delete_by_query` trait was added to reduce runtime for pipelines by creating and deleting indices at the
start and end of each context only. The [Elasticsearch delete by query API](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete-by-query.html)
-is used to delete data in all indices between examples to ensure a clean index.
+is used to delete data in all indices (except the migrations index) between examples to ensure a clean index.
The `:elastic_clean` trait creates and deletes indices between examples to ensure a clean index. This way, tests are not
polluted with non-essential data. If using the `:elastic` or `:elastic_delete_by_query` trait
@@ -1336,6 +1336,12 @@ It uses the [Elasticsearch Refresh API](https://www.elastic.co/guide/en/elastics
to make sure all operations performed on an index since the last refresh are available for search. This method is typically
called after loading data into PostgreSQL to ensure the data is indexed and searchable.
+You can use the `SEARCH_SPEC_BENCHMARK` environment variable to benchmark test setup steps:
+
+```console
+SEARCH_SPEC_BENCHMARK=1 bundle exec rspec ee/spec/lib/elastic/latest/merge_request_class_proxy_spec.rb
+```
+
#### Test Snowplow events
WARNING:
diff --git a/doc/integration/jira/configure.md b/doc/integration/jira/configure.md
index 5eb51f67837..ae536c2b879 100644
--- a/doc/integration/jira/configure.md
+++ b/doc/integration/jira/configure.md
@@ -58,8 +58,8 @@ To configure your project settings in GitLab:
- To [transition Jira issues automatically](../../user/project/issues/managing_issues.md#closing-issues-automatically) in GitLab,
select the **Enable Jira transitions** checkbox.
1. In the **Jira issue matching** section:
- - For **Jira issue regex**, [enter a regex pattern](issues.md#use-regular-expression).
- - For **Jira issue prefix**, [enter a prefix](issues.md#use-a-prefix).
+ - For **Jira issue regex**, [enter a regex pattern](issues.md#define-a-regex-pattern).
+ - For **Jira issue prefix**, [enter a prefix](issues.md#define-a-prefix).
1. In the **Issues** section:
- To [view Jira issues](issues.md#view-jira-issues) in GitLab, select the **Enable Jira issues** checkbox and
enter a Jira project key. You can only view issues from a single Jira project in a GitLab project.
diff --git a/doc/integration/jira/issues.md b/doc/integration/jira/issues.md
index c2b52a0177c..6fe7a42352f 100644
--- a/doc/integration/jira/issues.md
+++ b/doc/integration/jira/issues.md
@@ -67,12 +67,16 @@ Jira issue can't be merged. The merge request displays the message
You can configure custom rules for how GitLab matches Jira issue keys by defining:
-- [A regex pattern](#use-regular-expression)
-- [A prefix](#use-a-prefix)
+- [A regex pattern](#define-a-regex-pattern)
+- [A prefix](#define-a-prefix)
-When you do not configure custom rules, the [default behavior](https://gitlab.com/gitlab-org/gitlab/-/blob/9b062706ac6203f0fa897a9baf5c8e9be1876c74/lib/gitlab/regex.rb#L245) is used.
+When you do not configure custom rules, the
+[default behavior](https://gitlab.com/gitlab-org/gitlab/-/blob/9b062706ac6203f0fa897a9baf5c8e9be1876c74/lib/gitlab/regex.rb#L245) is used.
-### Use regular expression
+### Define a regex pattern
+
+You can use a regular expression (regex) to match Jira issue keys.
+The regex pattern must follow the [RE2 syntax](https://github.com/google/re2/wiki/Syntax).
To define a regex pattern for Jira issue keys:
@@ -83,14 +87,14 @@ To define a regex pattern for Jira issue keys:
1. In the **Jira issue regex** text box, enter a regex pattern.
1. Select **Save changes**.
-The regular expression must follow the [RE2 syntax](https://github.com/google/re2/wiki/Syntax).
-
-For more information, see the [Atlassian documentation](https://confluence.atlassian.com/adminjiraserver073/changing-the-project-key-format-861253229.html).
+For more information, see the
+[Atlassian documentation](https://confluence.atlassian.com/adminjiraserver073/changing-the-project-key-format-861253229.html).
-### Use a prefix
+### Define a prefix
-You can define a prefix for GitLab to match Jira issue keys. For example, if your Jira issue ID is `ALPHA-1`
-and you've set a `JIRA#` prefix, GitLab matches `JIRA#ALPHA-1` rather than `ALPHA-1`.
+You can use a prefix to match Jira issue keys.
+For example, if your Jira issue key is `ALPHA-1` and you define a `JIRA#` prefix,
+GitLab matches `JIRA#ALPHA-1` rather than `ALPHA-1`.
To define a prefix for Jira issue keys:
diff --git a/doc/subscriptions/gitlab_com/index.md b/doc/subscriptions/gitlab_com/index.md
index 8e1cd76b0dc..b64d8df6cf8 100644
--- a/doc/subscriptions/gitlab_com/index.md
+++ b/doc/subscriptions/gitlab_com/index.md
@@ -468,6 +468,20 @@ To confirm the available storage, go to your group, and then select
The **Purchased storage available** total is incremented by the amount purchased. All locked
projects are unlocked and their excess usage is deducted from the additional storage.
+## Enterprise Agile Planning
+
+GitLab Enterprise Agile Planning is an add-on that helps bring non-technical users into the same
+DevSecOps platform where engineers build, test, secure, and deploy code.
+The add-on enables cross-team collaboration between developers and non-developers without having to
+purchase full GitLab licenses for non-engineering team members.
+With Enterprise Agile Planning seats, non-engineering team members can participate in planning
+workflows, measure software delivery velocity and impact with Value Stream Analytics, and use
+executive dashboards to drive organizational visibility.
+
+### Purchase additional Enterprise Agile Planning seats
+
+Please contact your [GitLab sales representative](https://about.gitlab.com/sales/) for more information.
+
## Contact Support
Learn more about:
diff --git a/doc/user/project/merge_requests/methods/index.md b/doc/user/project/merge_requests/methods/index.md
index 959ada4928e..a0372f895df 100644
--- a/doc/user/project/merge_requests/methods/index.md
+++ b/doc/user/project/merge_requests/methods/index.md
@@ -220,8 +220,11 @@ considered equivalent to rebasing.
To rebase a merge request's branch without triggering a CI/CD pipeline, select
**Rebase without pipeline** from the merge request reports section.
-This option is available when fast-forward merge is not possible but a conflict-free
-rebase is possible.
+
+This option is:
+
+- Available when fast-forward merge is not possible but a conflict-free rebase is possible.
+- Not available when the **Pipelines must succeed** option is enabled.
Rebasing without a CI/CD pipeline saves resources in projects with a semi-linear
workflow that requires frequent rebases.
diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md
index 2ec92fbb52f..a77babb6cd6 100644
--- a/doc/user/project/protected_branches.md
+++ b/doc/user/project/protected_branches.md
@@ -363,6 +363,10 @@ Thus, they can skip merge request approval rules, Code Owners included.
The permission to merge or push to protected branches defines
whether or not a user can run CI/CD pipelines and execute actions on jobs.
+Because [merge request pipelines](../../ci/pipelines/merge_request_pipelines.md) run on the source
+branch, a pipeline isn't created if the user opening a merge request does not have permission to merge
+or push to the source branch.
+
See [Security on protected branches](../../ci/pipelines/index.md#pipeline-security-on-protected-branches)
for details about the pipelines security model.
diff --git a/spec/frontend/content_editor/components/__snapshots__/toolbar_button_spec.js.snap b/spec/frontend/content_editor/components/__snapshots__/toolbar_button_spec.js.snap
index a708f7d5f47..0fafd42095b 100644
--- a/spec/frontend/content_editor/components/__snapshots__/toolbar_button_spec.js.snap
+++ b/spec/frontend/content_editor/components/__snapshots__/toolbar_button_spec.js.snap
@@ -3,7 +3,7 @@
exports[`content_editor/components/toolbar_button displays tertiary, medium button with a provided label and icon 1`] = `
<b-button-stub
aria-label="Bold"
- class="btn-default-tertiary btn-icon gl-button gl-mr-3"
+ class="btn-default-tertiary btn-icon gl-button gl-mr-2"
size="sm"
tag="button"
title="Bold"
diff --git a/spec/frontend/diffs/components/diff_row_spec.js b/spec/frontend/diffs/components/diff_row_spec.js
index 30510958704..e9fbde11211 100644
--- a/spec/frontend/diffs/components/diff_row_spec.js
+++ b/spec/frontend/diffs/components/diff_row_spec.js
@@ -112,6 +112,8 @@ describe('DiffRow', () => {
});
const getCommentButton = (side) => wrapper.find(`[data-testid="${side}-comment-button"]`);
+ const findRightCommentButton = () => wrapper.find('[data-testid="right-comment-button"]');
+ const findLeftCommentButton = () => wrapper.find('[data-testid="left-comment-button"]');
describe.each`
side
@@ -135,6 +137,10 @@ describe('DiffRow', () => {
it('renders', () => {
wrapper = createWrapper({ props: { line, inline: false } });
+ expect(findRightCommentButton().attributes('draggable')).toBe('true');
+ expect(findLeftCommentButton().attributes('draggable')).toBe(
+ side === 'left' ? 'true' : 'false',
+ );
expect(getCommentButton(side).exists()).toBe(true);
});