Add latest changes from gitlab-org/gitlab@master
|
|
@ -1,32 +1,6 @@
|
|||
---
|
||||
Capybara/TestidFinders:
|
||||
Exclude:
|
||||
- 'ee/spec/features/boards/user_adds_lists_to_board_spec.rb'
|
||||
- 'ee/spec/features/ci/ci_catalog_spec.rb'
|
||||
- 'ee/spec/features/ci/ci_minutes_spec.rb'
|
||||
- 'ee/spec/features/epic_boards/epic_boards_sidebar_spec.rb'
|
||||
- 'ee/spec/features/epic_boards/epic_boards_spec.rb'
|
||||
- 'ee/spec/features/epics/epic_labels_spec.rb'
|
||||
- 'ee/spec/features/epics/epic_related_epics_spec.rb'
|
||||
- 'ee/spec/features/epics/epic_show_spec.rb'
|
||||
- 'ee/spec/features/epics/update_epic_spec.rb'
|
||||
- 'ee/spec/features/gitlab_subscriptions/seat_count_alert_spec.rb'
|
||||
- 'ee/spec/features/groups/analytics/ci_cd_analytics_spec.rb'
|
||||
- 'ee/spec/features/groups/analytics/cycle_analytics/charts_spec.rb'
|
||||
- 'ee/spec/features/groups/analytics/cycle_analytics/filters_and_data_spec.rb'
|
||||
- 'ee/spec/features/groups/analytics/cycle_analytics/multiple_value_streams_spec.rb'
|
||||
- 'ee/spec/features/groups/contribution_analytics_spec.rb'
|
||||
- 'ee/spec/features/groups/group_roadmap_spec.rb'
|
||||
- 'ee/spec/features/groups/group_settings_spec.rb'
|
||||
- 'ee/spec/features/groups/iterations/user_edits_iteration_cadence_spec.rb'
|
||||
- 'ee/spec/features/groups/security/compliance_dashboards_spec.rb'
|
||||
- 'ee/spec/features/groups/settings/user_configures_analytics_dashboards_spec.rb'
|
||||
- 'ee/spec/features/groups/settings/user_configures_insights_spec.rb'
|
||||
- 'ee/spec/features/groups/settings/user_configures_vsd_aggregation_spec.rb'
|
||||
- 'ee/spec/features/groups/show_spec.rb'
|
||||
- 'ee/spec/features/groups/usage_quotas/pipelines_tab_spec.rb'
|
||||
- 'ee/spec/features/groups/usage_quotas/seats_tab_spec.rb'
|
||||
- 'ee/spec/features/incidents/incident_details_spec.rb'
|
||||
- 'ee/spec/features/incidents/user_uploads_metric_images_spec.rb'
|
||||
- 'ee/spec/features/issues/blocking_issues_spec.rb'
|
||||
- 'ee/spec/features/issues/epic_in_issue_sidebar_spec.rb'
|
||||
|
|
|
|||
|
|
@ -990,8 +990,6 @@ Layout/ArgumentAlignment:
|
|||
- 'ee/spec/elastic/migrate/20220119120500_populate_commit_permissions_in_main_index_spec.rb'
|
||||
- 'ee/spec/elastic/migrate/20221124090600_add_namespace_ancestry_ids_to_original_index_mapping_spec.rb'
|
||||
- 'ee/spec/elastic/migrate/20221221110300_backfill_traversal_ids_to_blobs_and_wiki_blobs_spec.rb'
|
||||
- 'ee/spec/frontend/fixtures/dora/metrics.rb'
|
||||
- 'ee/spec/frontend/fixtures/oncall_schedule.rb'
|
||||
- 'ee/spec/graphql/ee/mutations/boards/lists/create_spec.rb'
|
||||
- 'ee/spec/graphql/ee/mutations/ci/runner/update_spec.rb'
|
||||
- 'ee/spec/graphql/mutations/dast/profiles/create_spec.rb'
|
||||
|
|
@ -1448,12 +1446,6 @@ Layout/ArgumentAlignment:
|
|||
- 'spec/components/previews/pajamas/alert_component_preview.rb'
|
||||
- 'spec/components/previews/pajamas/banner_component_preview.rb'
|
||||
- 'spec/components/previews/pajamas/button_component_preview.rb'
|
||||
- 'spec/frontend/fixtures/autocomplete.rb'
|
||||
- 'spec/frontend/fixtures/autocomplete_sources.rb'
|
||||
- 'spec/frontend/fixtures/environments.rb'
|
||||
- 'spec/frontend/fixtures/issues.rb'
|
||||
- 'spec/frontend/fixtures/releases.rb'
|
||||
- 'spec/frontend/fixtures/search.rb'
|
||||
- 'spec/graphql/features/authorization_spec.rb'
|
||||
- 'spec/graphql/mutations/issues/set_assignees_spec.rb'
|
||||
- 'spec/graphql/mutations/merge_requests/create_spec.rb'
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ export default {
|
|||
|
||||
<template>
|
||||
<a
|
||||
v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.homepage"
|
||||
v-gl-tooltip:super-sidebar.bottom="$options.i18n.homepage"
|
||||
class="brand-logo"
|
||||
:href="rootPath"
|
||||
data-track-action="click_link"
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export default {
|
|||
|
||||
<template>
|
||||
<gl-disclosure-dropdown
|
||||
v-gl-tooltip:super-sidebar.hover.bottom="dropdownOpen ? '' : $options.i18n.createNew"
|
||||
v-gl-tooltip:super-sidebar.bottom="dropdownOpen ? '' : $options.i18n.createNew"
|
||||
category="tertiary"
|
||||
icon="plus"
|
||||
no-caret
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ export default {
|
|||
|
||||
<template>
|
||||
<gl-button
|
||||
v-gl-tooltip.hover="tooltip"
|
||||
v-gl-tooltip="tooltip"
|
||||
aria-controls="super-sidebar"
|
||||
:aria-expanded="ariaExpanded"
|
||||
:aria-label="$options.i18n.primaryNavigationSidebar"
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ export default {
|
|||
class="gl-display-flex gl-justify-content-space-between gl-gap-2"
|
||||
>
|
||||
<counter
|
||||
v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.issues"
|
||||
v-gl-tooltip:super-sidebar.bottom="$options.i18n.issues"
|
||||
class="gl-flex-basis-third dashboard-shortcuts-issues"
|
||||
icon="issues"
|
||||
:count="userCounts.assigned_issues"
|
||||
|
|
@ -171,7 +171,7 @@ export default {
|
|||
@hidden="mrMenuShown = false"
|
||||
>
|
||||
<counter
|
||||
v-gl-tooltip:super-sidebar.hover.bottom="mrMenuShown ? '' : $options.i18n.mergeRequests"
|
||||
v-gl-tooltip:super-sidebar.bottom="mrMenuShown ? '' : $options.i18n.mergeRequests"
|
||||
class="gl-w-full"
|
||||
icon="merge-request-open"
|
||||
:count="mergeRequestTotalCount"
|
||||
|
|
@ -183,7 +183,7 @@ export default {
|
|||
/>
|
||||
</merge-request-menu>
|
||||
<counter
|
||||
v-gl-tooltip:super-sidebar.hover.bottom="$options.i18n.todoList"
|
||||
v-gl-tooltip:super-sidebar.bottom="$options.i18n.todoList"
|
||||
class="gl-flex-basis-third shortcuts-todos js-todos-count"
|
||||
icon="todo-done"
|
||||
:count="userCounts.todos"
|
||||
|
|
@ -197,7 +197,7 @@ export default {
|
|||
</div>
|
||||
<button
|
||||
id="super-sidebar-search"
|
||||
v-gl-tooltip.bottom.hover.html="searchTooltip"
|
||||
v-gl-tooltip.bottom.html="searchTooltip"
|
||||
v-gl-modal="$options.SEARCH_MODAL_ID"
|
||||
class="counter gl-display-block gl-py-3 gl-bg-gray-10 gl-rounded-base gl-text-gray-900 gl-border-none gl-inset-border-1-gray-a-08 gl-line-height-1 gl-focus--focus gl-w-full"
|
||||
data-testid="super-sidebar-search-button"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<script>
|
||||
import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
|
||||
import { GlCollapsibleListbox } from '@gitlab/ui';
|
||||
import updateAlertStatusMutation from '~/graphql_shared/mutations/alert_status_update.mutation.graphql';
|
||||
import { s__ } from '~/locale';
|
||||
import Tracking from '~/tracking';
|
||||
|
|
@ -11,10 +11,10 @@ export default {
|
|||
'AlertManagement|There was an error while updating the status of the alert.',
|
||||
),
|
||||
UPDATE_ALERT_STATUS_INSTRUCTION: s__('AlertManagement|Please try again.'),
|
||||
ASSIGN_STATUS_HEADER: s__('AlertManagement|Assign status'),
|
||||
},
|
||||
components: {
|
||||
GlDropdown,
|
||||
GlDropdownItem,
|
||||
GlCollapsibleListbox,
|
||||
},
|
||||
inject: {
|
||||
trackAlertStatusUpdateOptions: {
|
||||
|
|
@ -44,10 +44,20 @@ export default {
|
|||
default: () => PAGE_CONFIG.OPERATIONS.STATUSES,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
alertStatus: this.alert.status,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
dropdownClass() {
|
||||
// eslint-disable-next-line no-nested-ternary
|
||||
return this.isSidebar ? (this.isDropdownShowing ? 'show' : 'gl-display-none') : '';
|
||||
return this.isSidebar && !this.isDropdownShowing ? 'gl-display-none' : '';
|
||||
},
|
||||
items() {
|
||||
return Object.entries(this.statuses).map(([value, text]) => ({ value, text }));
|
||||
},
|
||||
headerText() {
|
||||
return this.isSidebar ? this.$options.i18n.ASSIGN_STATUS_HEADER : '';
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
|
|
@ -97,30 +107,15 @@ export default {
|
|||
|
||||
<template>
|
||||
<div class="dropdown dropdown-menu-selectable" :class="dropdownClass">
|
||||
<gl-dropdown
|
||||
<gl-collapsible-listbox
|
||||
ref="dropdown"
|
||||
right
|
||||
:text="statuses[alert.status]"
|
||||
class="w-100"
|
||||
toggle-class="dropdown-menu-toggle"
|
||||
@keydown.esc.native="$emit('hide-dropdown')"
|
||||
@hide="$emit('hide-dropdown')"
|
||||
>
|
||||
<p v-if="isSidebar" class="gl-dropdown-header-top" data-testid="dropdown-header">
|
||||
{{ s__('AlertManagement|Assign status') }}
|
||||
</p>
|
||||
<div class="dropdown-content dropdown-body">
|
||||
<gl-dropdown-item
|
||||
v-for="(label, field) in statuses"
|
||||
:key="field"
|
||||
data-testid="statusDropdownItem"
|
||||
:active="field === alert.status"
|
||||
:active-class="'is-active'"
|
||||
@click="updateAlertStatus(field)"
|
||||
>
|
||||
{{ label }}
|
||||
</gl-dropdown-item>
|
||||
</div>
|
||||
</gl-dropdown>
|
||||
v-model="alertStatus"
|
||||
placement="right"
|
||||
:header-text="headerText"
|
||||
:items="items"
|
||||
block
|
||||
@hidden="$emit('hide-dropdown')"
|
||||
@select="updateAlertStatus"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -58,9 +58,10 @@ export default {
|
|||
},
|
||||
toggleFormDropdown() {
|
||||
this.isDropdownShowing = !this.isDropdownShowing;
|
||||
const { dropdown } = this.$refs.status.$refs.dropdown.$refs;
|
||||
const { dropdown } = this.$refs.status.$refs;
|
||||
|
||||
if (dropdown && this.isDropdownShowing) {
|
||||
dropdown.show();
|
||||
dropdown.open();
|
||||
}
|
||||
},
|
||||
handleUpdating(isMutationInProgress) {
|
||||
|
|
|
|||
|
|
@ -8,6 +8,11 @@ class Groups::AutocompleteSourcesController < Groups::ApplicationController
|
|||
urgency :low, [:issues, :labels, :milestones, :commands, :merge_requests, :members]
|
||||
|
||||
def members
|
||||
if Feature.enabled?(:cache_autocomplete_sources_members, current_user)
|
||||
# Cache the response on the frontend
|
||||
expires_in 3.minutes
|
||||
end
|
||||
|
||||
render json: ::Groups::ParticipantsService.new(@group, current_user).execute(target)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,11 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController
|
|||
urgency :low, [:issues, :labels, :milestones, :commands, :contacts]
|
||||
|
||||
def members
|
||||
if Feature.enabled?(:cache_autocomplete_sources_members, current_user)
|
||||
# Cache the response on the frontend
|
||||
expires_in 3.minutes
|
||||
end
|
||||
|
||||
render json: ::Projects::ParticipantsService.new(@project, current_user).execute(target)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1257,7 +1257,6 @@ class MergeRequest < ApplicationRecord
|
|||
[
|
||||
::MergeRequests::Mergeability::CheckOpenStatusService,
|
||||
::MergeRequests::Mergeability::CheckDraftStatusService,
|
||||
::MergeRequests::Mergeability::CheckNotPreparingService,
|
||||
::MergeRequests::Mergeability::CheckBrokenStatusService,
|
||||
::MergeRequests::Mergeability::CheckDiscussionsStatusService,
|
||||
::MergeRequests::Mergeability::CheckCiStatusService
|
||||
|
|
@ -1559,7 +1558,7 @@ class MergeRequest < ApplicationRecord
|
|||
|
||||
def mergeable_ci_state?
|
||||
return true unless project.only_allow_merge_if_pipeline_succeeds?(inherit_group_setting: true)
|
||||
return true unless actual_head_pipeline
|
||||
return false unless actual_head_pipeline
|
||||
return true if project.allow_merge_on_skipped_pipeline?(inherit_group_setting: true) && actual_head_pipeline.skipped?
|
||||
|
||||
actual_head_pipeline.success?
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MergeRequests
|
||||
module Mergeability
|
||||
class CheckNotPreparingService < CheckBaseService
|
||||
def execute
|
||||
if !merge_request.preparing?
|
||||
success
|
||||
else
|
||||
failure(reason: failure_reason)
|
||||
end
|
||||
end
|
||||
|
||||
def skip?
|
||||
false
|
||||
end
|
||||
|
||||
def cacheable?
|
||||
false
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def failure_reason
|
||||
:preparing
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: cache_autocomplete_sources_members
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/133454
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/427452
|
||||
milestone: '16.5'
|
||||
type: development
|
||||
group: group::global search
|
||||
default_enabled: false
|
||||
|
|
@ -21,6 +21,8 @@ class ExtendPushRulesRegexLimits < Gitlab::Database::Migration[2.1]
|
|||
end
|
||||
|
||||
LONG_REGEX_COLUMNS.each do |column_name|
|
||||
next unless column_exists?(:push_rules, column_name)
|
||||
|
||||
add_check_constraint :push_rules, "char_length(#{column_name}) <= 2047", "#{column_name}_size_constraint",
|
||||
validate: false
|
||||
end
|
||||
|
|
@ -32,6 +34,8 @@ class ExtendPushRulesRegexLimits < Gitlab::Database::Migration[2.1]
|
|||
end
|
||||
|
||||
LONG_REGEX_COLUMNS.each do |column_name|
|
||||
next unless column_exists?(:push_rules, column_name)
|
||||
|
||||
remove_check_constraint :push_rules, "#{column_name}_size_constraint"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ class ValidatePushRulesConstraints < Gitlab::Database::Migration[2.1]
|
|||
|
||||
def up
|
||||
REGEX_COLUMNS.each do |column_name|
|
||||
next unless column_exists?(:push_rules, column_name)
|
||||
|
||||
validate_check_constraint :push_rules, "#{column_name}_size_constraint"
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -5,10 +5,13 @@ class RemovePushRulesRegexLimits < Gitlab::Database::Migration[2.1]
|
|||
change_column :push_rules, :force_push_regex, :string, limit: nil
|
||||
change_column :push_rules, :delete_branch_regex, :string, limit: nil
|
||||
change_column :push_rules, :commit_message_regex, :string, limit: nil
|
||||
change_column :push_rules, :commit_message_negative_regex, :string, limit: nil
|
||||
change_column :push_rules, :author_email_regex, :string, limit: nil
|
||||
change_column :push_rules, :file_name_regex, :string, limit: nil
|
||||
change_column :push_rules, :branch_name_regex, :string, limit: nil
|
||||
|
||||
return unless column_exists?(:push_rules, :commit_message_negative_regex)
|
||||
|
||||
change_column :push_rules, :commit_message_negative_regex, :string, limit: nil
|
||||
end
|
||||
|
||||
def down
|
||||
|
|
|
|||
|
|
@ -0,0 +1,47 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ReplaceValueStreamProjectIdsFilterConstraint < Gitlab::Database::Migration[2.1]
|
||||
enable_lock_retries!
|
||||
|
||||
def up
|
||||
execute <<~SQL
|
||||
ALTER TABLE analytics_cycle_analytics_value_stream_settings
|
||||
DROP CONSTRAINT IF EXISTS chk_rails_a91b547c97;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.constraint_column_usage
|
||||
WHERE table_name = 'analytics_cycle_analytics_value_stream_settings'
|
||||
AND constraint_name = 'project_ids_filter_array_check'
|
||||
) THEN
|
||||
ALTER TABLE analytics_cycle_analytics_value_stream_settings
|
||||
ADD CONSTRAINT project_ids_filter_array_check
|
||||
CHECK ((CARDINALITY(project_ids_filter) <= 100) AND (ARRAY_POSITION(project_ids_filter, null) IS null));
|
||||
END IF;
|
||||
END $$
|
||||
SQL
|
||||
end
|
||||
|
||||
def down
|
||||
execute <<~SQL
|
||||
ALTER TABLE analytics_cycle_analytics_value_stream_settings
|
||||
DROP CONSTRAINT IF EXISTS project_ids_filter_array_check;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.constraint_column_usage
|
||||
WHERE table_name = 'analytics_cycle_analytics_value_stream_settings'
|
||||
AND constraint_name = 'chk_rails_a91b547c97'
|
||||
) THEN
|
||||
ALTER TABLE analytics_cycle_analytics_value_stream_settings
|
||||
ADD CONSTRAINT chk_rails_a91b547c97
|
||||
CHECK (CARDINALITY(project_ids_filter) <= 100);
|
||||
END IF;
|
||||
END $$
|
||||
SQL
|
||||
end
|
||||
end
|
||||
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
class RemoveApplicationSettingsAiAccessTokenColumn < Gitlab::Database::Migration[2.1]
|
||||
def up
|
||||
remove_column :application_settings, :encrypted_ai_access_token
|
||||
remove_column :application_settings, :encrypted_ai_access_token_iv
|
||||
# no-op because the column was not ignored correctly,
|
||||
# see https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/24523
|
||||
end
|
||||
|
||||
def down
|
||||
add_column :application_settings, :encrypted_ai_access_token, :binary
|
||||
add_column :application_settings, :encrypted_ai_access_token_iv, :binary
|
||||
# no-op because the column was not ignored correctly,
|
||||
# see https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues/24523
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
a895a8c09a53cb12d738aec7e35bdd32d7f98fef69c35f9216f8341181ee8e02
|
||||
|
|
@ -11182,7 +11182,7 @@ ALTER SEQUENCE analytics_cycle_analytics_stage_event_hashes_id_seq OWNED BY anal
|
|||
CREATE TABLE analytics_cycle_analytics_value_stream_settings (
|
||||
value_stream_id bigint NOT NULL,
|
||||
project_ids_filter bigint[] DEFAULT '{}'::bigint[],
|
||||
CONSTRAINT chk_rails_a91b547c97 CHECK ((cardinality(project_ids_filter) <= 100))
|
||||
CONSTRAINT project_ids_filter_array_check CHECK (((cardinality(project_ids_filter) <= 100) AND (array_position(project_ids_filter, NULL::bigint) IS NULL)))
|
||||
);
|
||||
|
||||
CREATE TABLE analytics_dashboards_pointers (
|
||||
|
|
@ -11824,6 +11824,8 @@ CREATE TABLE application_settings (
|
|||
wiki_asciidoc_allow_uri_includes boolean DEFAULT false NOT NULL,
|
||||
namespace_aggregation_schedule_lease_duration_in_seconds integer DEFAULT 300 NOT NULL,
|
||||
container_registry_data_repair_detail_worker_max_concurrency integer DEFAULT 2 NOT NULL,
|
||||
encrypted_ai_access_token bytea,
|
||||
encrypted_ai_access_token_iv bytea,
|
||||
vertex_ai_host text,
|
||||
encrypted_vertex_ai_credentials bytea,
|
||||
encrypted_vertex_ai_credentials_iv bytea,
|
||||
|
|
|
|||
|
|
@ -41,6 +41,9 @@ GitLab Enterprise Edition can receive paid features by registering with GitLab a
|
|||
activity data through Service Ping. Features introduced here do not remove the feature from its paid
|
||||
tier. Users can continue to access the features in a paid tier without sharing usage data.
|
||||
|
||||
NOTE:
|
||||
Registration is not yet required for participation, but may be added in a future milestone.
|
||||
|
||||
### Features available in 14.1 and later
|
||||
|
||||
- [Email from GitLab](../email_from_gitlab.md).
|
||||
|
|
@ -62,9 +65,6 @@ tier. Users can continue to access the features in a paid tier without sharing u
|
|||
|
||||
- [Group wikis](../../user/project/wiki/group.md).
|
||||
|
||||
NOTE:
|
||||
Registration is not yet required for participation, but may be added in a future milestone.
|
||||
|
||||
### Enable registration features
|
||||
|
||||
1. Sign in as a user with administrator access.
|
||||
|
|
|
|||
|
|
@ -376,7 +376,8 @@ This resource has been moved permanently to https://gitlab.example.com/api/v4/pr
|
|||
|
||||
GitLab supports the following pagination methods:
|
||||
|
||||
- Offset-based pagination. The default method and available on all endpoints.
|
||||
- Offset-based pagination. The default method and available on all endpoints except,
|
||||
in GitLab 16.5 and later, the `\users` endpoint.
|
||||
- Keyset-based pagination. Added to selected endpoints but being
|
||||
[progressively rolled out](https://gitlab.com/groups/gitlab-org/-/epics/2039).
|
||||
|
||||
|
|
@ -385,6 +386,8 @@ For large collections, you should use keyset pagination
|
|||
|
||||
### Offset-based pagination
|
||||
|
||||
> The `\users` endpoint was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/426547) for offset-based pagination in GitLab 16.5 and is planned for removal in 17.0. This change is a breaking change. Use keyset-based pagination for this endpoint instead.
|
||||
|
||||
Sometimes, the returned result spans many pages. When listing resources, you can
|
||||
pass the following parameters:
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 237 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 130 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 416 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 68 KiB |
|
|
@ -6,7 +6,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
# Merge trains **(PREMIUM ALL)**
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/282442) support for [fast-forward](../../user/project/merge_requests/methods/index.md#fast-forward-merge) and [semi-linear](../../user/project/merge_requests/methods/index.md#merge-commit-with-semi-linear-history) merge methods in GitLab 16.5 [with a flag](../../administration/feature_flags.md) named `fast_forward_merge_trains_support`. The flag is enabled on GitLab.com and enabled by default on self-managed GitLab.
|
||||
> Support for [fast-forward](../../user/project/merge_requests/methods/index.md#fast-forward-merge) and [semi-linear](../../user/project/merge_requests/methods/index.md#merge-commit-with-semi-linear-history) merge methods [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/282442) in GitLab 16.5 [with a flag](../../administration/feature_flags.md) named `fast_forward_merge_trains_support`. Enabled by default.
|
||||
|
||||
NOTE:
|
||||
[In GitLab 16.0 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/359057), the **Start merge train**
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 103 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 19 KiB |
|
|
@ -287,10 +287,13 @@ If this behavior is needed on a larger table, ask for assistance in the `#databa
|
|||
|
||||
## Indexes for partitioned tables
|
||||
|
||||
Indexes [cannot be created](https://www.postgresql.org/docs/15/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE-MAINTENANCE)
|
||||
**concurrently** on a partitioned table. You must use `CONCURRENTLY` to avoid service disruption in a hot system.
|
||||
You [cannot create indexes](https://www.postgresql.org/docs/15/ddl-partitioning.html#DDL-PARTITIONING-DECLARATIVE-MAINTENANCE)
|
||||
concurrently on partitioned tables.
|
||||
However, creating indexes non-concurrently holds a write lock on the table being indexed.
|
||||
Therefore, you must use `CONCURRENTLY` when you create indexes to avoid service disruption in a hot system.
|
||||
|
||||
To create an index on a partitioned table, use `add_concurrent_partitioned_index`, provided by the database team.
|
||||
As a workaround, the Database team has provided `add_concurrent_partitioned_index`.
|
||||
This helper creates indexes on partitioned tables without holding a write lock.
|
||||
|
||||
Under the hood, `add_concurrent_partitioned_index`:
|
||||
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 6.8 MiB After Width: | Height: | Size: 18 KiB |
|
|
@ -101,3 +101,5 @@ module Sidebars
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
Sidebars::Projects::Menus::DeploymentsMenu.prepend_mod
|
||||
|
|
|
|||
|
|
@ -87,6 +87,74 @@ namespace :gitlab do
|
|||
end
|
||||
end
|
||||
|
||||
desc "GitLab | Cleanup | Clean missed source branches to be deleted"
|
||||
task remove_missed_source_branches: :gitlab_environment do
|
||||
warn_user_is_not_gitlab
|
||||
|
||||
logger.info("Gitlab|Cleanup|Clean up missed source branches|Executed by #{gitlab_user}")
|
||||
|
||||
if ENV['LIMIT_TO_DELETE'].present? && !ENV['LIMIT_TO_DELETE'].to_i.between?(1, 10000)
|
||||
logger.info("Please specify a limit between 1 and 10000")
|
||||
next
|
||||
end
|
||||
|
||||
if ENV['BATCH_SIZE'].present? && !ENV['BATCH_SIZE'].to_i.between?(1, 1000)
|
||||
logger.info("Please specify a batch size between 1 and 1000")
|
||||
next
|
||||
end
|
||||
|
||||
batch_size = ENV['BATCH_SIZE'].present? ? ENV['BATCH_SIZE'].to_i : 1000
|
||||
limit = ENV['LIMIT_TO_DELETE'].present? ? ENV['LIMIT_TO_DELETE'].to_i : 10000
|
||||
|
||||
project = find_project
|
||||
user = User.find_by_id(ENV['USER_ID']&.to_i)
|
||||
|
||||
number_deleted = 0
|
||||
|
||||
# rubocop: disable Layout/LineLength
|
||||
MergeRequest
|
||||
.merged
|
||||
.where(project: project)
|
||||
.each_batch(of: batch_size) do |mrs|
|
||||
matching_mrs = mrs.where(
|
||||
"merge_params LIKE '%force_remove_source_branch: ''1''%' OR merge_params LIKE '%should_remove_source_branch: ''1''%'"
|
||||
)
|
||||
|
||||
branches_to_delete = []
|
||||
|
||||
# rubocop: enable Layout/LineLength
|
||||
matching_mrs.each do |mr|
|
||||
next unless mr.source_branch_exists? && mr.can_remove_source_branch?(user)
|
||||
|
||||
# Ensuring that only this MR exists for the source branch
|
||||
if MergeRequest.where(project: project).where.not(id: mr.id).where(source_branch: mr.source_branch).exists?
|
||||
next
|
||||
end
|
||||
|
||||
latest_diff_sha = mr.latest_merge_request_diff.head_commit_sha
|
||||
|
||||
next unless latest_diff_sha
|
||||
|
||||
branches_to_delete << { reference: mr.source_branch_ref, old_sha: latest_diff_sha,
|
||||
new_sha: Gitlab::Git::BLANK_SHA }
|
||||
|
||||
break if number_deleted + branches_to_delete.size >= limit
|
||||
end
|
||||
|
||||
if dry_run?
|
||||
logger.info "DRY RUN: Branches to be deleted in batch #{branches_to_delete.join(',')}"
|
||||
logger.info "DRY RUN: Count: #{branches_to_delete.size}"
|
||||
else
|
||||
project.repository.raw.update_refs(branches_to_delete)
|
||||
logger.info "Branches deleted #{branches_to_delete.join(',')}"
|
||||
end
|
||||
|
||||
number_deleted += branches_to_delete.size
|
||||
|
||||
break if number_deleted >= limit
|
||||
end
|
||||
end
|
||||
|
||||
desc 'GitLab | Cleanup | Clean orphan LFS files'
|
||||
task orphan_lfs_files: :gitlab_environment do
|
||||
warn_user_is_not_gitlab
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ module QA
|
|||
describe 'Project import', product_group: :import_and_integrate do # rubocop:disable RSpec/MultipleMemoizedHelpers
|
||||
let(:github_repo) { ENV['QA_LARGE_IMPORT_REPO'] || 'rspec/rspec-core' }
|
||||
let(:import_max_duration) { ENV['QA_LARGE_IMPORT_DURATION']&.to_i || 7200 }
|
||||
let(:api_parallel_threads) { ENV['QA_LARGE_IMPORT_GH_API_PARALLEL']&.to_i || Etc.nprocessors }
|
||||
let(:api_parallel_threads) { ENV['QA_LARGE_IMPORT_API_PARALLEL']&.to_i || Etc.nprocessors }
|
||||
let(:logger) { Runtime::Logger.logger }
|
||||
let(:differ) { RSpec::Support::Differ.new(color: true) }
|
||||
let(:gitlab_address) { QA::Runtime::Scenario.gitlab_address.chomp("/") }
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ module QA
|
|||
let!(:gitlab_source_group) { ENV["QA_LARGE_IMPORT_GROUP"] || "gitlab-migration-large-import-test" }
|
||||
let!(:gitlab_source_project) { ENV["QA_LARGE_IMPORT_REPO"] || "migration-test-project" }
|
||||
let!(:import_wait_duration) { { max_duration: (ENV["QA_LARGE_IMPORT_DURATION"] || 3600).to_i, sleep_interval: 30 } }
|
||||
let!(:api_parallel_threads) { ENV['QA_LARGE_IMPORT_API_PARALLEL']&.to_i || Etc.nprocessors }
|
||||
|
||||
# test uses production as source which doesn't have actual admin user
|
||||
let!(:source_admin_user) { nil }
|
||||
|
|
@ -327,7 +328,7 @@ module QA
|
|||
def fetch_mrs(project, client, transform_urls: false)
|
||||
imported_mrs = project.merge_requests(auto_paginate: true, attempts: 2)
|
||||
|
||||
Parallel.map(imported_mrs, in_threads: 6) do |mr|
|
||||
Parallel.map(imported_mrs, in_threads: api_parallel_threads) do |mr|
|
||||
resource = Resource::MergeRequest.init do |resource|
|
||||
resource.project = project
|
||||
resource.iid = mr[:iid]
|
||||
|
|
@ -355,7 +356,7 @@ module QA
|
|||
def fetch_issues(project, client, transform_urls: false)
|
||||
imported_issues = project.issues(auto_paginate: true, attempts: 2)
|
||||
|
||||
Parallel.map(imported_issues, in_threads: 6) do |issue|
|
||||
Parallel.map(imported_issues, in_threads: api_parallel_threads) do |issue|
|
||||
resource = build(:issue, project: project, iid: issue[:iid], api_client: client)
|
||||
|
||||
[issue[:iid], {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ RSpec.describe 'Alert details', :js, feature_category: :incident_management do
|
|||
expect(alert_status).to have_content('Triggered')
|
||||
|
||||
find('.gl-button').click
|
||||
find('.gl-dropdown-item', text: 'Acknowledged').click
|
||||
find('.gl-new-dropdown-item', text: 'Acknowledged').click
|
||||
|
||||
wait_for_requests
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ RSpec.describe 'User updates Alert Management status', :js, feature_category: :i
|
|||
|
||||
it 'updates the alert status' do
|
||||
find('.dropdown-menu-selectable').click
|
||||
find('.dropdown-item', text: 'Acknowledged').click
|
||||
find('.gl-new-dropdown-item', text: 'Acknowledged').click
|
||||
wait_for_requests
|
||||
|
||||
expect(find('.dropdown-menu-selectable')).to have_content('Acknowledged')
|
||||
|
|
|
|||
|
|
@ -335,7 +335,7 @@ RSpec.describe 'Merge request > User sees merge widget', :js, feature_category:
|
|||
# Wait for the `ci_status` and `merge_check` requests
|
||||
wait_for_requests
|
||||
|
||||
expect(page).to have_selector('.accept-merge-request')
|
||||
expect(page).not_to have_selector('.accept-merge-request')
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -22,15 +22,17 @@ RSpec.describe ::AutocompleteController, '(JavaScript fixtures)', type: :control
|
|||
project.add_developer(user)
|
||||
end
|
||||
|
||||
get :users,
|
||||
format: :json,
|
||||
params: {
|
||||
project_id: project.id,
|
||||
active: true,
|
||||
current_user: true,
|
||||
author: merge_request.author.id,
|
||||
merge_request_iid: merge_request.iid
|
||||
}
|
||||
get(
|
||||
:users,
|
||||
format: :json,
|
||||
params: {
|
||||
project_id: project.id,
|
||||
active: true,
|
||||
current_user: true,
|
||||
author: merge_request.author.id,
|
||||
merge_request_iid: merge_request.iid
|
||||
}
|
||||
)
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
|
|
|||
|
|
@ -26,14 +26,16 @@ RSpec.describe Projects::AutocompleteSourcesController, '(JavaScript fixtures)',
|
|||
create(:label, project: project, title: 'P3')
|
||||
create(:label, project: project, title: 'P4')
|
||||
|
||||
get :labels,
|
||||
format: :json,
|
||||
params: {
|
||||
namespace_id: group.path,
|
||||
project_id: project.path,
|
||||
type: issue.class.name,
|
||||
type_id: issue.id
|
||||
}
|
||||
get(
|
||||
:labels,
|
||||
format: :json,
|
||||
params: {
|
||||
namespace_id: group.path,
|
||||
project_id: project.path,
|
||||
type: issue.class.name,
|
||||
type_id: issue.id
|
||||
}
|
||||
)
|
||||
|
||||
expect(response).to be_successful
|
||||
end
|
||||
|
|
|
|||
|
|
@ -27,13 +27,16 @@ RSpec.describe 'Environments (JavaScript fixtures)', feature_category: :environm
|
|||
query = get_graphql_query_as_string(environment_details_query_path)
|
||||
puts project.full_path
|
||||
puts environment.name
|
||||
post_graphql(query, current_user: admin,
|
||||
variables:
|
||||
{
|
||||
projectFullPath: project.full_path,
|
||||
environmentName: environment.name,
|
||||
pageSize: 10
|
||||
})
|
||||
post_graphql(
|
||||
query,
|
||||
current_user: admin,
|
||||
variables:
|
||||
{
|
||||
projectFullPath: project.full_path,
|
||||
environmentName: environment.name,
|
||||
pageSize: 10
|
||||
}
|
||||
)
|
||||
expect_graphql_errors_to_be_empty
|
||||
end
|
||||
end
|
||||
|
|
@ -58,13 +61,16 @@ RSpec.describe 'Environments (JavaScript fixtures)', feature_category: :environm
|
|||
it "graphql/#{environment_details_query_path}.json" do
|
||||
query = get_graphql_query_as_string(environment_details_query_path)
|
||||
|
||||
post_graphql(query, current_user: admin,
|
||||
variables:
|
||||
{
|
||||
projectFullPath: project.full_path,
|
||||
environmentName: environment.name,
|
||||
pageSize: 10
|
||||
})
|
||||
post_graphql(
|
||||
query,
|
||||
current_user: admin,
|
||||
variables:
|
||||
{
|
||||
projectFullPath: project.full_path,
|
||||
environmentName: environment.name,
|
||||
pageSize: 10
|
||||
}
|
||||
)
|
||||
expect_graphql_errors_to_be_empty
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -70,25 +70,29 @@ RSpec.describe API::Issues, '(JavaScript fixtures)', type: :request do
|
|||
issue_title = 'foo'
|
||||
issue_description = 'closed'
|
||||
milestone = create(:milestone, title: '1.0.0', project: project)
|
||||
issue = create :issue,
|
||||
author: user,
|
||||
assignees: [user],
|
||||
project: project,
|
||||
milestone: milestone,
|
||||
created_at: generate(:past_time),
|
||||
updated_at: 1.hour.ago,
|
||||
title: issue_title,
|
||||
description: issue_description
|
||||
issue = create(
|
||||
:issue,
|
||||
author: user,
|
||||
assignees: [user],
|
||||
project: project,
|
||||
milestone: milestone,
|
||||
created_at: generate(:past_time),
|
||||
updated_at: 1.hour.ago,
|
||||
title: issue_title,
|
||||
description: issue_description
|
||||
)
|
||||
|
||||
project.add_reporter(user)
|
||||
create_referencing_mr(user, project, issue)
|
||||
|
||||
create(:merge_request,
|
||||
:simple,
|
||||
author: user,
|
||||
source_project: project,
|
||||
target_project: project,
|
||||
description: "Some description")
|
||||
create(
|
||||
:merge_request,
|
||||
:simple,
|
||||
author: user,
|
||||
source_project: project,
|
||||
target_project: project,
|
||||
description: "Some description"
|
||||
)
|
||||
project2 = create(:project, :public, creator_id: user.id, namespace: user.namespace)
|
||||
create_referencing_mr(user, project2, issue).update!(head_pipeline: create(:ci_pipeline))
|
||||
|
||||
|
|
|
|||
|
|
@ -11,23 +11,27 @@ RSpec.describe 'Releases (JavaScript fixtures)' do
|
|||
let_it_be(:user) { create(:user, email: 'user@example.gitlab.com', username: 'user1') }
|
||||
|
||||
let_it_be(:milestone_12_3) do
|
||||
create(:milestone,
|
||||
id: 123,
|
||||
project: project,
|
||||
title: '12.3',
|
||||
description: 'The 12.3 milestone',
|
||||
start_date: Time.zone.parse('2018-12-10'),
|
||||
due_date: Time.zone.parse('2019-01-10'))
|
||||
create(
|
||||
:milestone,
|
||||
id: 123,
|
||||
project: project,
|
||||
title: '12.3',
|
||||
description: 'The 12.3 milestone',
|
||||
start_date: Time.zone.parse('2018-12-10'),
|
||||
due_date: Time.zone.parse('2019-01-10')
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:milestone_12_4) do
|
||||
create(:milestone,
|
||||
id: 124,
|
||||
project: project,
|
||||
title: '12.4',
|
||||
description: 'The 12.4 milestone',
|
||||
start_date: Time.zone.parse('2019-01-10'),
|
||||
due_date: Time.zone.parse('2019-02-10'))
|
||||
create(
|
||||
:milestone,
|
||||
id: 124,
|
||||
project: project,
|
||||
title: '12.4',
|
||||
description: 'The 12.4 milestone',
|
||||
start_date: Time.zone.parse('2019-01-10'),
|
||||
due_date: Time.zone.parse('2019-02-10')
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:open_issues_12_3) do
|
||||
|
|
@ -47,68 +51,78 @@ RSpec.describe 'Releases (JavaScript fixtures)' do
|
|||
end
|
||||
|
||||
let_it_be(:release) do
|
||||
create(:release,
|
||||
milestones: [milestone_12_3, milestone_12_4],
|
||||
project: project,
|
||||
tag: 'v1.1',
|
||||
name: 'The first release',
|
||||
author: user,
|
||||
description: 'Best. Release. **Ever.** :rocket:',
|
||||
created_at: Time.zone.parse('2018-12-3'),
|
||||
released_at: Time.zone.parse('2018-12-10'))
|
||||
create(
|
||||
:release,
|
||||
milestones: [milestone_12_3, milestone_12_4],
|
||||
project: project,
|
||||
tag: 'v1.1',
|
||||
name: 'The first release',
|
||||
author: user,
|
||||
description: 'Best. Release. **Ever.** :rocket:',
|
||||
created_at: Time.zone.parse('2018-12-3'),
|
||||
released_at: Time.zone.parse('2018-12-10')
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:evidence) do
|
||||
create(:evidence,
|
||||
release: release,
|
||||
collected_at: Time.zone.parse('2018-12-03'))
|
||||
create(:evidence, release: release, collected_at: Time.zone.parse('2018-12-03'))
|
||||
end
|
||||
|
||||
let_it_be(:other_link) do
|
||||
create(:release_link,
|
||||
id: 10,
|
||||
release: release,
|
||||
name: 'linux-amd64 binaries',
|
||||
filepath: '/binaries/linux-amd64',
|
||||
url: 'https://downloads.example.com/bin/gitlab-linux-amd64')
|
||||
create(
|
||||
:release_link,
|
||||
id: 10,
|
||||
release: release,
|
||||
name: 'linux-amd64 binaries',
|
||||
filepath: '/binaries/linux-amd64',
|
||||
url: 'https://downloads.example.com/bin/gitlab-linux-amd64'
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:runbook_link) do
|
||||
create(:release_link,
|
||||
id: 11,
|
||||
release: release,
|
||||
name: 'Runbook',
|
||||
url: "#{release.project.web_url}/runbook",
|
||||
link_type: :runbook)
|
||||
create(
|
||||
:release_link,
|
||||
id: 11,
|
||||
release: release,
|
||||
name: 'Runbook',
|
||||
url: "#{release.project.web_url}/runbook",
|
||||
link_type: :runbook
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:package_link) do
|
||||
create(:release_link,
|
||||
id: 12,
|
||||
release: release,
|
||||
name: 'Package',
|
||||
url: 'https://example.com/package',
|
||||
link_type: :package)
|
||||
create(
|
||||
:release_link,
|
||||
id: 12,
|
||||
release: release,
|
||||
name: 'Package',
|
||||
url: 'https://example.com/package',
|
||||
link_type: :package
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:image_link) do
|
||||
create(:release_link,
|
||||
id: 13,
|
||||
release: release,
|
||||
name: 'Image',
|
||||
url: 'https://example.com/image',
|
||||
link_type: :image)
|
||||
create(
|
||||
:release_link,
|
||||
id: 13,
|
||||
release: release,
|
||||
name: 'Image',
|
||||
url: 'https://example.com/image',
|
||||
link_type: :image
|
||||
)
|
||||
end
|
||||
|
||||
let_it_be(:another_release) do
|
||||
create(:release,
|
||||
project: project,
|
||||
tag: 'v1.2',
|
||||
name: 'The second release',
|
||||
author: user,
|
||||
description: 'An okay release :shrug:',
|
||||
created_at: Time.zone.parse('2019-01-03'),
|
||||
released_at: Time.zone.parse('2019-01-10'))
|
||||
create(
|
||||
:release,
|
||||
project: project,
|
||||
tag: 'v1.2',
|
||||
name: 'The second release',
|
||||
author: user,
|
||||
description: 'An okay release :shrug:',
|
||||
created_at: Time.zone.parse('2019-01-03'),
|
||||
released_at: Time.zone.parse('2019-01-10')
|
||||
)
|
||||
end
|
||||
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -58,9 +58,10 @@ RSpec.describe SearchController, '(JavaScript fixtures)', type: :controller do
|
|||
project_id: project.id,
|
||||
startline: 2)
|
||||
],
|
||||
total_count: 4,
|
||||
limit: 4,
|
||||
offset: 0)
|
||||
total_count: 4,
|
||||
limit: 4,
|
||||
offset: 0
|
||||
)
|
||||
end
|
||||
|
||||
before do
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import Vue from 'vue';
|
||||
import VueApollo from 'vue-apollo';
|
||||
import { GlDropdown, GlDropdownItem } from '@gitlab/ui';
|
||||
import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
|
||||
import { GlCollapsibleListbox, GlListboxItem } from '@gitlab/ui';
|
||||
import { mountExtended } from 'helpers/vue_test_utils_helper';
|
||||
import waitForPromises from 'helpers/wait_for_promises';
|
||||
import createMockApollo from 'helpers/mock_apollo_helper';
|
||||
import updateAlertStatusMutation from '~/graphql_shared//mutations/alert_status_update.mutation.graphql';
|
||||
|
|
@ -34,13 +34,13 @@ describe('AlertManagementStatus', () => {
|
|||
},
|
||||
});
|
||||
|
||||
const findStatusDropdown = () => wrapper.findComponent(GlDropdown);
|
||||
const findFirstStatusOption = () => findStatusDropdown().findComponent(GlDropdownItem);
|
||||
const findAllStatusOptions = () => findStatusDropdown().findAllComponents(GlDropdownItem);
|
||||
const findStatusDropdownHeader = () => wrapper.findByTestId('dropdown-header');
|
||||
const findStatusDropdown = () => wrapper.findComponent(GlCollapsibleListbox);
|
||||
const findFirstStatusOption = () => findStatusDropdown().findComponent(GlListboxItem);
|
||||
const findAllStatusOptions = () => findStatusDropdown().findAllComponents(GlListboxItem);
|
||||
const findStatusDropdownHeader = () => wrapper.findByTestId('listbox-header-text');
|
||||
|
||||
const selectFirstStatusOption = () => {
|
||||
findFirstStatusOption().vm.$emit('click');
|
||||
findFirstStatusOption().vm.$emit('select', new Event('click'));
|
||||
|
||||
return waitForPromises();
|
||||
};
|
||||
|
|
@ -57,7 +57,7 @@ describe('AlertManagementStatus', () => {
|
|||
provide = {},
|
||||
handler = mockUpdatedMutationResult(),
|
||||
} = {}) {
|
||||
wrapper = shallowMountExtended(AlertManagementStatus, {
|
||||
wrapper = mountExtended(AlertManagementStatus, {
|
||||
apolloProvider: createMockApolloProvider(handler),
|
||||
propsData: {
|
||||
alert: { ...mockAlert },
|
||||
|
|
@ -82,7 +82,7 @@ describe('AlertManagementStatus', () => {
|
|||
|
||||
it('shows the dropdown', () => {
|
||||
mountComponent({ props: { isSidebar: true, isDropdownShowing: true } });
|
||||
expect(wrapper.classes()).toContain('show');
|
||||
expect(wrapper.classes()).not.toContain('gl-display-none');
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -92,8 +92,7 @@ describe('AlertManagementStatus', () => {
|
|||
});
|
||||
|
||||
it('calls `$apollo.mutate` with `updateAlertStatus` mutation and variables containing `iid`, `status`, & `projectPath`', async () => {
|
||||
findFirstStatusOption().vm.$emit('click');
|
||||
await waitForPromises();
|
||||
await selectFirstStatusOption();
|
||||
|
||||
expect(requestHandler).toHaveBeenCalledWith({
|
||||
iid,
|
||||
|
|
@ -194,9 +193,7 @@ describe('AlertManagementStatus', () => {
|
|||
handler: mockUpdatedMutationResult({ nodes: mockAlerts }),
|
||||
});
|
||||
Tracking.event.mockClear();
|
||||
findFirstStatusOption().vm.$emit('click');
|
||||
|
||||
await waitForPromises();
|
||||
await selectFirstStatusOption();
|
||||
|
||||
const status = findFirstStatusOption().text();
|
||||
const { category, action, label } = trackAlertStatusUpdateOptions;
|
||||
|
|
|
|||
|
|
@ -3694,7 +3694,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev
|
|||
allow(subject).to receive(:head_pipeline).and_return(nil)
|
||||
end
|
||||
|
||||
it { expect(subject.mergeable_ci_state?).to be_truthy }
|
||||
it { expect(subject.mergeable_ci_state?).to be_falsey }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -3735,7 +3735,7 @@ RSpec.describe MergeRequest, factory_default: :keep, feature_category: :code_rev
|
|||
allow(subject).to receive(:head_pipeline).and_return(nil)
|
||||
end
|
||||
|
||||
it { expect(subject.mergeable_ci_state?).to be_truthy }
|
||||
it { expect(subject.mergeable_ci_state?).to be_falsey }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -1,39 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe MergeRequests::Mergeability::CheckNotPreparingService, feature_category: :code_review_workflow do
|
||||
let(:service) { described_class.new(merge_request: merge_request, params: {}) }
|
||||
let(:merge_request) { build(:merge_request, merge_status: merge_status) }
|
||||
let(:merge_status_value) { MergeRequest.state_machines[:merge_status].states[merge_status].value }
|
||||
let(:merge_status) { :unchecked }
|
||||
|
||||
describe '#execute' do
|
||||
subject(:result) { service.execute }
|
||||
|
||||
it 'is success when not preparing' do
|
||||
expect(result.status).to eq Gitlab::MergeRequests::Mergeability::CheckResult::SUCCESS_STATUS
|
||||
end
|
||||
|
||||
context 'when the merge request is preparing' do
|
||||
let(:merge_status) { :preparing }
|
||||
|
||||
specify :aggregate_failures do
|
||||
expect(result.status).to eq Gitlab::MergeRequests::Mergeability::CheckResult::FAILED_STATUS
|
||||
expect(result.payload[:reason]).to eq(:preparing)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#skip?' do
|
||||
subject { service.skip? }
|
||||
|
||||
it { is_expected.to eq false }
|
||||
end
|
||||
|
||||
describe '#cacheable?' do
|
||||
subject { service.cacheable? }
|
||||
|
||||
it { is_expected.to eq false }
|
||||
end
|
||||
end
|
||||
|
|
@ -26,10 +26,10 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur
|
|||
context 'when merge status is preparing and merge request diff is persisted' do
|
||||
let(:merge_request) { create(:merge_request, merge_status: :preparing) }
|
||||
|
||||
it 'returns :preparing' do
|
||||
it 'returns :checking' do
|
||||
allow(merge_request.merge_request_diff).to receive(:persisted?).and_return(true)
|
||||
|
||||
expect(detailed_merge_status).to eq(:preparing)
|
||||
expect(detailed_merge_status).to eq(:mergeable)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur
|
|||
end
|
||||
end
|
||||
|
||||
context 'when ci check is required' do
|
||||
context 'when all but the ci check fails' do
|
||||
let(:merge_request) { create(:merge_request) }
|
||||
|
||||
before do
|
||||
|
|
@ -78,7 +78,7 @@ RSpec.describe ::MergeRequests::Mergeability::DetailedMergeStatusService, featur
|
|||
|
||||
context 'when pipeline does not exist' do
|
||||
it 'returns the failure reason' do
|
||||
expect(detailed_merge_status).to eq(:mergeable)
|
||||
expect(detailed_merge_status).to eq(:ci_must_pass)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -6,8 +6,8 @@ module Features
|
|||
page.find("[data-testid='#{testid}']", **kwargs)
|
||||
end
|
||||
|
||||
def within_testid(testid, &block)
|
||||
page.within("[data-testid='#{testid}']", &block)
|
||||
def within_testid(testid, **kwargs, &block)
|
||||
page.within("[data-testid='#{testid}']", **kwargs, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -165,6 +165,195 @@ RSpec.describe 'gitlab:cleanup rake tasks', :silence_stdout do
|
|||
end
|
||||
end
|
||||
|
||||
shared_examples 'does not remove any branches' do
|
||||
it 'does not delete any branches' do
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
|
||||
rake_task
|
||||
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
describe 'gitlab:cleanup:remove_missed_source_branches' do
|
||||
subject(:rake_task) { run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run) }
|
||||
|
||||
let(:project) { create(:project, :repository) }
|
||||
# Merged merge request with force source branch 1
|
||||
# Merged merge request with force source branch 0
|
||||
# Non merged merge request with force source branch 1
|
||||
# Merged Merge request with delete not in project
|
||||
# When can not delete source branch
|
||||
|
||||
let!(:mr1) do
|
||||
project.repository.raw.create_branch(delete_branch_name, "master")
|
||||
|
||||
create(:merge_request, :merged, :remove_source_branch, source_project: project, target_project: project,
|
||||
source_branch: delete_branch_name, target_branch: 'master')
|
||||
end
|
||||
|
||||
let!(:mr2) do
|
||||
project.repository.raw.create_branch(keep_branch_name, "master")
|
||||
|
||||
create(:merge_request, :merged, source_project: project, target_project: project, source_branch: keep_branch_name,
|
||||
target_branch: 'master')
|
||||
end
|
||||
|
||||
let!(:mr3) do
|
||||
create(:merge_request, :remove_source_branch, source_project: project, target_project: project,
|
||||
source_branch: keep_branch_name, target_branch: 'master')
|
||||
end
|
||||
|
||||
let!(:mr4) do
|
||||
create(:merge_request, :merged, :remove_source_branch, source_branch: keep_branch_name, target_branch: 'master')
|
||||
end
|
||||
|
||||
let!(:mr5) do
|
||||
create(:merge_request, :merged, :remove_source_branch, source_branch: 'test', source_project: project,
|
||||
target_project: project, target_branch: 'master')
|
||||
end
|
||||
|
||||
let!(:protected) do
|
||||
create(:protected_branch, :create_branch_on_repository, project: project, name: mr5.source_branch)
|
||||
end
|
||||
|
||||
let(:user) { create(:user, :admin) }
|
||||
let(:dry_run) { true }
|
||||
let(:delete_branch_name) { "to-be-deleted-soon" }
|
||||
let(:delete_me_not) { "delete_me_not" }
|
||||
let(:keep_branch_name) { "not-to-be-deleted-soon" }
|
||||
|
||||
before do
|
||||
project.add_owner(user)
|
||||
stub_env('USER_ID', user.id)
|
||||
stub_env('PROJECT_ID', project.id)
|
||||
end
|
||||
|
||||
context 'when dry run is true' do
|
||||
it_behaves_like 'does not remove any branches'
|
||||
|
||||
context 'and when a valid batch size is given' do
|
||||
it 'takes into account for the batch size' do
|
||||
run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run)
|
||||
|
||||
stub_env('BATCH_SIZE', '1')
|
||||
count_1 = ActiveRecord::QueryRecorder.new do
|
||||
run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run)
|
||||
end.count
|
||||
|
||||
stub_env('BATCH_SIZE', '2')
|
||||
count_2 = ActiveRecord::QueryRecorder.new do
|
||||
run_rake_task('gitlab:cleanup:remove_missed_source_branches', project.id, user.id, dry_run)
|
||||
end.count
|
||||
|
||||
expect(count_1).to be > count_2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when dry run is false' do
|
||||
let!(:mr6) do
|
||||
project.repository.raw.create_branch(delete_me_not, "master")
|
||||
|
||||
create(:merge_request, :merged, :remove_source_branch, source_project: project, target_project: project,
|
||||
source_branch: delete_me_not, target_branch: 'master')
|
||||
end
|
||||
|
||||
before do
|
||||
stub_env('DRY_RUN', 'false')
|
||||
end
|
||||
|
||||
it 'deletes the branches' do
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
|
||||
rake_task
|
||||
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
end
|
||||
|
||||
context 'when a limit is set' do
|
||||
before do
|
||||
stub_env('LIMIT_TO_DELETE', 1)
|
||||
end
|
||||
|
||||
it 'deletes only one branch' do
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
|
||||
rake_task
|
||||
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the branch has a merged and opened mr' do
|
||||
let!(:mr7) do
|
||||
project.repository.raw.create_branch(delete_me_not, "master")
|
||||
|
||||
create(:merge_request, :opened, :remove_source_branch, source_project: project, target_project: project,
|
||||
source_branch: delete_me_not, target_branch: 'master')
|
||||
end
|
||||
|
||||
it 'does not delete the branch of the merged/open mr' do
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil
|
||||
|
||||
rake_task
|
||||
|
||||
expect(project.repository.raw.find_branch(delete_me_not)).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when an valid batch size is given' do
|
||||
before do
|
||||
stub_env('BATCH_SIZE', '1')
|
||||
end
|
||||
|
||||
it 'deletes the branches' do
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
|
||||
rake_task
|
||||
|
||||
expect(project.repository.raw.find_branch(delete_branch_name)).to be_nil
|
||||
expect(project.repository.raw.find_branch(keep_branch_name)).not_to be_nil
|
||||
expect(project.repository.raw.find_branch('test')).not_to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when an invalid batch size is given' do
|
||||
before do
|
||||
stub_env('BATCH_SIZE', '-1')
|
||||
end
|
||||
|
||||
it_behaves_like 'does not remove any branches'
|
||||
end
|
||||
|
||||
context 'when an invalid limit to delete is given' do
|
||||
before do
|
||||
stub_env('LIMIT_TO_DELETE', '-1')
|
||||
end
|
||||
|
||||
it_behaves_like 'does not remove any branches'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'sessions' do
|
||||
describe 'gitlab:cleanup:sessions:active_sessions_lookup_keys', :clean_gitlab_redis_sessions do
|
||||
subject(:rake_task) { run_rake_task('gitlab:cleanup:sessions:active_sessions_lookup_keys') }
|
||||
|
|
|
|||
|
|
@ -26,25 +26,25 @@ require (
|
|||
github.com/sirupsen/logrus v1.9.3
|
||||
github.com/smartystreets/goconvey v1.8.1
|
||||
github.com/stretchr/testify v1.8.4
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.1.2
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.4.1
|
||||
gitlab.com/gitlab-org/labkit v1.20.0
|
||||
gocloud.dev v0.34.0
|
||||
golang.org/x/image v0.7.0
|
||||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616
|
||||
golang.org/x/net v0.14.0
|
||||
golang.org/x/net v0.16.0
|
||||
golang.org/x/oauth2 v0.10.0
|
||||
golang.org/x/tools v0.12.1-0.20230825192346-2191a27a6dc5
|
||||
golang.org/x/tools v0.13.0
|
||||
google.golang.org/grpc v1.58.2
|
||||
google.golang.org/protobuf v1.31.0
|
||||
honnef.co/go/tools v0.4.6
|
||||
)
|
||||
|
||||
require (
|
||||
cloud.google.com/go v0.110.7 // indirect
|
||||
cloud.google.com/go v0.110.8 // indirect
|
||||
cloud.google.com/go/compute v1.23.0 // indirect
|
||||
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||
cloud.google.com/go/iam v1.1.1 // indirect
|
||||
cloud.google.com/go/monitoring v1.15.1 // indirect
|
||||
cloud.google.com/go/iam v1.1.2 // indirect
|
||||
cloud.google.com/go/monitoring v1.16.0 // indirect
|
||||
cloud.google.com/go/profiler v0.1.0 // indirect
|
||||
cloud.google.com/go/storage v1.31.0 // indirect
|
||||
cloud.google.com/go/trace v1.10.1 // indirect
|
||||
|
|
@ -58,7 +58,7 @@ require (
|
|||
github.com/DataDog/datadog-go v4.4.0+incompatible // indirect
|
||||
github.com/DataDog/sketches-go v1.0.0 // indirect
|
||||
github.com/Microsoft/go-winio v0.6.1 // indirect
|
||||
github.com/beevik/ntp v1.0.0 // indirect
|
||||
github.com/beevik/ntp v1.3.0 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
||||
github.com/certifi/gocertifi v0.0.0-20210507211836-431795d63e8d // indirect
|
||||
|
|
@ -74,13 +74,13 @@ require (
|
|||
github.com/google/go-cmp v0.5.9 // indirect
|
||||
github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 // indirect
|
||||
github.com/google/s2a-go v0.1.4 // indirect
|
||||
github.com/google/uuid v1.3.0 // indirect
|
||||
github.com/google/uuid v1.3.1 // indirect
|
||||
github.com/google/wire v0.5.0 // indirect
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect
|
||||
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
|
||||
github.com/gopherjs/gopherjs v1.17.2 // indirect
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
|
||||
github.com/hashicorp/yamux v0.1.1 // indirect
|
||||
github.com/hashicorp/yamux v0.1.2-0.20220728231024-8f49b6f63f18 // indirect
|
||||
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||
github.com/jtolds/gls v4.20.0+incompatible // indirect
|
||||
github.com/kylelemons/godebug v1.1.0 // indirect
|
||||
|
|
@ -112,19 +112,19 @@ require (
|
|||
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||
go.opencensus.io v0.24.0 // indirect
|
||||
go.uber.org/atomic v1.11.0 // indirect
|
||||
golang.org/x/crypto v0.12.0 // indirect
|
||||
golang.org/x/crypto v0.14.0 // indirect
|
||||
golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a // indirect
|
||||
golang.org/x/mod v0.12.0 // indirect
|
||||
golang.org/x/sync v0.3.0 // indirect
|
||||
golang.org/x/sys v0.11.0 // indirect
|
||||
golang.org/x/text v0.12.0 // indirect
|
||||
golang.org/x/sys v0.13.0 // indirect
|
||||
golang.org/x/text v0.13.0 // indirect
|
||||
golang.org/x/time v0.3.0 // indirect
|
||||
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||
google.golang.org/api v0.134.0 // indirect
|
||||
google.golang.org/appengine v1.6.7 // indirect
|
||||
google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf // indirect
|
||||
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 // indirect
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c // indirect
|
||||
gopkg.in/DataDog/dd-trace-go.v1 v1.32.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@ cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSU
|
|||
cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
|
||||
cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
|
||||
cloud.google.com/go v0.92.2/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
|
||||
cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o=
|
||||
cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
|
||||
cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME=
|
||||
cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||
|
|
@ -38,10 +38,10 @@ cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGB
|
|||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||
cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y=
|
||||
cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
|
||||
cloud.google.com/go/monitoring v1.15.1 h1:65JhLMd+JiYnXr6j5Z63dUYCuOg770p8a/VC+gil/58=
|
||||
cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM=
|
||||
cloud.google.com/go/iam v1.1.2 h1:gacbrBdWcoVmGLozRuStX45YKvJtzIjJdAolzUs1sm4=
|
||||
cloud.google.com/go/iam v1.1.2/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
|
||||
cloud.google.com/go/monitoring v1.16.0 h1:rlndy4K8yknMY9JuGe2aK4SbCh21FXoCdX7SAGHmRgI=
|
||||
cloud.google.com/go/monitoring v1.16.0/go.mod h1:Ptp15HgAyM1fNICAojDMoNc/wUmn67mLHQfyqbw+poY=
|
||||
cloud.google.com/go/profiler v0.1.0 h1:MG/rxKC1MztRfEWMGYKFISxyZak5hNh29f0A/z2tvWk=
|
||||
cloud.google.com/go/profiler v0.1.0/go.mod h1:D7S7LV/zKbRWkOzYL1b5xytpqt8Ikd/v/yvf1/Tx2pQ=
|
||||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||
|
|
@ -118,8 +118,8 @@ github.com/aws/aws-sdk-go-v2/service/sso v1.13.1 h1:DSNpSbfEgFXRV+IfEcKE5kTbqxm+
|
|||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.15.1 h1:hd0SKLMdOL/Sl6Z0np1PX9LeH2gqNtBe0MhTedA8MGI=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.21.1 h1:pAOJj+80tC8sPVgSDHzMYD6KLWsaLQ1kZw31PTeORbs=
|
||||
github.com/aws/smithy-go v1.14.0 h1:+X90sB94fizKjDmwb4vyl2cTTPXTE5E2G/1mjByb0io=
|
||||
github.com/beevik/ntp v1.0.0 h1:d0Lgy1xbNNqVyGfvg2Z96ItKcfyn3lzgus/oRoj9vnk=
|
||||
github.com/beevik/ntp v1.0.0/go.mod h1:JN7/74B0Z4GUGO/1aUeRI2adARlfJGUeaJb0y0Wvnf4=
|
||||
github.com/beevik/ntp v1.3.0 h1:/w5VhpW5BGKS37vFm1p9oVk/t4HnnkKZAZIubHM6F7Q=
|
||||
github.com/beevik/ntp v1.3.0/go.mod h1:vD6h1um4kzXpqmLTuu0cCLcC+NfvC0IC+ltmEDA8E78=
|
||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
|
||||
|
|
@ -284,8 +284,8 @@ github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc=
|
|||
github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
|
||||
github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk=
|
||||
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
|
||||
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8=
|
||||
github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU=
|
||||
github.com/googleapis/enterprise-certificate-proxy v0.2.5 h1:UR4rDjcgpgEnqpIEvkiqTYKBCKLNmlge2eVjoZfySzM=
|
||||
|
|
@ -308,8 +308,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb
|
|||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hashicorp/hcl v0.0.0-20170914154624-68e816d1c783/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w=
|
||||
github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE=
|
||||
github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
|
||||
github.com/hashicorp/yamux v0.1.2-0.20220728231024-8f49b6f63f18 h1:IVujPV6DRIu1fYF4zUHrfhkngJzmYjelXa+iSUiFZSI=
|
||||
github.com/hashicorp/yamux v0.1.2-0.20220728231024-8f49b6f63f18/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ=
|
||||
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
|
|
@ -435,7 +435,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
||||
github.com/tinylib/msgp v1.1.2 h1:gWmO7n0Ys2RBEb7GPYB9Ujq8Mk5p2U08lRnmMcGy6BQ=
|
||||
|
|
@ -458,8 +457,8 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1
|
|||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||
github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
|
||||
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.1.2 h1:l7sltwjB/shkqlbuQzfeS3PonrQljCBKOZ2Uozk8ewA=
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.1.2/go.mod h1:gfmwpE66X4lwAO/RdchFhNINSwteGFer4loUOa94nQE=
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.4.1 h1:Qh5TFK+Jy/mBV8hCfNro2VCqRrhgt3M2iTrdYVF5N6o=
|
||||
gitlab.com/gitlab-org/gitaly/v16 v16.4.1/go.mod h1:TdN/Q3OqxU75pcp8V5YWpnE8Gk6dagwlC/HefNnW1IE=
|
||||
gitlab.com/gitlab-org/labkit v1.20.0 h1:DGIVAdzbCR8sq2TppBvAh35wWBYIOy5dBL5wqFK3Wa8=
|
||||
gitlab.com/gitlab-org/labkit v1.20.0/go.mod h1:zeATDAaSBelPcPLbTTq8J3ZJEHyPTLVBM1q3nva+/W4=
|
||||
go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
|
||||
|
|
@ -489,8 +488,9 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
|
||||
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
|
||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
||||
golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc=
|
||||
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
|
|
@ -501,7 +501,7 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
|||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
|
||||
golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE=
|
||||
golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
|
|
@ -579,8 +579,10 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug
|
|||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
|
||||
golang.org/x/net v0.14.0 h1:BONx9s002vGdD9umnlX1Po8vOZmrgH34qlHcD1MfK14=
|
||||
golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
|
||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
||||
golang.org/x/net v0.16.0 h1:7eBu7KsSvFDtSXUIDbh3aqlK4DPsZ1rByC8PFfBThos=
|
||||
golang.org/x/net v0.16.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
|
||||
golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||
|
|
@ -673,13 +675,18 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
|
||||
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
|
||||
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
|
||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
|
|
@ -693,8 +700,9 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
|||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||
golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc=
|
||||
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
|
||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||
golang.org/x/time v0.0.0-20170424234030-8be79e1e0910/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
|
|
@ -760,8 +768,8 @@ golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||
golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
|
||||
golang.org/x/tools v0.12.1-0.20230825192346-2191a27a6dc5 h1:Vk4mysSz+GqQK2eqgWbo4zEO89wkeAjJiFIr9bpqa8k=
|
||||
golang.org/x/tools v0.12.1-0.20230825192346-2191a27a6dc5/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM=
|
||||
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
|
||||
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
|
|
@ -858,12 +866,12 @@ google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm
|
|||
google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
|
||||
google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
|
||||
google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
|
||||
google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf h1:v5Cf4E9+6tawYrs/grq1q1hFpGtzlGFzgWHqwt6NFiU=
|
||||
google.golang.org/genproto v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf h1:xkVZ5FdZJF4U82Q/JS+DcZA83s/GRVL+QrFMlexk9Yo=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf h1:guOdSPaeFgN+jEJwTo1dQ71hdBm+yKSCCKuTRkJzcVo=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20230731193218-e0aa005b6bdf/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I=
|
||||
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97 h1:SeZZZx0cP0fqUyA+oRzP9k7cSwJlvDFiROO72uwD6i0=
|
||||
google.golang.org/genproto v0.0.0-20231002182017-d307bd883b97/go.mod h1:t1VqOqqvce95G3hIDCT5FeO3YUc6Q4Oe24L/+rNMxRk=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13 h1:U7+wNaVuSTaUqNvK2+osJ9ejEZxbjHHk8F2b6Hpx0AE=
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20230920204549-e6e6cdab5c13/go.mod h1:RdyHbowztCGQySiCvQPgWQWgWhGnouTdCflKoDBt32U=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c h1:jHkCUWkseRf+W+edG5hMzr/Uh1xkDREY4caybAq4dpY=
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20231009173412-8bfb1ae86b6c/go.mod h1:4cYg8o5yUbm77w8ZX00LhMVNl/YVBFJRYWDc0uYWMs0=
|
||||
google.golang.org/grpc v1.2.1-0.20170921194603-d4b75ebd4f9f/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
|
|
|
|||