diff options
59 files changed, 608 insertions, 338 deletions
diff --git a/.rubocop_todo/capybara/testid_finders.yml b/.rubocop_todo/capybara/testid_finders.yml index 5b22bdb75b7..0835a10da52 100644 --- a/.rubocop_todo/capybara/testid_finders.yml +++ b/.rubocop_todo/capybara/testid_finders.yml @@ -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' diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index 5500dfb1714..c0025e1b8b0 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -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' diff --git a/app/assets/javascripts/super_sidebar/components/brand_logo.vue b/app/assets/javascripts/super_sidebar/components/brand_logo.vue index 2e6c597ea96..c280c03591b 100644 --- a/app/assets/javascripts/super_sidebar/components/brand_logo.vue +++ b/app/assets/javascripts/super_sidebar/components/brand_logo.vue @@ -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" diff --git a/app/assets/javascripts/super_sidebar/components/create_menu.vue b/app/assets/javascripts/super_sidebar/components/create_menu.vue index c526afa2371..279e689bd8d 100644 --- a/app/assets/javascripts/super_sidebar/components/create_menu.vue +++ b/app/assets/javascripts/super_sidebar/components/create_menu.vue @@ -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 diff --git a/app/assets/javascripts/super_sidebar/components/super_sidebar_toggle.vue b/app/assets/javascripts/super_sidebar/components/super_sidebar_toggle.vue index 049a61e17c7..71c1460423e 100644 --- a/app/assets/javascripts/super_sidebar/components/super_sidebar_toggle.vue +++ b/app/assets/javascripts/super_sidebar/components/super_sidebar_toggle.vue @@ -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" diff --git a/app/assets/javascripts/super_sidebar/components/user_bar.vue b/app/assets/javascripts/super_sidebar/components/user_bar.vue index ea634d43a96..88ea4d828b7 100644 --- a/app/assets/javascripts/super_sidebar/components/user_bar.vue +++ b/app/assets/javascripts/super_sidebar/components/user_bar.vue @@ -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" diff --git a/app/assets/javascripts/vue_shared/alert_details/components/alert_status.vue b/app/assets/javascripts/vue_shared/alert_details/components/alert_status.vue index 8d2ef20b381..3855e4fc078 100644 --- a/app/assets/javascripts/vue_shared/alert_details/components/alert_status.vue +++ b/app/assets/javascripts/vue_shared/alert_details/components/alert_status.vue @@ -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> diff --git a/app/assets/javascripts/vue_shared/alert_details/components/sidebar/sidebar_status.vue b/app/assets/javascripts/vue_shared/alert_details/components/sidebar/sidebar_status.vue index c512585b980..7b099516c5b 100644 --- a/app/assets/javascripts/vue_shared/alert_details/components/sidebar/sidebar_status.vue +++ b/app/assets/javascripts/vue_shared/alert_details/components/sidebar/sidebar_status.vue @@ -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) { diff --git a/app/controllers/groups/autocomplete_sources_controller.rb b/app/controllers/groups/autocomplete_sources_controller.rb index 414461d9e93..86bf65f4723 100644 --- a/app/controllers/groups/autocomplete_sources_controller.rb +++ b/app/controllers/groups/autocomplete_sources_controller.rb @@ -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 diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb index 480e3408023..60c8fe97e81 100644 --- a/app/controllers/projects/autocomplete_sources_controller.rb +++ b/app/controllers/projects/autocomplete_sources_controller.rb @@ -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 diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb index 5629baa4f88..72b0632f9fd 100644 --- a/app/models/merge_request.rb +++ b/app/models/merge_request.rb @@ -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? diff --git a/app/services/merge_requests/mergeability/check_not_preparing_service.rb b/app/services/merge_requests/mergeability/check_not_preparing_service.rb deleted file mode 100644 index 1ffa8117f97..00000000000 --- a/app/services/merge_requests/mergeability/check_not_preparing_service.rb +++ /dev/null @@ -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 diff --git a/config/feature_flags/development/cache_autocomplete_sources_members.yml b/config/feature_flags/development/cache_autocomplete_sources_members.yml new file mode 100644 index 00000000000..c80a7490031 --- /dev/null +++ b/config/feature_flags/development/cache_autocomplete_sources_members.yml @@ -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 diff --git a/db/migrate/20230828153646_extend_push_rules_regex_limits.rb b/db/migrate/20230828153646_extend_push_rules_regex_limits.rb index ba5e8e54f9f..27b28adf08e 100644 --- a/db/migrate/20230828153646_extend_push_rules_regex_limits.rb +++ b/db/migrate/20230828153646_extend_push_rules_regex_limits.rb @@ -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 diff --git a/db/migrate/20230830084959_validate_push_rules_constraints.rb b/db/migrate/20230830084959_validate_push_rules_constraints.rb index 99b5d680642..ffd0d2605da 100644 --- a/db/migrate/20230830084959_validate_push_rules_constraints.rb +++ b/db/migrate/20230830084959_validate_push_rules_constraints.rb @@ -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 diff --git a/db/migrate/20230830085501_remove_push_rules_regex_limits.rb b/db/migrate/20230830085501_remove_push_rules_regex_limits.rb index 31d85e3ec11..c5bfb1ee080 100644 --- a/db/migrate/20230830085501_remove_push_rules_regex_limits.rb +++ b/db/migrate/20230830085501_remove_push_rules_regex_limits.rb @@ -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 diff --git a/db/migrate/20231006154748_replace_value_stream_project_ids_filter_constraint.rb b/db/migrate/20231006154748_replace_value_stream_project_ids_filter_constraint.rb new file mode 100644 index 00000000000..04b8a6fa5de --- /dev/null +++ b/db/migrate/20231006154748_replace_value_stream_project_ids_filter_constraint.rb @@ -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 diff --git a/db/post_migrate/20230926113518_remove_application_settings_ai_access_token_column.rb b/db/post_migrate/20230926113518_remove_application_settings_ai_access_token_column.rb index 1b3512fc5a5..6a17cd1427e 100644 --- a/db/post_migrate/20230926113518_remove_application_settings_ai_access_token_column.rb +++ b/db/post_migrate/20230926113518_remove_application_settings_ai_access_token_column.rb @@ -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 diff --git a/db/schema_migrations/20231006154748 b/db/schema_migrations/20231006154748 new file mode 100644 index 00000000000..9290317c02e --- /dev/null +++ b/db/schema_migrations/20231006154748 @@ -0,0 +1 @@ +a895a8c09a53cb12d738aec7e35bdd32d7f98fef69c35f9216f8341181ee8e02
\ No newline at end of file diff --git a/db/structure.sql b/db/structure.sql index 342e19a7845..4d798248b4c 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -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, diff --git a/doc/administration/settings/usage_statistics.md b/doc/administration/settings/usage_statistics.md index 07bc1064c1e..a76dc983887 100644 --- a/doc/administration/settings/usage_statistics.md +++ b/doc/administration/settings/usage_statistics.md @@ -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. diff --git a/doc/api/rest/index.md b/doc/api/rest/index.md index 059efa15602..14f128bd0e4 100644 --- a/doc/api/rest/index.md +++ b/doc/api/rest/index.md @@ -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: diff --git a/doc/architecture/blueprints/ai_gateway/img/architecture.png b/doc/architecture/blueprints/ai_gateway/img/architecture.png Binary files differindex 89e7263c30d..60b298376ac 100644 --- a/doc/architecture/blueprints/ai_gateway/img/architecture.png +++ b/doc/architecture/blueprints/ai_gateway/img/architecture.png diff --git a/doc/architecture/blueprints/capacity_planning/images/image-20230911144743188.png b/doc/architecture/blueprints/capacity_planning/images/image-20230911144743188.png Binary files differindex 9a1a67b4b76..f56f5b391fc 100644 --- a/doc/architecture/blueprints/capacity_planning/images/image-20230911144743188.png +++ b/doc/architecture/blueprints/capacity_planning/images/image-20230911144743188.png diff --git a/doc/architecture/blueprints/capacity_planning/images/tamland-as-a-service.png b/doc/architecture/blueprints/capacity_planning/images/tamland-as-a-service.png Binary files differindex 450df724c98..fa8f1223917 100644 --- a/doc/architecture/blueprints/capacity_planning/images/tamland-as-a-service.png +++ b/doc/architecture/blueprints/capacity_planning/images/tamland-as-a-service.png diff --git a/doc/architecture/blueprints/capacity_planning/images/tamland-as-part-of-stack.png b/doc/architecture/blueprints/capacity_planning/images/tamland-as-part-of-stack.png Binary files differindex 54ca572e344..0b47d91e133 100644 --- a/doc/architecture/blueprints/capacity_planning/images/tamland-as-part-of-stack.png +++ b/doc/architecture/blueprints/capacity_planning/images/tamland-as-part-of-stack.png diff --git a/doc/architecture/blueprints/observability_metrics/metrics-read-path.png b/doc/architecture/blueprints/observability_metrics/metrics-read-path.png Binary files differindex f92d601a708..c94e947079b 100644 --- a/doc/architecture/blueprints/observability_metrics/metrics-read-path.png +++ b/doc/architecture/blueprints/observability_metrics/metrics-read-path.png diff --git a/doc/architecture/blueprints/observability_metrics/metrics_indexing_at_ingestion.png b/doc/architecture/blueprints/observability_metrics/metrics_indexing_at_ingestion.png Binary files differindex 6ce37588cff..cafabac25c0 100644 --- a/doc/architecture/blueprints/observability_metrics/metrics_indexing_at_ingestion.png +++ b/doc/architecture/blueprints/observability_metrics/metrics_indexing_at_ingestion.png diff --git a/doc/architecture/blueprints/observability_metrics/query-service-internals.png b/doc/architecture/blueprints/observability_metrics/query-service-internals.png Binary files differindex f59d7096194..de43f812fa8 100644 --- a/doc/architecture/blueprints/observability_metrics/query-service-internals.png +++ b/doc/architecture/blueprints/observability_metrics/query-service-internals.png diff --git a/doc/architecture/blueprints/runway/img/runway-architecture.png b/doc/architecture/blueprints/runway/img/runway-architecture.png Binary files differindex e577eb7fd15..4ab4cf882c2 100644 --- a/doc/architecture/blueprints/runway/img/runway-architecture.png +++ b/doc/architecture/blueprints/runway/img/runway-architecture.png diff --git a/doc/architecture/blueprints/runway/img/runway_vault_4_.drawio.png b/doc/architecture/blueprints/runway/img/runway_vault_4_.drawio.png Binary files differindex b56e326c8c4..2a35df44aa8 100644 --- a/doc/architecture/blueprints/runway/img/runway_vault_4_.drawio.png +++ b/doc/architecture/blueprints/runway/img/runway_vault_4_.drawio.png diff --git a/doc/ci/pipelines/merge_trains.md b/doc/ci/pipelines/merge_trains.md index 80069fe37f6..b7f081886a6 100644 --- a/doc/ci/pipelines/merge_trains.md +++ b/doc/ci/pipelines/merge_trains.md @@ -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** diff --git a/doc/ci/review_apps/img/enable_review_app_v16.png b/doc/ci/review_apps/img/enable_review_app_v16.png Binary files differindex 00e305d6a6b..f783632059a 100644 --- a/doc/ci/review_apps/img/enable_review_app_v16.png +++ b/doc/ci/review_apps/img/enable_review_app_v16.png diff --git a/doc/development/cloud_connector/img/code_suggestions_components.png b/doc/development/cloud_connector/img/code_suggestions_components.png Binary files differindex 3f41d1d1a6b..40fe1dd3ed3 100644 --- a/doc/development/cloud_connector/img/code_suggestions_components.png +++ b/doc/development/cloud_connector/img/code_suggestions_components.png diff --git a/doc/development/database/adding_database_indexes.md b/doc/development/database/adding_database_indexes.md index 4c2dacd29ff..d41800d2df7 100644 --- a/doc/development/database/adding_database_indexes.md +++ b/doc/development/database/adding_database_indexes.md @@ -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`: diff --git a/doc/tutorials/left_sidebar/img/admin_area_v16_4.png b/doc/tutorials/left_sidebar/img/admin_area_v16_4.png Binary files differindex ca6a229f69c..d7757319506 100644 --- a/doc/tutorials/left_sidebar/img/admin_area_v16_4.png +++ b/doc/tutorials/left_sidebar/img/admin_area_v16_4.png diff --git a/doc/user/img/enable_AI_ML_features.png b/doc/user/img/enable_AI_ML_features.png Binary files differnew file mode 100644 index 00000000000..97d06c877e4 --- /dev/null +++ b/doc/user/img/enable_AI_ML_features.png diff --git a/doc/user/img/forecast_deployment_frequency.png b/doc/user/img/forecast_deployment_frequency.png Binary files differindex 4c8c6f47a08..7df7f46db3b 100644 --- a/doc/user/img/forecast_deployment_frequency.png +++ b/doc/user/img/forecast_deployment_frequency.png diff --git a/lib/sidebars/projects/menus/deployments_menu.rb b/lib/sidebars/projects/menus/deployments_menu.rb index e2ebb347077..e4e2e55333e 100644 --- a/lib/sidebars/projects/menus/deployments_menu.rb +++ b/lib/sidebars/projects/menus/deployments_menu.rb @@ -101,3 +101,5 @@ module Sidebars end end end + +Sidebars::Projects::Menus::DeploymentsMenu.prepend_mod diff --git a/lib/tasks/gitlab/cleanup.rake b/lib/tasks/gitlab/cleanup.rake index 1753483b091..ef9d2b5e13a 100644 --- a/lib/tasks/gitlab/cleanup.rake +++ b/lib/tasks/gitlab/cleanup.rake @@ -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 diff --git a/qa/qa/specs/features/api/1_manage/import/import_large_github_repo_spec.rb b/qa/qa/specs/features/api/1_manage/import/import_large_github_repo_spec.rb index 4098a35545d..416162c806c 100644 --- a/qa/qa/specs/features/api/1_manage/import/import_large_github_repo_spec.rb +++ b/qa/qa/specs/features/api/1_manage/import/import_large_github_repo_spec.rb @@ -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("/") } diff --git a/qa/qa/specs/features/api/1_manage/migration/gitlab_migration_large_project_spec.rb b/qa/qa/specs/features/api/1_manage/migration/gitlab_migration_large_project_spec.rb index 293960efe61..c622b95d84e 100644 --- a/qa/qa/specs/features/api/1_manage/migration/gitlab_migration_large_project_spec.rb +++ b/qa/qa/specs/features/api/1_manage/migration/gitlab_migration_large_project_spec.rb @@ -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], { diff --git a/spec/features/alert_management/alert_details_spec.rb b/spec/features/alert_management/alert_details_spec.rb index b377d3a092b..66b7a9ca46c 100644 --- a/spec/features/alert_management/alert_details_spec.rb +++ b/spec/features/alert_management/alert_details_spec.rb @@ -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 diff --git a/spec/features/alert_management/user_updates_alert_status_spec.rb b/spec/features/alert_management/user_updates_alert_status_spec.rb index 98fd7449c4f..563b5072782 100644 --- a/spec/features/alert_management/user_updates_alert_status_spec.rb +++ b/spec/features/alert_management/user_updates_alert_status_spec.rb @@ -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') diff --git a/spec/features/merge_request/user_sees_merge_widget_spec.rb b/spec/features/merge_request/user_sees_merge_widget_spec.rb index 73cd0d699c9..96cad397441 100644 --- a/spec/features/merge_request/user_sees_merge_widget_spec.rb +++ b/spec/features/merge_request/user_sees_merge_widget_spec.rb @@ -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 diff --git a/spec/frontend/fixtures/autocomplete.rb b/spec/frontend/fixtures/autocomplete.rb index 6215fa44e27..0ceacc41cdb 100644 --- a/spec/frontend/fixtures/autocomplete.rb +++ b/spec/frontend/fixtures/autocomplete.rb @@ -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 diff --git a/spec/frontend/fixtures/autocomplete_sources.rb b/spec/frontend/fixtures/autocomplete_sources.rb index 74bf58cc106..2c28440ab0c 100644 --- a/spec/frontend/fixtures/autocomplete_sources.rb +++ b/spec/frontend/fixtures/autocomplete_sources.rb @@ -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 diff --git a/spec/frontend/fixtures/environments.rb b/spec/frontend/fixtures/environments.rb index 81f1eb11e3e..8cf0977c5ed 100644 --- a/spec/frontend/fixtures/environments.rb +++ b/spec/frontend/fixtures/environments.rb @@ -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 diff --git a/spec/frontend/fixtures/issues.rb b/spec/frontend/fixtures/issues.rb index 9e6fcea2d17..90aa0544526 100644 --- a/spec/frontend/fixtures/issues.rb +++ b/spec/frontend/fixtures/issues.rb @@ -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)) diff --git a/spec/frontend/fixtures/releases.rb b/spec/frontend/fixtures/releases.rb index c7e3d8fe804..32ebe174800 100644 --- a/spec/frontend/fixtures/releases.rb +++ b/spec/frontend/fixtures/releases.rb @@ -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 diff --git a/spec/frontend/fixtures/search.rb b/spec/frontend/fixtures/search.rb index b2da383d657..0036fb353a5 100644 --- a/spec/frontend/fixtures/search.rb +++ b/spec/frontend/fixtures/search.rb @@ -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 diff --git a/spec/frontend/vue_shared/alert_details/alert_status_spec.js b/spec/frontend/vue_shared/alert_details/alert_status_spec.js index 90d29f0bfd4..478df81a966 100644 --- a/spec/frontend/vue_shared/alert_details/alert_status_spec.js +++ b/spec/frontend/vue_shared/alert_details/alert_status_spec.js @@ -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; diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb index 630b5dec62e..3b4c2ec7cd6 100644 --- a/spec/models/merge_request_spec.rb +++ b/spec/models/merge_request_spec.rb @@ -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 diff --git a/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb b/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb deleted file mode 100644 index 04db96e95ea..00000000000 --- a/spec/services/merge_requests/mergeability/check_not_preparing_service_spec.rb +++ /dev/null @@ -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 diff --git a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb index 632881dc361..66bcb948cb6 100644 --- a/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb +++ b/spec/services/merge_requests/mergeability/detailed_merge_status_service_spec.rb @@ -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 diff --git a/spec/support/helpers/features/dom_helpers.rb b/spec/support/helpers/features/dom_helpers.rb index 258a8c1ada9..cbbb80dde36 100644 --- a/spec/support/helpers/features/dom_helpers.rb +++ b/spec/support/helpers/features/dom_helpers.rb @@ -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 diff --git a/spec/tasks/gitlab/cleanup_rake_spec.rb b/spec/tasks/gitlab/cleanup_rake_spec.rb index bd4d9643433..1d111d266e3 100644 --- a/spec/tasks/gitlab/cleanup_rake_spec.rb +++ b/spec/tasks/gitlab/cleanup_rake_spec.rb @@ -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') } diff --git a/workhorse/go.mod b/workhorse/go.mod index c0089a30f17..a617536d0b7 100644 --- a/workhorse/go.mod +++ b/workhorse/go.mod @@ -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 ) diff --git a/workhorse/go.sum b/workhorse/go.sum index be09bb8698f..2308be5d738 100644 --- a/workhorse/go.sum +++ b/workhorse/go.sum @@ -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= |