diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index e21e2b1e446..095b6c8b4d6 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-ca638e23ca921cf2f2f3cdc8a6ff033af667170b
+3fc66dc23581de48bdbbf1b5a5d5ca9faf5f925b
diff --git a/app/assets/javascripts/issues/show/components/incidents/incident_tabs.vue b/app/assets/javascripts/issues/show/components/incidents/incident_tabs.vue
index 6fdce6045f2..dd84a1d7d67 100644
--- a/app/assets/javascripts/issues/show/components/incidents/incident_tabs.vue
+++ b/app/assets/javascripts/issues/show/components/incidents/incident_tabs.vue
@@ -101,7 +101,7 @@ export default {
>
-
+
{
renderGFM(this.$refs.content);
+ handleLocationHash();
})
.catch(() =>
createFlash({
diff --git a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
index 09d46ce3e66..667cb0090b3 100644
--- a/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
+++ b/app/assets/javascripts/runner/components/registration/registration_token_reset_dropdown_item.vue
@@ -8,14 +8,16 @@ import runnersRegistrationTokenResetMutation from '~/runner/graphql/list/runners
import { captureException } from '~/runner/sentry_utils';
import { INSTANCE_TYPE, GROUP_TYPE, PROJECT_TYPE } from '../../constants';
+const i18n = {
+ modalAction: s__('Runners|Reset token'),
+ modalCancel: __('Cancel'),
+ modalCopy: __('Are you sure you want to reset the registration token?'),
+ modalTitle: __('Reset registration token'),
+};
+
export default {
name: 'RunnerRegistrationTokenReset',
- i18n: {
- modalAction: s__('Runners|Reset token'),
- modalCancel: __('Cancel'),
- modalCopy: __('Are you sure you want to reset the registration token?'),
- modalTitle: __('Reset registration token'),
- },
+ i18n,
components: {
GlDropdownItem,
GlLoadingIcon,
@@ -68,6 +70,18 @@ export default {
return null;
}
},
+ actionPrimary() {
+ return {
+ text: i18n.modalAction,
+ attributes: [{ variant: 'danger' }],
+ };
+ },
+ actionSecondary() {
+ return {
+ text: i18n.modalCancel,
+ attributes: [{ variant: 'default' }],
+ };
+ },
},
methods: {
handleModalPrimary() {
@@ -115,14 +129,8 @@ export default {
diff --git a/app/assets/javascripts/vue_merge_request_widget/components/extensions/telemetry.js b/app/assets/javascripts/vue_merge_request_widget/components/extensions/telemetry.js
index aec3a35f37c..b551cd2fd60 100644
--- a/app/assets/javascripts/vue_merge_request_widget/components/extensions/telemetry.js
+++ b/app/assets/javascripts/vue_merge_request_widget/components/extensions/telemetry.js
@@ -65,7 +65,7 @@ function simplifyWidgetName(componentName) {
function baseRedisEventName(extensionName) {
const redisEventName = extensionName.replace(/([A-Z])/g, '_$1').toLowerCase();
- return `i_merge_request_widget_${redisEventName}`;
+ return `i_code_review_merge_request_widget_${redisEventName}`;
}
function whenable(bus) {
diff --git a/app/views/projects/incidents/show.html.haml b/app/views/projects/incidents/show.html.haml
index 4d4607e8e36..5043f94bd5c 100644
--- a/app/views/projects/incidents/show.html.haml
+++ b/app/views/projects/incidents/show.html.haml
@@ -2,5 +2,6 @@
- add_to_breadcrumbs _("Incidents"), project_incidents_path(@project)
- breadcrumb_title @issue.to_reference
- page_title "#{@issue.title} (#{@issue.to_reference})", _("Incidents")
+- add_page_specific_style 'page_bundles/issues_show'
= render 'projects/issuable/show', issuable: @issue
diff --git a/config/feature_flags/development/hard_failure_for_mirrors_without_license.yml b/config/feature_flags/development/hard_failure_for_mirrors_without_license.yml
new file mode 100644
index 00000000000..f138c8ea497
--- /dev/null
+++ b/config/feature_flags/development/hard_failure_for_mirrors_without_license.yml
@@ -0,0 +1,8 @@
+---
+name: hard_failure_for_mirrors_without_license
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/92422
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/367851
+milestone: '15.2'
+type: development
+group: group::source code
+default_enabled: false
diff --git a/doc/development/contributing/issue_workflow.md b/doc/development/contributing/issue_workflow.md
index 97c8c179e09..c6d977cf5ad 100644
--- a/doc/development/contributing/issue_workflow.md
+++ b/doc/development/contributing/issue_workflow.md
@@ -68,7 +68,7 @@ labels, you can _always_ add the type, stage, group, and often the category/feat
Type labels are very important. They define what kind of issue this is. Every
issue should have one and only one.
-The current type labels are [available in the handbook](https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification)
+The SSOT for type and subtype labels is [available in the handbook](https://about.gitlab.com/handbook/engineering/metrics/#work-type-classification).
A number of type labels have a priority assigned to them, which automatically
makes them float to the top, depending on their importance.
diff --git a/doc/user/packages/package_registry/reduce_package_registry_storage.md b/doc/user/packages/package_registry/reduce_package_registry_storage.md
index ed4ef1665bc..4a03bd9e8a0 100644
--- a/doc/user/packages/package_registry/reduce_package_registry_storage.md
+++ b/doc/user/packages/package_registry/reduce_package_registry_storage.md
@@ -50,3 +50,39 @@ To delete package files in the UI, from your group or project:
1. Expand the ellipsis and select **Delete file**.
The package files are permanently deleted.
+
+## Cleanup policy
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/346153) in GitLab 15.2.
+
+Depending on the number of packages to remove, the process of manually deleting the packages can take a long time to finish.
+A cleanup policy defines a set of rules that, applied to a project, defines which package files you can automatically delete.
+
+### Enable the cleanup policy
+
+By default, the packages cleanup policy is disabled. To enable it:
+
+1. Go to your project **Settings > Packages & Registries**.
+1. Expand **Manage storage used by package assets**.
+1. Set the rules appropriately.
+
+NOTE:
+To access these project settings, you must be at least a maintainer on the related project.
+
+### Available rules
+
+- `Number of duplicated assets to keep`. The number of duplicated assets to keep. Some package formats allow you
+ to upload more than one copy of an asset. You can limit the number of duplicated assets to keep and automatically
+ delete the oldest files once the limit is reached.
+
+### Set cleanup limits to conserve resources
+
+A background process executes the package-cleanup policies. This process can take a long time to finish and consumes
+server resources while it is running.
+
+You can use the following setting to limit the number of cleanup workers:
+
+- `package_registry_cleanup_policies_worker_capacity`: the maximum number of cleanup workers running concurrently.
+ This number must be greater than or equal to `0`.
+ We recommend starting with a low number and increasing it after monitoring the resources used by the background workers.
+ To remove all workers and not execute the cleanup policies, set this to `0`. The default value is `2`.
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 2f11794b514..e36ab9f9530 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -4803,16 +4803,13 @@ msgstr ""
msgid "ApprovalSettings|Prevent approval by author"
msgstr ""
-msgid "ApprovalSettings|Prevent approval by author."
-msgstr ""
-
msgid "ApprovalSettings|Prevent approvals by users who add commits"
msgstr ""
-msgid "ApprovalSettings|Prevent approvals by users who add commits."
+msgid "ApprovalSettings|Prevent editing approval rules in merge requests"
msgstr ""
-msgid "ApprovalSettings|Prevent editing approval rules in merge requests"
+msgid "ApprovalSettings|Prevent editing approval rules in projects and merge requests"
msgstr ""
msgid "ApprovalSettings|Prevent editing approval rules in projects and merge requests."
@@ -29533,7 +29530,7 @@ msgstr ""
msgid "Prevent auto-stopping"
msgstr ""
-msgid "Prevent editing approval rules in projects and merge requests."
+msgid "Prevent editing approval rules in projects and merge requests"
msgstr ""
msgid "Prevent environment from auto-stopping"
diff --git a/qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_lint_spec.rb b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_lint_spec.rb
index 04777bd7f01..02ee94381b2 100644
--- a/qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_lint_spec.rb
+++ b/qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_editor_lint_spec.rb
@@ -2,7 +2,12 @@
module QA
RSpec.describe 'Verify' do
- describe 'Pipeline editor', :reliable do
+ # TODO: Remove this test when feature flag is removed
+ # Flag rollout issue https://gitlab.com/gitlab-org/gitlab/-/issues/364257
+ describe 'Pipeline editor', :reliable, feature_flag: {
+ name: :simulate_pipeline,
+ scope: :global
+ } do
let(:project) do
Resource::Project.fabricate_via_api! do |project|
project.name = 'pipeline-editor-project'
@@ -37,7 +42,7 @@ module QA
end
before do
- Runtime::Feature.disable(:simulate_pipeline)
+ Runtime::Feature.disable(:simulate_pipeline) if Runtime::Feature.enabled?(:simulate_pipeline)
Flow::Login.sign_in
project.visit!
diff --git a/spec/frontend/pages/shared/wikis/components/wiki_content_spec.js b/spec/frontend/pages/shared/wikis/components/wiki_content_spec.js
index 365bb878485..108f816fe01 100644
--- a/spec/frontend/pages/shared/wikis/components/wiki_content_spec.js
+++ b/spec/frontend/pages/shared/wikis/components/wiki_content_spec.js
@@ -7,8 +7,10 @@ import { renderGFM } from '~/pages/shared/wikis/render_gfm_facade';
import axios from '~/lib/utils/axios_utils';
import httpStatus from '~/lib/utils/http_status';
import waitForPromises from 'helpers/wait_for_promises';
+import { handleLocationHash } from '~/lib/utils/common_utils';
jest.mock('~/pages/shared/wikis/render_gfm_facade');
+jest.mock('~/lib/utils/common_utils');
describe('pages/shared/wikis/components/wiki_content', () => {
const PATH = '/test';
@@ -76,6 +78,12 @@ describe('pages/shared/wikis/components/wiki_content', () => {
expect(renderGFM).toHaveBeenCalledWith(wrapper.element);
});
+
+ it('handles hash after render', async () => {
+ await nextTick();
+
+ expect(handleLocationHash).toHaveBeenCalled();
+ });
});
describe('when loading content fails', () => {
diff --git a/spec/frontend/vue_mr_widget/extentions/terraform/index_spec.js b/spec/frontend/vue_mr_widget/extentions/terraform/index_spec.js
index 77b3576a3d3..d9faa7b2d25 100644
--- a/spec/frontend/vue_mr_widget/extentions/terraform/index_spec.js
+++ b/spec/frontend/vue_mr_widget/extentions/terraform/index_spec.js
@@ -142,11 +142,11 @@ describe('Terraform extension', () => {
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_terraform_click_full_report',
+ 'i_code_review_merge_request_widget_terraform_click_full_report',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_terraform_count_click_full_report',
+ 'i_code_review_merge_request_widget_terraform_count_click_full_report',
);
});
});
diff --git a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
index 8a3680a5358..b3af5eba364 100644
--- a/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
+++ b/spec/frontend/vue_mr_widget/mr_widget_options_spec.js
@@ -1080,17 +1080,17 @@ describe('MrWidgetOptions', () => {
// The default working extension is a "warning" type, which generates a second - more specific - telemetry event for expansions
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand',
+ 'i_code_review_merge_request_widget_test_extension_expand',
);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_expand_warning',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand',
+ 'i_code_review_merge_request_widget_test_extension_count_expand',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_count_expand_warning',
);
});
});
@@ -1160,11 +1160,11 @@ describe('MrWidgetOptions', () => {
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_view',
+ 'i_code_review_merge_request_widget_test_extension_view',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_view',
+ 'i_code_review_merge_request_widget_test_extension_count_view',
);
});
@@ -1183,17 +1183,17 @@ describe('MrWidgetOptions', () => {
// The default working extension is a "warning" type, which generates a second - more specific - telemetry event for expansions
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand',
+ 'i_code_review_merge_request_widget_test_extension_expand',
);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_expand_warning',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(2);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand',
+ 'i_code_review_merge_request_widget_test_extension_count_expand',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_expand_warning',
+ 'i_code_review_merge_request_widget_test_extension_count_expand_warning',
);
});
@@ -1236,11 +1236,11 @@ describe('MrWidgetOptions', () => {
expect(api.trackRedisHllUserEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisHllUserEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_click_full_report',
+ 'i_code_review_merge_request_widget_test_extension_click_full_report',
);
expect(api.trackRedisCounterEvent).toHaveBeenCalledTimes(1);
expect(api.trackRedisCounterEvent).toHaveBeenCalledWith(
- 'i_merge_request_widget_test_extension_count_click_full_report',
+ 'i_code_review_merge_request_widget_test_extension_count_click_full_report',
);
});