Skip to content

Commit 90d525e

Browse files
author
GitLab Bot
committed
Add latest changes from gitlab-org/gitlab@master
1 parent 1de0121 commit 90d525e

File tree

70 files changed

+1917
-1370
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1917
-1370
lines changed

.rubocop_todo/rspec/example_without_description.yml

-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ RSpec/ExampleWithoutDescription:
169169
- 'ee/spec/serializers/ee/group_child_entity_spec.rb'
170170
- 'ee/spec/services/app_sec/container_scanning/scan_image_service_spec.rb'
171171
- 'ee/spec/services/ci/create_pipeline_service/compliance_spec.rb'
172-
- 'ee/spec/services/ci/pipeline_creation/drop_secrets_provider_not_found_builds_service_spec.rb'
173172
- 'ee/spec/services/ci/register_job_service_spec.rb'
174173
- 'ee/spec/services/compliance_management/standards/soc2/at_least_one_non_author_approval_service_spec.rb'
175174
- 'ee/spec/services/ee/issues/update_service_spec.rb'

app/assets/javascripts/ci/runner/components/runner_delete_button.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export default {
3333
},
3434
icon() {
3535
if (this.compact) {
36-
return 'close';
36+
return 'remove';
3737
}
3838
return '';
3939
},

app/assets/javascripts/ci/runner/components/runner_delete_disclosure_dropdown_item.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script>
22
import { GlDisclosureDropdownItem } from '@gitlab/ui';
3-
import { I18N_DELETE } from '../constants';
3+
import { I18N_DELETE_RUNNER } from '../constants';
44
import RunnerDeleteAction from './runner_delete_action.vue';
55
66
export default {
@@ -21,7 +21,7 @@ export default {
2121
this.$emit('deleted', event);
2222
},
2323
},
24-
I18N_DELETE,
24+
I18N_DELETE_RUNNER,
2525
};
2626
</script>
2727

@@ -30,7 +30,7 @@ export default {
3030
<template #default="{ onClick }">
3131
<gl-disclosure-dropdown-item variant="danger" @action="onClick">
3232
<template #list-item>
33-
{{ $options.I18N_DELETE }}
33+
{{ $options.I18N_DELETE_RUNNER }}
3434
</template>
3535
</gl-disclosure-dropdown-item>
3636
</template>

app/assets/javascripts/ci/runner/components/runner_header_actions.vue

+35-18
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
<script>
2-
import { GlDisclosureDropdown } from '@gitlab/ui';
3-
4-
import RunnerDeleteButton from './runner_delete_button.vue';
2+
import { GlDisclosureDropdown, GlTooltipDirective } from '@gitlab/ui';
3+
import { __ } from '~/locale';
54
import RunnerEditButton from './runner_edit_button.vue';
65
import RunnerPauseButton from './runner_pause_button.vue';
7-
86
import RunnerEditDisclosureDropdownItem from './runner_edit_disclosure_dropdown_item.vue';
97
import RunnerPauseDisclosureDropdownItem from './runner_pause_disclosure_dropdown_item.vue';
108
import RunnerDeleteDisclosureDropdownItem from './runner_delete_disclosure_dropdown_item.vue';
@@ -13,15 +11,15 @@ export default {
1311
name: 'RunnerHeaderActions',
1412
components: {
1513
GlDisclosureDropdown,
16-
17-
RunnerDeleteButton,
1814
RunnerEditButton,
1915
RunnerPauseButton,
20-
2116
RunnerEditDisclosureDropdownItem,
2217
RunnerPauseDisclosureDropdownItem,
2318
RunnerDeleteDisclosureDropdownItem,
2419
},
20+
directives: {
21+
GlTooltip: GlTooltipDirective,
22+
},
2523
props: {
2624
runner: {
2725
type: Object,
@@ -33,42 +31,61 @@ export default {
3331
default: null,
3432
},
3533
},
34+
data() {
35+
return {
36+
isDropdownVisible: false,
37+
};
38+
},
3639
computed: {
3740
canUpdate() {
3841
return this.runner.userPermissions?.updateRunner;
3942
},
4043
canDelete() {
4144
return this.runner.userPermissions?.deleteRunner;
4245
},
46+
moreActionsTooltip() {
47+
return !this.isDropdownVisible ? __('More actions') : '';
48+
},
4349
},
4450
methods: {
4551
onDeleted(event) {
4652
this.$emit('deleted', event);
4753
},
54+
showDropdown() {
55+
this.isDropdownVisible = true;
56+
},
57+
hideDropdown() {
58+
this.isDropdownVisible = false;
59+
},
4860
},
4961
};
5062
</script>
5163
5264
<template>
5365
<div v-if="canUpdate || canDelete">
54-
<!-- sm and up screens -->
55-
<div class="gl-hidden gl-gap-3 sm:gl-flex">
56-
<runner-edit-button v-if="canUpdate" :href="editPath" />
57-
<runner-pause-button v-if="canUpdate" :runner="runner" />
58-
<runner-delete-button v-if="canDelete" :runner="runner" @deleted="onDeleted" />
59-
</div>
60-
61-
<!-- xs screens -->
62-
<div class="sm:gl-hidden">
66+
<div class="gl-flex gl-gap-3">
67+
<runner-edit-button v-if="canUpdate" :href="editPath" class="gl-hidden sm:gl-inline-flex" />
68+
<runner-pause-button v-if="canUpdate" :runner="runner" class="gl-hidden sm:gl-inline-flex" />
6369
<gl-disclosure-dropdown
70+
v-gl-tooltip="moreActionsTooltip"
6471
icon="ellipsis_v"
6572
:toggle-text="s__('Runner|Runner actions')"
6673
text-sr-only
6774
category="tertiary"
6875
no-caret
76+
@shown="showDropdown"
77+
@hidden="hideDropdown"
6978
>
70-
<runner-edit-disclosure-dropdown-item v-if="canUpdate" :href="editPath" />
71-
<runner-pause-disclosure-dropdown-item v-if="canUpdate" :runner="runner" />
79+
<runner-edit-disclosure-dropdown-item
80+
v-if="canUpdate"
81+
:href="editPath"
82+
class="sm:gl-hidden"
83+
/>
84+
<runner-pause-disclosure-dropdown-item
85+
v-if="canUpdate"
86+
:runner="runner"
87+
class="sm:gl-hidden"
88+
/>
7289
<runner-delete-disclosure-dropdown-item
7390
v-if="canDelete"
7491
:runner="runner"

app/assets/javascripts/ci/runner/constants.js

-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ export const I18N_PAUSED_DESCRIPTION = s__('Runners|Not accepting jobs');
7070
export const I18N_RESUME = __('Resume');
7171
export const I18N_RESUME_TOOLTIP = s__('Runners|Resume accepting jobs');
7272

73-
export const I18N_DELETE = s__('Runners|Delete');
7473
export const I18N_DELETE_RUNNER = s__('Runners|Delete runner');
7574
export const I18N_DELETED_TOAST = s__('Runners|Runner %{name} was deleted');
7675

app/assets/javascripts/repository/components/header_area/blob_controls.vue

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import userGitpodInfo from '~/repository/queries/user_gitpod_info.query.graphql'
3636
import applicationInfoQuery from '~/blob/queries/application_info.query.graphql';
3737
import { getRefType } from '~/repository/utils/ref_type';
3838
import OpenMrBadge from '~/repository/components/header_area/open_mr_badge.vue';
39-
import OverflowMenu from 'ee_else_ce/repository/components/header_area/blob_overflow_menu.vue';
39+
import BlobOverflowMenu from 'ee_else_ce/repository/components/header_area/blob_overflow_menu.vue';
4040
import ForkSuggestionModal from '~/repository/components/header_area/fork_suggestion_modal.vue';
4141
import { TEXT_FILE_TYPE, EMPTY_FILE, DEFAULT_BLOB_INFO } from '../../constants';
4242
@@ -52,7 +52,7 @@ export default {
5252
components: {
5353
OpenMrBadge,
5454
GlButton,
55-
OverflowMenu,
55+
BlobOverflowMenu,
5656
ForkSuggestionModal,
5757
WebIdeLink: () => import('ee_else_ce/vue_shared/components/web_ide_link.vue'),
5858
},
@@ -356,7 +356,7 @@ export default {
356356
@hide="isForkSuggestionModalVisible = false"
357357
/>
358358
359-
<overflow-menu
359+
<blob-overflow-menu
360360
v-if="!isLoadingRepositoryBlob && glFeatures.blobOverflowMenu"
361361
:project-path="projectPath"
362362
:is-binary-file-type="isBinaryFileType"

app/assets/javascripts/repository/components/header_area/blob_overflow_menu.vue

+21-9
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,14 @@ export default {
9898
data() {
9999
return {
100100
userPermissions: DEFAULT_BLOB_INFO.userPermissions,
101+
activeViewerType: SIMPLE_BLOB_VIEWER,
101102
isLoggedIn: isLoggedIn(),
102103
};
103104
},
104105
computed: {
105106
isLoading() {
106107
return this.$apollo?.queries.projectInfo.loading;
107108
},
108-
activeViewerType() {
109-
if (this.$route?.query?.plain !== '1') {
110-
const richViewer = document.querySelector('.blob-viewer[data-type="rich"]');
111-
if (richViewer) {
112-
return RICH_BLOB_VIEWER;
113-
}
114-
}
115-
return SIMPLE_BLOB_VIEWER;
116-
},
117109
viewer() {
118110
return this.activeViewerType === RICH_BLOB_VIEWER
119111
? this.blobInfo.richViewer
@@ -132,7 +124,27 @@ export default {
132124
return this.eeIsLocked !== undefined ? this.eeIsLocked : false;
133125
},
134126
},
127+
watch: {
128+
// Watch the URL 'plain' query value to know if the viewer needs changing.
129+
// This is the case when the user switches the viewer and then goes back through the history
130+
'$route.query.plain': {
131+
handler(plainValue) {
132+
this.updateViewerFromQueryParam(plainValue);
133+
},
134+
},
135+
},
136+
mounted() {
137+
this.updateViewerFromQueryParam(this.$route?.query?.plain);
138+
},
135139
methods: {
140+
updateViewerFromQueryParam(plainValue) {
141+
const hasRichViewer = Boolean(this.blobInfo.richViewer);
142+
const useSimpleViewer = plainValue === '1' || !hasRichViewer;
143+
this.switchViewer(useSimpleViewer ? SIMPLE_BLOB_VIEWER : RICH_BLOB_VIEWER);
144+
},
145+
switchViewer(newViewer) {
146+
this.activeViewerType = newViewer || SIMPLE_BLOB_VIEWER;
147+
},
136148
onCopy() {
137149
if (this.overrideCopy) {
138150
this.$emit('copy');

app/graphql/types/group_invitation_type.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class GroupInvitationType < BaseObject
55
graphql_name 'GroupInvitation'
66
description 'Represents a Group Invitation'
77

8-
expose_permissions Types::PermissionTypes::Group
8+
expose_permissions Types::PermissionTypes::Members::GroupMember
99
authorize :admin_group
1010

1111
implements InvitationInterface

app/graphql/types/group_member_type.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class GroupMemberType < BaseObject
55
graphql_name 'GroupMember'
66
description 'Represents a Group Membership'
77

8-
expose_permissions Types::PermissionTypes::Group
8+
expose_permissions Types::PermissionTypes::Members::GroupMember
99
authorize :read_group
1010

1111
implements MemberInterface

app/graphql/types/permission_types/group.rb

+8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ class Group < BasePermissionType
66
graphql_name 'GroupPermissions'
77

88
abilities :read_group, :create_projects, :create_custom_emoji, :remove_group, :view_edit_page
9+
permission_field :can_leave,
10+
description: 'If `true`, the user can leave this group.'
11+
12+
def can_leave
13+
return false unless current_user
14+
15+
current_user.can_leave_group?(object)
16+
end
917
end
1018
end
1119
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
module Types
4+
module PermissionTypes
5+
module Members
6+
class GroupMember < BasePermissionType
7+
graphql_name 'GroupMemberPermissions'
8+
9+
abilities :read_group, :create_projects, :create_custom_emoji, :remove_group, :view_edit_page
10+
end
11+
end
12+
end
13+
end

app/models/user.rb

+4
Original file line numberDiff line numberDiff line change
@@ -1569,6 +1569,10 @@ def can_create_group?
15691569
can?(:create_group)
15701570
end
15711571

1572+
def can_leave_group?(group)
1573+
can?(:destroy_group_member, group.member(self))
1574+
end
1575+
15721576
def can_select_namespace?
15731577
several_namespaces? || admin
15741578
end

app/workers/concerns/application_worker.rb

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module ApplicationWorker
2020
prefer_calling_context_feature_category false
2121
set_queue
2222
after_set_class_attribute { set_queue }
23+
set_default_concurrency_limit
2324

2425
def structured_payload(payload = {})
2526
context = Gitlab::ApplicationContext.current.merge(
@@ -251,5 +252,9 @@ def process_schedule_at_for_batch(schedule_at, index)
251252

252253
schedule_at
253254
end
255+
256+
def set_default_concurrency_limit
257+
concurrency_limit -> { 0 }
258+
end
254259
end
255260
end

config/application_setting_columns/duo_nano_features_enabled.yml

-14
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
name: track_sidekiq_concurrency_limit_execution
3+
feature_issue_url: https://gitlab.com/gitlab-com/gl-infra/data-access/durability/team/-/issues/135
4+
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/188415
5+
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/527022
6+
milestone: '18.0'
7+
group: group::durability
8+
type: gitlab_com_derisk
9+
default_enabled: false

config/initializers/sidekiq.rb

+3-3
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,13 @@ def self.enabled?
6363
# This also increases the internal redis pool from 10 to concurrency+5.
6464
config.redis = queues_config_hash.merge({ size: config.concurrency + 5 })
6565

66-
config.server_middleware(&Gitlab::SidekiqMiddleware.server_configurator(
66+
config.server_middleware(&Gitlab::SidekiqMiddleware::Server.configurator(
6767
metrics: Settings.monitoring.sidekiq_exporter,
6868
arguments_logger: SidekiqLogArguments.enabled? && !enable_json_logs,
6969
skip_jobs: Gitlab::Utils.to_boolean(ENV['SIDEKIQ_SKIP_JOBS'], default: true)
7070
))
7171

72-
config.client_middleware(&Gitlab::SidekiqMiddleware.client_configurator)
72+
config.client_middleware(&Gitlab::SidekiqMiddleware::Client.configurator)
7373

7474
config.death_handlers << Gitlab::SidekiqDeathHandler.method(:handler)
7575

@@ -125,7 +125,7 @@ def self.enabled?
125125
config.logger = Gitlab::SidekiqLogging::ClientLogger.build
126126
config.logger.formatter = Gitlab::SidekiqLogging::JSONFormatter.new if enable_json_logs
127127

128-
config.client_middleware(&Gitlab::SidekiqMiddleware.client_configurator)
128+
config.client_middleware(&Gitlab::SidekiqMiddleware::Client.configurator)
129129
end
130130

131131
Gitlab::Application.configure do |config|

db/docs/batched_background_migrations/backfill_p_ci_pipeline_variables_from_ci_trigger_requests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ feature_category: continuous_integration
55
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/175399
66
milestone: '17.9'
77
queued_migration_version: 20250113064942
8-
finalized_by: # version of the migration that finalized this BBM
8+
finalized_by: '20250416232335'

db/docs/batched_background_migrations/backfill_vs_code_settings_settings_context_hash.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ feature_category: web_ide
55
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/178090
66
milestone: '17.10'
77
queued_migration_version: 20250115162840
8-
finalized_by: # version of the migration that finalized this BBM
8+
finalized_by: 20250403053604

db/docs/p_ci_build_trace_metadata.yml

+1-11
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,5 @@ description: Routing table for ci_build_trace_metadata
88
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/162310
99
milestone: '14.2'
1010
gitlab_schema: gitlab_ci
11-
desired_sharding_key:
12-
project_id:
13-
references: projects
14-
backfill_via:
15-
parent:
16-
foreign_key: build_id
17-
table: p_ci_builds
18-
sharding_key: project_id
19-
belongs_to: build
20-
foreign_key_name: fk_rails_aebc78111f_p
21-
desired_sharding_key_migration_job_name: BackfillCiBuildTraceMetadataProjectId
11+
sharding_key_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/526991
2212
table_size: small

0 commit comments

Comments
 (0)