diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 21:09:51 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-06-07 21:09:51 +0300 |
commit | 9ee2305f46a2b3d1d1e8a1f1182512599a74dbe1 (patch) | |
tree | 82c0631433839156f7d2fa88a5026c385b2b5703 | |
parent | 9498dc957345829f29fe0bc4e55c969783b457be (diff) |
Add latest changes from gitlab-org/gitlab@master
55 files changed, 373 insertions, 195 deletions
diff --git a/.gitlab/CODEOWNERS b/.gitlab/CODEOWNERS index 7a020838c22..03054f0381a 100644 --- a/.gitlab/CODEOWNERS +++ b/.gitlab/CODEOWNERS @@ -362,7 +362,8 @@ Dangerfile ^[Legal] @gitlab-org/legal-reviewers /config/dependency_decisions.yml -^[Workhorse] @nolith @patrickbajao @igor.drozdov +# https://gitlab.com/groups/gitlab-org/maintainers/gitlab-workhorse/-/group_members?with_inherited_permissions=exclude +^[Workhorse] @gitlab-org/maintainers/gitlab-workhorse /workhorse/ [Application Security] @gitlab-com/gl-security/appsec diff --git a/.gitlab/ci/qa.gitlab-ci.yml b/.gitlab/ci/qa.gitlab-ci.yml index cd03a27ebc1..ebf4c8e16bb 100644 --- a/.gitlab/ci/qa.gitlab-ci.yml +++ b/.gitlab/ci/qa.gitlab-ci.yml @@ -85,6 +85,7 @@ trigger-omnibus: - .qa:rules:package-and-test-ee needs: - trigger-omnibus-env + - build-assets-image inherit: variables: false variables: @@ -118,6 +119,7 @@ trigger-omnibus as-if-foss: - .qa:rules:package-and-test-ce needs: - trigger-omnibus-env as-if-foss + - build-assets-image as-if-foss variables: # Override gitlab repository so that omnibus doesn't use foss repository for CE build GITLAB_ALTERNATIVE_REPO: $CI_PROJECT_URL diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index e1abbe78a5c..256e305eb89 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -1818,7 +1818,6 @@ Layout/ArgumentAlignment: - 'spec/graphql/types/current_user_todos_type_spec.rb' - 'spec/graphql/types/project_statistics_type_spec.rb' - 'spec/graphql/types/project_type_spec.rb' - - 'spec/graphql/types/root_storage_statistics_type_spec.rb' - 'spec/graphql/types/todo_type_spec.rb' - 'spec/initializers/00_rails_disable_joins_spec.rb' - 'spec/initializers/secret_token_spec.rb' @@ -2113,7 +2112,6 @@ Layout/ArgumentAlignment: - 'spec/requests/api/graphql/mutations/todos/mark_done_spec.rb' - 'spec/requests/api/graphql/mutations/todos/restore_many_spec.rb' - 'spec/requests/api/graphql/mutations/todos/restore_spec.rb' - - 'spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb' - 'spec/requests/api/graphql/packages/conan_spec.rb' - 'spec/requests/api/graphql/project/error_tracking/sentry_errors_request_spec.rb' - 'spec/requests/api/graphql/project/issue/design_collection/version_spec.rb' diff --git a/.rubocop_todo/lint/symbol_conversion.yml b/.rubocop_todo/lint/symbol_conversion.yml index 794633121e3..147cd66f993 100644 --- a/.rubocop_todo/lint/symbol_conversion.yml +++ b/.rubocop_todo/lint/symbol_conversion.yml @@ -7,8 +7,6 @@ Lint/SymbolConversion: - 'app/helpers/environments_helper.rb' - 'app/helpers/tooling/visual_review_helper.rb' - 'app/services/google_cloud/create_cloudsql_instance_service.rb' - - 'app/services/packages/debian/generate_distribution_key_service.rb' - - 'app/services/packages/debian/process_changes_service.rb' - 'config/puma.rb' - 'ee/app/components/billing/plan_component.rb' - 'ee/app/controllers/projects/security/scanned_resources_controller.rb' @@ -72,8 +70,6 @@ Lint/SymbolConversion: - 'spec/controllers/jira_connect/branches_controller_spec.rb' - 'spec/factories/ci/reports/codequality_degradations.rb' - 'spec/factories/evidences.rb' - - 'spec/factories/packages/helm/file_metadatum.rb' - - 'spec/factories/packages/npm/metadata.rb' - 'spec/features/file_uploads/graphql_add_design_spec.rb' - 'spec/features/projects/new_project_spec.rb' - 'spec/graphql/mutations/ci/job_token_scope/remove_project_spec.rb' @@ -126,9 +122,6 @@ Lint/SymbolConversion: - 'spec/lib/service_ping/devops_report_spec.rb' - 'spec/models/integrations/prometheus_spec.rb' - 'spec/models/merge_request_diff_commit_spec.rb' - - 'spec/models/packages/helm/file_metadatum_spec.rb' - - 'spec/models/packages/npm/metadatum_spec.rb' - - 'spec/presenters/packages/npm/package_presenter_spec.rb' - 'spec/requests/api/admin/plan_limits_spec.rb' - 'spec/requests/api/ci/job_artifacts_spec.rb' - 'spec/requests/api/ci/runner/jobs_put_spec.rb' @@ -158,4 +151,3 @@ Lint/SymbolConversion: - 'spec/support/shared_examples/models/diff_positionable_note_shared_examples.rb' - 'spec/views/admin/application_settings/_repository_storage.html.haml_spec.rb' - 'spec/workers/gitlab/github_gists_import/import_gist_worker_spec.rb' - - 'spec/workers/packages/go/sync_packages_worker_spec.rb' diff --git a/.rubocop_todo/style/bare_percent_literals.yml b/.rubocop_todo/style/bare_percent_literals.yml index 132f0854700..554dc64c39c 100644 --- a/.rubocop_todo/style/bare_percent_literals.yml +++ b/.rubocop_todo/style/bare_percent_literals.yml @@ -2,13 +2,6 @@ # Cop supports --autocorrect. Style/BarePercentLiterals: Exclude: - - 'app/models/commit.rb' - - 'app/models/concerns/storage/legacy_namespace.rb' - - 'app/models/integrations/datadog.rb' - - 'app/services/feature_flags/base_service.rb' - - 'app/services/repositories/base_service.rb' - - 'ee/app/services/jira/jql_builder_service.rb' - - 'ee/lib/ee/gitlab/checks/push_rules/file_size_check.rb' - 'ee/spec/features/projects/environments/environments_spec.rb' - 'ee/spec/helpers/subscriptions_helper_spec.rb' - 'ee/spec/lib/banzai/filter/references/iteration_reference_filter_spec.rb' @@ -16,18 +9,6 @@ Style/BarePercentLiterals: - 'ee/spec/lib/gitlab/status_page/filter/image_filter_spec.rb' - 'ee/spec/requests/api/ci/jobs_spec.rb' - 'ee/spec/services/geo/container_repository_sync_spec.rb' - - 'lib/banzai/filter/autolink_filter.rb' - - 'lib/banzai/filter/references/reference_filter.rb' - - 'lib/banzai/filter/spaced_link_filter.rb' - - 'lib/banzai/filter/table_of_contents_filter.rb' - - 'lib/banzai/issuable_extractor.rb' - - 'lib/gitlab/authorized_keys.rb' - - 'lib/gitlab/etag_caching/middleware.rb' - - 'lib/gitlab/etag_caching/router/rails.rb' - - 'lib/gitlab/gl_repository/identifier.rb' - - 'lib/gitlab/import_export/repo_restorer.rb' - - 'lib/kramdown/parser/atlassian_document_format.rb' - - 'lib/tasks/tanuki_emoji.rake' - 'qa/qa/ee/page/dashboard/projects.rb' - 'qa/qa/ee/page/group/settings/general.rb' - 'qa/qa/ee/page/project/issue/show.rb' @@ -46,8 +27,6 @@ Style/BarePercentLiterals: - 'qa/qa/specs/features/browser_ui/4_verify/pipeline/pipeline_with_image_pull_policy_spec.rb' - 'qa/qa/specs/features/ee/browser_ui/3_create/repository/push_rules_spec.rb' - 'qa/spec/runtime/feature_spec.rb' - - 'scripts/regenerate-schema' - - 'scripts/trigger-build.rb' - 'spec/controllers/import/fogbugz_controller_spec.rb' - 'spec/controllers/projects/artifacts_controller_spec.rb' - 'spec/controllers/projects/design_management/designs/raw_images_controller_spec.rb' diff --git a/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue b/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue index 28a17abb20b..9a88018205b 100644 --- a/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue +++ b/app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue @@ -1,5 +1,5 @@ <script> -import { GlLink, GlDropdown, GlDropdownItem, GlSprintf } from '@gitlab/ui'; +import { GlLink, GlDisclosureDropdown, GlSprintf } from '@gitlab/ui'; import { isEmpty } from 'lodash'; import { Mousetrap } from '~/lib/mousetrap'; import { s__ } from '~/locale'; @@ -12,8 +12,7 @@ export default { components: { CiIcon, ClipboardButton, - GlDropdown, - GlDropdownItem, + GlDisclosureDropdown, GlLink, GlSprintf, }, @@ -32,6 +31,15 @@ export default { }, }, computed: { + dropdownItems() { + return this.stages.map((stage) => ({ + text: stage.name, + action: () => { + this.onStageClick(stage); + }, + })); + }, + hasRef() { return !isEmpty(this.pipeline.ref); }, @@ -153,15 +161,6 @@ export default { </gl-sprintf> </div> - <gl-dropdown :text="selectedStage" class="js-selected-stage gl-w-full gl-mt-3"> - <gl-dropdown-item - v-for="stage in stages" - :key="stage.name" - class="js-stage-item stage-item" - @click="onStageClick(stage)" - > - {{ stage.name }} - </gl-dropdown-item> - </gl-dropdown> + <gl-disclosure-dropdown :toggle-text="selectedStage" :items="dropdownItems" class="gl-mt-3" /> </div> </template> diff --git a/app/assets/javascripts/pipelines/components/pipeline_details_header.vue b/app/assets/javascripts/pipelines/components/pipeline_details_header.vue index be61083dfe3..cfbd5aa9f8d 100644 --- a/app/assets/javascripts/pipelines/components/pipeline_details_header.vue +++ b/app/assets/javascripts/pipelines/components/pipeline_details_header.vue @@ -13,6 +13,7 @@ import { } from '@gitlab/ui'; import { setUrlFragment, redirectTo } from '~/lib/utils/url_utility'; // eslint-disable-line import/no-deprecated import { __, s__, sprintf } from '~/locale'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import ClipboardButton from '~/vue_shared/components/clipboard_button.vue'; import CiBadgeLink from '~/vue_shared/components/ci_badge_link.vue'; import SafeHtml from '~/vue_shared/directives/safe_html'; @@ -247,11 +248,11 @@ export default { }; } }, - usersName() { - return this.pipeline?.user?.name || ''; + user() { + return this.pipeline?.user; }, - userPath() { - return this.pipeline?.user?.webPath || ''; + userId() { + return getIdFromGraphQLId(this.user?.id); }, shortId() { return this.pipeline?.commit?.shortId || ''; @@ -268,8 +269,8 @@ export default { }); }, triggeredText() { - return sprintf(__('%{linkStart}%{name}%{linkEnd} triggered pipeline for commit'), { - name: this.usersName, + return sprintf(__('triggered pipeline for commit %{linkStart}%{shortId}%{linkEnd}'), { + shortId: this.shortId, }); }, inProgress() { @@ -384,24 +385,28 @@ export default { <div> <ci-badge-link :status="detailedStatus" /> <div class="gl-ml-2 gl-mb-2 gl-display-inline-block gl-h-6"> + <gl-link + v-if="user" + :href="user.webUrl" + class="gl-display-inline-block gl-text-gray-900 gl-font-weight-bold js-user-link" + :data-user-id="userId" + :data-username="user.username" + data-testid="pipeline-user-link" + > + {{ user.name }} + </gl-link> <gl-sprintf :message="triggeredText"> <template #link="{ content }"> <gl-link - :href="userPath" - class="gl-text-gray-900 gl-font-weight-bold" + :href="commitPath" + class="gl-bg-blue-50 gl-rounded-base gl-px-2 gl-mx-2" + data-testid="commit-link" target="_blank" > {{ content }} </gl-link> </template> </gl-sprintf> - <gl-link - :href="commitPath" - class="gl-bg-blue-50 gl-rounded-base gl-px-2 gl-mx-2" - data-testid="commit-link" - > - {{ shortId }} - </gl-link> <clipboard-button :text="shortId" category="tertiary" diff --git a/app/controllers/concerns/uploads_actions.rb b/app/controllers/concerns/uploads_actions.rb index d747d397e20..222fcc17222 100644 --- a/app/controllers/concerns/uploads_actions.rb +++ b/app/controllers/concerns/uploads_actions.rb @@ -129,6 +129,14 @@ module UploadsActions return unless uploader = build_uploader uploader.retrieve_from_store!(params[:filename]) + + Gitlab::AppJsonLogger.info( + message: 'Deprecated usage of build_uploader_from_params', + uploader_class: uploader.class.name, + path: params[:filename], + exists: uploader.exists? + ) + uploader end diff --git a/app/models/commit.rb b/app/models/commit.rb index 6d17d7f495d..26412205899 100644 --- a/app/models/commit.rb +++ b/app/models/commit.rb @@ -427,7 +427,7 @@ class Commit end def cherry_pick_message(user) - %Q{#{message}\n\n#{cherry_pick_description(user)}} + %{#{message}\n\n#{cherry_pick_description(user)}} end def revert_description(user) @@ -439,7 +439,7 @@ class Commit end def revert_message(user) - %Q{Revert "#{title.strip}"\n\n#{revert_description(user)}} + %{Revert "#{title.strip}"\n\n#{revert_description(user)}} end def reverts_commit?(commit, user) diff --git a/app/models/concerns/storage/legacy_namespace.rb b/app/models/concerns/storage/legacy_namespace.rb index e418842a30b..b73ed937b5d 100644 --- a/app/models/concerns/storage/legacy_namespace.rb +++ b/app/models/concerns/storage/legacy_namespace.rb @@ -99,7 +99,7 @@ module Storage Gitlab::GitalyClient::NamespaceService.allow do if gitlab_shell.mv_namespace(repository_storage, full_path, new_path) - Gitlab::AppLogger.info %Q(Namespace directory "#{full_path}" moved to "#{new_path}") + Gitlab::AppLogger.info %(Namespace directory "#{full_path}" moved to "#{new_path}") # Remove namespace directory async with delay so # GitLab has time to remove all projects first diff --git a/app/models/integrations/datadog.rb b/app/models/integrations/datadog.rb index 3b3c7d8f2cd..c7306209174 100644 --- a/app/models/integrations/datadog.rb +++ b/app/models/integrations/datadog.rb @@ -40,7 +40,7 @@ module Integrations ERB::Util.html_escape( s_('DatadogIntegration|%{linkOpen}API key%{linkClose} used for authentication with Datadog.') ) % { - linkOpen: %Q{<a href="#{URL_API_KEYS_DOCS}" target="_blank" rel="noopener noreferrer">}.html_safe, + linkOpen: %{<a href="#{URL_API_KEYS_DOCS}" target="_blank" rel="noopener noreferrer">}.html_safe, linkClose: '</a>'.html_safe } end, diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 3c40f4beedc..f5fa98ae8a4 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -242,7 +242,7 @@ class Snippet < ApplicationRecord end def hook_attrs - attributes + attributes.merge('url' => Gitlab::UrlBuilder.build(self)) end def file_name diff --git a/app/services/feature_flags/base_service.rb b/app/services/feature_flags/base_service.rb index 028906a0b43..834409bf3c4 100644 --- a/app/services/feature_flags/base_service.rb +++ b/app/services/feature_flags/base_service.rb @@ -39,9 +39,9 @@ module FeatureFlags def created_strategy_message(strategy) scopes = strategy.scopes - .map { |scope| %Q("#{scope.environment_scope}") } + .map { |scope| %("#{scope.environment_scope}") } .join(', ') - %Q(Created strategy "#{strategy.name}" with scopes #{scopes}.) + %(Created strategy "#{strategy.name}" with scopes #{scopes}.) end def feature_flag_by_name diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb index 10301774f96..5e41375e7a0 100644 --- a/app/services/merge_requests/merge_service.rb +++ b/app/services/merge_requests/merge_service.rb @@ -160,7 +160,7 @@ module MergeRequests end def handle_merge_error(log_message:, save_message_on_model: false) - log_error("MergeService ERROR: #{merge_request_info} - #{log_message}") + log_error("MergeService ERROR: #{merge_request_info}:#{merge_status} - #{log_message}") @merge_request.update(merge_error: log_message) if save_message_on_model end @@ -186,6 +186,10 @@ module MergeRequests @merge_request_info ||= merge_request.to_reference(full: true) end + def merge_status + @merge_status ||= @merge_request.merge_status + end + def source_matches? # params-keys are symbols coming from the controller, but when they get # loaded from the database they're strings diff --git a/app/services/packages/debian/generate_distribution_key_service.rb b/app/services/packages/debian/generate_distribution_key_service.rb index 37e25c2db47..25c84955a52 100644 --- a/app/services/packages/debian/generate_distribution_key_service.rb +++ b/app/services/packages/debian/generate_distribution_key_service.rb @@ -89,7 +89,7 @@ module Packages 'Name-Email': params[:name_email] || Gitlab.config.gitlab.email_reply_to, 'Name-Comment': params[:name_comment] || 'GitLab Debian repository automatic signing key', 'Expire-Date': params[:expire_date] || 0, - 'Passphrase': passphrase + Passphrase: passphrase }.map { |k, v| "#{k}: #{v}\n" }.join + '</GnupgKeyParms>' end diff --git a/app/services/packages/debian/process_changes_service.rb b/app/services/packages/debian/process_changes_service.rb index abd631dbc70..eb88e7c9b59 100644 --- a/app/services/packages/debian/process_changes_service.rb +++ b/app/services/packages/debian/process_changes_service.rb @@ -90,9 +90,9 @@ module Packages def package params = { - 'name': metadata[:fields]['Source'], - 'version': metadata[:fields]['Version'], - 'distribution_name': metadata[:fields]['Distribution'] + name: metadata[:fields]['Source'], + version: metadata[:fields]['Version'], + distribution_name: metadata[:fields]['Distribution'] } response = Packages::Debian::FindOrCreatePackageService.new(project, creator, params).execute response.payload[:package] diff --git a/app/services/repositories/base_service.rb b/app/services/repositories/base_service.rb index 4d7e4ffe267..b262b4a1f7b 100644 --- a/app/services/repositories/base_service.rb +++ b/app/services/repositories/base_service.rb @@ -29,7 +29,7 @@ class Repositories::BaseService < BaseService end def move_error(path) - error = %Q{Repository "#{path}" could not be moved} + error = %{Repository "#{path}" could not be moved} log_error(error) error(error) diff --git a/doc/administration/sidekiq/sidekiq_troubleshooting.md b/doc/administration/sidekiq/sidekiq_troubleshooting.md index cce9420f455..315714cd00b 100644 --- a/doc/administration/sidekiq/sidekiq_troubleshooting.md +++ b/doc/administration/sidekiq/sidekiq_troubleshooting.md @@ -585,3 +585,7 @@ This change might reduce the amount of work Sidekiq can do. Symptoms like delays indicate that additional Sidekiq processes would be beneficial. Consider [adding additional Sidekiq processes](extra_sidekiq_processes.md) to compensate for removing the `sidekiq-cluster` service. + +## Related topics + +- [Elasticsearch workers overload Sidekiq](../../integration/advanced_search/elasticsearch_troubleshooting.md#elasticsearch-workers-overload-sidekiq). diff --git a/doc/development/code_review.md b/doc/development/code_review.md index daa1b51b252..c3f3ea12472 100644 --- a/doc/development/code_review.md +++ b/doc/development/code_review.md @@ -176,31 +176,31 @@ by a reviewer before passing it to a maintainer as described in the | If your merge request includes | It must be approved by a | | ------------------------------- | ------------------------ | -| `~backend` changes (*1*) | [Backend maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_backend). | -| `~database` migrations or changes to expensive queries (*2*) | [Database maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_database). Refer to the [database review guidelines](database_review.md) for more details. | +| `~backend` changes <sup>1</sup> | [Backend maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_backend). | +| `~database` migrations or changes to expensive queries <sup>2</sup> | [Database maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_database). Refer to the [database review guidelines](database_review.md) for more details. | | `~workhorse` changes | [Workhorse maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_workhorse). | -| `~frontend` changes (*1*) | [Frontend maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_frontend). | -| `~UX` user-facing changes (*3*) | [Product Designer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_reviewers_UX). Refer to the [design and user interface guidelines](contributing/design.md) for details. | -| Adding a new JavaScript library (*1*) | - [Frontend foundations member](https://about.gitlab.com/direction/manage/foundations/) if the library significantly increases the [bundle size](https://gitlab.com/gitlab-org/frontend/playground/webpack-memory-metrics/-/blob/master/doc/report.md).<br/>- A [legal department member](https://about.gitlab.com/handbook/legal/) if the license used by the new library hasn't been approved for use in GitLab.<br/><br/>More information about license compatibility can be found in our [GitLab Licensing and Compatibility documentation](licensing.md). | +| `~frontend` changes <sup>1</sup> | [Frontend maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_frontend). | +| `~UX` user-facing changes <sup>3</sup> | [Product Designer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_reviewers_UX). Refer to the [design and user interface guidelines](contributing/design.md) for details. | +| Adding a new JavaScript library <sup>1</sup> | - [Frontend foundations member](https://about.gitlab.com/direction/manage/foundations/) if the library significantly increases the [bundle size](https://gitlab.com/gitlab-org/frontend/playground/webpack-memory-metrics/-/blob/master/doc/report.md).<br/>- A [legal department member](https://about.gitlab.com/handbook/legal/) if the license used by the new library hasn't been approved for use in GitLab.<br/><br/>More information about license compatibility can be found in our [GitLab Licensing and Compatibility documentation](licensing.md). | | A new dependency or a file system change | - [Distribution team member](https://about.gitlab.com/company/team/). See how to work with the [Distribution team](https://about.gitlab.com/handbook/engineering/development/enablement/systems/distribution/#how-to-work-with-distribution) for more details.<br/>- For RubyGems, request an [AppSec review](gemfile.md#request-an-appsec-review). | | `~documentation` or `~UI text` changes | [Technical writer](https://about.gitlab.com/handbook/product/ux/technical-writing/#assignments) based on assignments in the appropriate [DevOps stage group](https://about.gitlab.com/handbook/product/categories/#devops-stages). | | Changes to development guidelines | Follow the [review process](development_processes.md#development-guidelines-review) and get the approvals accordingly. | -| End-to-end **and** non-end-to-end changes (*4*) | [Software Engineer in Test](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors). | -| Only End-to-end changes (*4*) **or** if the MR author is a [Software Engineer in Test](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors) | [Quality maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_qa). | +| End-to-end **and** non-end-to-end changes <sup>4</sup> | [Software Engineer in Test](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors). | +| Only End-to-end changes <sup>4</sup> **or** if the MR author is a [Software Engineer in Test](https://about.gitlab.com/handbook/engineering/quality/#individual-contributors) | [Quality maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_qa). | | A new or updated [application limit](https://about.gitlab.com/handbook/product/product-processes/#introducing-application-limits) | [Product manager](https://about.gitlab.com/company/team/). | | Analytics Instrumentation (telemetry or analytics) changes | [Analytics Instrumentation engineer](https://gitlab.com/gitlab-org/analytics-section/analytics-instrumentation/engineers). | | An addition of, or changes to a [Feature spec](testing_guide/testing_levels.md#frontend-feature-tests) | [Quality maintainer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_maintainers_qa) or [Quality reviewer](https://about.gitlab.com/handbook/engineering/projects/#gitlab_reviewers_qa). | | A new service to GitLab (Puma, Sidekiq, Gitaly are examples) | [Product manager](https://about.gitlab.com/company/team/). See the [process for adding a service component to GitLab](adding_service_component.md) for details. | | Changes related to authentication or authorization | [Manage:Authentication and Authorization team member](https://about.gitlab.com/company/team/). Check the [code review section on the group page](https://about.gitlab.com/handbook/engineering/development/dev/manage/authentication-and-authorization/#additional-considerations) for more details. Patterns for files known to require review from the team are listed in the in the `Authentication and Authorization` section of the [`CODEOWNERS`](https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/CODEOWNERS) file, and the team will be listed in the approvers section of all merge requests that modify these files. | -- (*1*): Specs other than JavaScript specs are considered `~backend` code. Haml markup is considered `~frontend` code. However, Ruby code in Haml templates is considered `~backend` code. When in doubt, request both a frontend and backend review. -- (*2*): We encourage you to seek guidance from a database maintainer if your merge - request is potentially introducing expensive queries. It is most efficient to comment - on the line of code in question with the SQL queries so they can give their advice. -- (*3*): User-facing changes include both visual changes (regardless of how minor), - and changes to the rendered DOM which impact how a screen reader may announce - the content. -- (*4*): End-to-end changes include all files in the `qa` directory. +1. Specs other than JavaScript specs are considered `~backend` code. Haml markup is considered `~frontend` code. However, Ruby code in Haml templates is considered `~backend` code. When in doubt, request both a frontend and backend review. +1. We encourage you to seek guidance from a database maintainer if your merge + request is potentially introducing expensive queries. It is most efficient to comment + on the line of code in question with the SQL queries so they can give their advice. +1. User-facing changes include both visual changes (regardless of how minor), + and changes to the rendered DOM which impact how a screen reader may announce + the content. +1. End-to-end changes include all files in the `qa` directory. #### Acceptance checklist @@ -428,10 +428,10 @@ On March 18th 2021, an updated process was put in place aimed at efficiently and Here is a summary of the changes, also reflected in this section above. -- Merge request authors and DRIs stay as Assignees -- Authors request a review from Reviewers when they are expected to review -- Reviewers remove themselves after they're done reviewing/approving -- The last approver stays as Reviewer upon merging +- Merge request authors and DRIs stay as Assignees. +- Authors request a review by assigning users as Reviewers. +- Reviewers unassign themselves after they're done reviewing and approving. +- The last approver (who merges the MR) stays assigned as Reviewer. ## Best practices @@ -570,8 +570,6 @@ must seek a maintainer who has not contributed to the MR to approve and merge it This policy is in place to satisfy the CHG-04 control of the GitLab [Change Management Controls](https://about.gitlab.com/handbook/security/change-management-policy.html). -<!-- Or should it link to: https://about.gitlab.com/handbook/engineering/infrastructure/change-management/ ? --> - To implement this policy in `gitlab-org/gitlab`, we have enabled the following settings to ensure MRs get an approval from a top-level CODEOWNERS maintainer: diff --git a/doc/development/documentation/styleguide/index.md b/doc/development/documentation/styleguide/index.md index 00307583be4..ca6475566b3 100644 --- a/doc/development/documentation/styleguide/index.md +++ b/doc/development/documentation/styleguide/index.md @@ -640,15 +640,27 @@ To keep tables accessible and scannable, tables should not have any empty cells. If there is no otherwise meaningful value for a cell, consider entering **N/A** for 'not applicable' or **None**. -To help tables be easier to maintain, consider adding additional spaces to the -column widths to make them consistent. For example: +To help keep tables easier to maintain, you can: -```markdown -| App name | Description | Requirements | -|:---------|:---------------------|:---------------| -| App 1 | Description text 1. | Requirements 1 | -| App 2 | Description text 2. | None | -``` +- Add additional spaces to make the column widths consistent. For example: + + ```markdown + | App name | Description | Requirements | + |----------|---------------------|----------------| + | App 1 | Description text 1. | Requirements 1 | + | App 2 | Description text 2. | None | + ``` + +- Skip the additional spaces in the rightmost column for tables that are very wide. + For example: + + ```markdown + | Setting | Default | Description | + |-----------|---------|-------------| + | Setting 1 | `1000` | A short description. | + | Setting 2 | `2000` | A long description that would make the table too wide and add too much whitespace if every cell in this column was aligned. | + | Setting 3 | `0` | Another short description. | + ``` Consider installing a plugin or extension in your editor for formatting tables: @@ -656,6 +668,16 @@ Consider installing a plugin or extension in your editor for formatting tables: - [Markdown Table Formatter](https://packagecontrol.io/packages/Markdown%20Table%20Formatter) for Sublime Text - [Markdown Table Formatter](https://atom.io/packages/markdown-table-formatter) for Atom +### Updates to existing tables + +When you add or edit rows in an existing table, the cells in the new rows might be wider. +If you realign the columns to account for the width, the diff becomes difficult to read, +because the entire table shows as modified. + +Markdown tables naturally fall out of alignment over time, but still render correctly +on `docs.gitlab.com`. The technical writing team can realign cells the next time +the page is refactored. + ### Table headings Use sentence case for table headings. For example, `Keyword value` or `Project name`. @@ -681,10 +703,10 @@ For the footnotes below the table, use a bold number followed by a sentence. For example: ```markdown -| App name | Description | -|:---------|:---------------------------------| -| App A | Description text. <sup>1</sup> | -| App B | Description text. <sup>2</sup> | +| App name | Description | +|:---------|:-------------------------------| +| App A | Description text. <sup>1</sup> | +| App B | Description text. <sup>2</sup> | 1. This is the footnote. 1. This is the other footnote. @@ -692,10 +714,10 @@ For example: This text renders this output: -| App name | Description | -|:---------|:---------------------------------| -| App A | Description text. <sup>1</sup> | -| App B | Description text. <sup>2</sup> | +| App name | Description | +|:---------|:-------------------------------| +| App A | Description text. <sup>1</sup> | +| App B | Description text. <sup>2</sup> | 1. This is the footnote. 1. This is the other footnote. diff --git a/doc/development/internal_api/index.md b/doc/development/internal_api/index.md index 4db9739d746..d3a32471b75 100644 --- a/doc/development/internal_api/index.md +++ b/doc/development/internal_api/index.md @@ -1451,7 +1451,7 @@ Fields that can be updated are: | SCIM/IdP field | GitLab field | |:---------------------------------|:-----------------------------------------------------------------------------| | `id/externalId` | `extern_uid` | -| `active` | Identity removal if `active` = `false` | +| `active` | If `false`, the user is blocked, but the SCIM identity remains linked. | ```plaintext PATCH /api/scim/v2/application/Users/:id diff --git a/doc/integration/advanced_search/elasticsearch_troubleshooting.md b/doc/integration/advanced_search/elasticsearch_troubleshooting.md index 3d1592b772f..e8eace7bd16 100644 --- a/doc/integration/advanced_search/elasticsearch_troubleshooting.md +++ b/doc/integration/advanced_search/elasticsearch_troubleshooting.md @@ -453,3 +453,41 @@ When using fine-grained access control with an IAM role or a role created using ``` To fix this, you need to [map the roles to users](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/fgac.html#fgac-mapping) in Kibana. + +## Elasticsearch workers overload Sidekiq + +In some cases, Elasticsearch cannot connect to GitLab anymore because: + +- The Elasticsearch password has been updated on one side only (`Unauthorized [401] ... unable to authenticate user` errors). +- A firewall or network issue impairs connectivity (`Failed to open TCP connection to <ip>:9200` errors). + +These errors are logged in [`gitlab-rails/elasticsearch.log`](../../administration/logs/index.md#elasticsearchlog). To retrieve the errors, use [`jq`](../../administration/logs/log_parsing.md): + +```shell +$ jq --raw-output 'select(.severity == "ERROR") | [.error_class, .error_message] | @tsv' \ + gitlab-rails/elasticsearch.log | + sort | uniq -c +``` + +`Elastic` workers and [Sidekiq jobs](../../user/admin_area/index.md#background-jobs) could also appear much more often +because Elasticsearch frequently attempts to reindex if a previous job fails. +You can use [`fast-stats`](https://gitlab.com/gitlab-com/support/toolbox/fast-stats#usage) +or `jq` to count workers in the [Sidekiq logs](../../administration/logs/index.md#sidekiq-logs): + +```shell +$ fast-stats --print-fields=count,score sidekiq/current +WORKER COUNT SCORE +ElasticIndexBulkCronWorker 234 123456 +ElasticIndexInitialBulkCronWorker 345 12345 +Some::OtherWorker 12 123 +... + +$ jq '.class' sidekiq/current | sort | uniq -c | sort -nr + 234 "ElasticIndexInitialBulkCronWorker" + 345 "ElasticIndexBulkCronWorker" + 12 "Some::OtherWorker" +... +``` + +In this case, `free -m` on the overloaded GitLab node would also show +unexpectedly high `buff/cache` usage. diff --git a/doc/user/admin_area/settings/scim_setup.md b/doc/user/admin_area/settings/scim_setup.md index fd6e3061140..7c2993a7174 100644 --- a/doc/user/admin_area/settings/scim_setup.md +++ b/doc/user/admin_area/settings/scim_setup.md @@ -12,7 +12,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w You can use the open standard System for Cross-domain Identity Management (SCIM) to automatically: - Create users. -- Remove users (deactivate SCIM identity). +- Block users. The [internal GitLab SCIM API](../../../development/internal_api/index.md#instance-scim-api) implements part of [the RFC7644 protocol](https://www.rfc-editor.org/rfc/rfc7644). @@ -32,3 +32,11 @@ To configure GitLab SCIM: 1. For configuration of your identity provider, save the: - Token from the **Your SCIM token** field. - URL from the **SCIM API endpoint URL** field. + +## Remove access + +Removing or deactivating a user on the identity provider blocks the user on +the GitLab instance, while the SCIM identity remains linked to the GitLab user. + +To update the user SCIM identity, use the +[internal GitLab SCIM API](../../../development/internal_api/index.md#update-a-single-scim-provisioned-user-1). diff --git a/doc/user/project/integrations/webhook_events.md b/doc/user/project/integrations/webhook_events.md index fda778aa167..cdbea599a3f 100644 --- a/doc/user/project/integrations/webhook_events.md +++ b/doc/user/project/integrations/webhook_events.md @@ -786,7 +786,7 @@ Payload example: "noteable_id": 53, "system": false, "st_diff": null, - "url": "http://example.com/gitlab-org/gitlab-test/snippets/53#note_1245" + "url": "http://example.com/gitlab-org/gitlab-test/-/snippets/53#note_1245" }, "snippet": { "id": 53, @@ -799,7 +799,8 @@ Payload example: "file_name": "test.rb", "expires_at": null, "type": "ProjectSnippet", - "visibility_level": 0 + "visibility_level": 0, + "url": "http://example.com/gitlab-org/gitlab-test/-/snippets/53" } } ``` diff --git a/doc/user/project/protected_branches.md b/doc/user/project/protected_branches.md index 2f303bf5316..ef59bb645fe 100644 --- a/doc/user/project/protected_branches.md +++ b/doc/user/project/protected_branches.md @@ -30,13 +30,17 @@ When a branch is protected, the default behavior enforces these restrictions on |:-------------------------|:------------------------------------------------------------------| | Protect a branch | At least the Maintainer role. | | Push to the branch | Anyone with **Allowed** permission. (1) | -| Force push to the branch | No one. | +| Force push to the branch | No one. (3) | | Delete the branch | No one. (2) | 1. Users with the Developer role can create a project in a group, but might not be allowed to initially push to the [default branch](repository/branches/default.md). 1. No one can delete a protected branch using Git commands, however, users with at least Maintainer role can [delete a protected branch from the UI or API](#delete-a-protected-branch). +1. If the `group_protected_branches` feature flag is enabled _and_ the same branch is + protected at both the group and project levels, force push settings configured + for that branch at the project level are ignored. All other protections continue + to use project level settings. ### When a branch matches multiple rules @@ -108,15 +112,20 @@ The protected branch displays in the list of protected branches. ### For all projects in a group **(PREMIUM)** -> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106532) in GitLab 15.9 behind a feature flag, disabled by default. - -Group owners can create protected branches for a group. These settings are inherited by all projects in the group and can't be overridden by project settings. +> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106532) in GitLab 15.9 [with a flag](../../administration/feature_flags.md) named `group_protected_branches`. Disabled by default. FLAG: On self-managed GitLab, by default this feature is not available. -To make it available, ask an administrator to [enable the feature flag](../../administration/feature_flags.md) +To make it available, ask an administrator to +[enable the feature flag](../../administration/feature_flags.md) named `group_protected_branches`. On GitLab.com, this feature is not available. +Group owners can create protected branches for a group. These settings are inherited +by all projects in the group and can't be overridden by project settings. If a +specific branch is configured with **Allowed to force push** settings at both the +group and project levels, the **Allowed to force push** setting at the _project_ level +is ignored in favor of the group level setting. + Prerequisite: - You must have the Owner role in the group. @@ -272,6 +281,30 @@ To enable force pushes on branches that are already protected: Members who can push to this branch can now also force push. +### When a branch matches multiple rules + +When a branch matches multiple rules, the **most permissive rule** determines the +level of protection for the branch. For example, consider these rules, which include +[wildcards](#protect-multiple-branches-with-wildcard-rules): + +| Branch name pattern | Allow force push | +|---------------------|------------------| +| `v1.x` | Yes | +| `v1.*` | No | +| `v*` | No | + +A branch named `v1.x` matches all three branch name patterns: `v1.x`, `v1.*`, and `v*`. +As the most permissive option determines the behavior, the resulting permissions for branch `v1.x` are: + +- **Allow force push:** Of the three settings, `Yes` is most permissive, + and controls branch behavior as a result. Even though the branch also matched `v1.x` and `v*` + (which each have stricter permissions), any user that can push to this branch can also force push. + +NOTE: +Force push settings for a branch at the project level are overridden by group level settings +if the `group_protected_branches` feature flag is enabled and a group owner has set +[group level protection for the same branch](#for-all-projects-in-a-group). + ## Require Code Owner approval on a protected branch **(PREMIUM)** > [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/35097) in GitLab 13.5, users and groups who can push to protected branches do not have to use a merge request to merge their feature branches. This means they can skip merge request approval rules. diff --git a/lib/banzai/filter/autolink_filter.rb b/lib/banzai/filter/autolink_filter.rb index a86c1bb2892..336d60055e2 100644 --- a/lib/banzai/filter/autolink_filter.rb +++ b/lib/banzai/filter/autolink_filter.rb @@ -40,7 +40,7 @@ module Banzai IGNORE_PARENTS = %w(a code kbd pre script style).to_set # The XPath query to use for finding text nodes to parse. - TEXT_QUERY = %Q(descendant-or-self::text()[ + TEXT_QUERY = %(descendant-or-self::text()[ not(#{IGNORE_PARENTS.map { |p| "ancestor::#{p}" }.join(' or ')}) and contains(., '://') ]) diff --git a/lib/banzai/filter/references/reference_filter.rb b/lib/banzai/filter/references/reference_filter.rb index 37734f6a45a..a687ae2882e 100644 --- a/lib/banzai/filter/references/reference_filter.rb +++ b/lib/banzai/filter/references/reference_filter.rb @@ -143,7 +143,7 @@ module Banzai attributes.delete(:original) if context[:no_original_data] attributes.map do |key, value| - %Q(data-#{key.to_s.dasherize}="#{escape_once(value)}") + %(data-#{key.to_s.dasherize}="#{escape_once(value)}") end .join(' ') .prepend(reference_type_attribute) @@ -251,7 +251,7 @@ module Banzai end def query - @query ||= %Q{descendant-or-self::text()[not(#{ignore_ancestor_query})] + @query ||= %{descendant-or-self::text()[not(#{ignore_ancestor_query})] | descendant-or-self::a[ not(contains(concat(" ", @class, " "), " gfm ")) and not(@href = "") ]} diff --git a/lib/banzai/filter/spaced_link_filter.rb b/lib/banzai/filter/spaced_link_filter.rb index f8d03fd6e50..d370a585271 100644 --- a/lib/banzai/filter/spaced_link_filter.rb +++ b/lib/banzai/filter/spaced_link_filter.rb @@ -42,7 +42,7 @@ module Banzai IGNORE_PARENTS = %w(a code kbd pre script style).to_set # The XPath query to use for finding text nodes to parse. - TEXT_QUERY = %Q(descendant-or-self::text()[ + TEXT_QUERY = %(descendant-or-self::text()[ not(#{IGNORE_PARENTS.map { |p| "ancestor::#{p}" }.join(' or ')}) and contains(., ']\(') ]) diff --git a/lib/banzai/filter/table_of_contents_filter.rb b/lib/banzai/filter/table_of_contents_filter.rb index d76009d08e1..de3e978b320 100644 --- a/lib/banzai/filter/table_of_contents_filter.rb +++ b/lib/banzai/filter/table_of_contents_filter.rb @@ -55,7 +55,7 @@ module Banzai def anchor_tag(href) escaped_href = CGI.escape(href) # account for non-ASCII characters - %Q{<a id="user-content-#{href}" class="anchor" href="##{escaped_href}" aria-hidden="true"></a>} + %{<a id="user-content-#{href}" class="anchor" href="##{escaped_href}" aria-hidden="true"></a>} end def push_toc(children, root: false) @@ -69,7 +69,7 @@ module Banzai end def push_anchor(header_node) - result[:toc] << %Q{<li><a href="##{header_node.href}">#{header_node.text}</a>} + result[:toc] << %{<li><a href="##{header_node.href}">#{header_node.text}</a>} push_toc(header_node.children) result[:toc] << '</li>' end diff --git a/lib/banzai/issuable_extractor.rb b/lib/banzai/issuable_extractor.rb index 6428f71eb8f..c0eb159d517 100644 --- a/lib/banzai/issuable_extractor.rb +++ b/lib/banzai/issuable_extractor.rb @@ -48,7 +48,7 @@ module Banzai end def query - %Q( + %( descendant-or-self::a[contains(concat(" ", @class, " "), " gfm ")] [#{reference_types.join(' or ')}] ) diff --git a/lib/gitlab/authorized_keys.rb b/lib/gitlab/authorized_keys.rb index e7eba65bea8..3e529a0d2f3 100644 --- a/lib/gitlab/authorized_keys.rb +++ b/lib/gitlab/authorized_keys.rb @@ -149,7 +149,7 @@ module Gitlab raise KeyError, "Invalid public_key: #{key.inspect}" end - %Q(command="#{command(id)}",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty #{strip(key)}) + %(command="#{command(id)}",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty #{strip(key)}) end def command(id) diff --git a/lib/gitlab/etag_caching/middleware.rb b/lib/gitlab/etag_caching/middleware.rb index 7aabf699a59..786a68c86f2 100644 --- a/lib/gitlab/etag_caching/middleware.rb +++ b/lib/gitlab/etag_caching/middleware.rb @@ -57,7 +57,7 @@ module Gitlab end def weak_etag_format(value) - %Q{W/"#{value}"} + %{W/"#{value}"} end def handle_cache_hit(etag, route, request) diff --git a/lib/gitlab/etag_caching/router/rails.rb b/lib/gitlab/etag_caching/router/rails.rb index 2924370f494..5fd592c43e4 100644 --- a/lib/gitlab/etag_caching/router/rails.rb +++ b/lib/gitlab/etag_caching/router/rails.rb @@ -17,7 +17,7 @@ module Gitlab new environments].freeze RESERVED_WORDS = Gitlab::PathRegex::ILLEGAL_PROJECT_PATH_WORDS - USED_IN_ROUTES RESERVED_WORDS_REGEX = Regexp.union(*RESERVED_WORDS.map(&Regexp.method(:escape))) - RESERVED_WORDS_PREFIX = %Q(^(?!.*\/(#{RESERVED_WORDS_REGEX})\/).*) + RESERVED_WORDS_PREFIX = %(^(?!.*\/(#{RESERVED_WORDS_REGEX})\/).*) ROUTES = [ [ diff --git a/lib/gitlab/gl_repository/identifier.rb b/lib/gitlab/gl_repository/identifier.rb index f521a14ea19..787e80fb763 100644 --- a/lib/gitlab/gl_repository/identifier.rb +++ b/lib/gitlab/gl_repository/identifier.rb @@ -23,7 +23,7 @@ module Gitlab return identifier if identifier&.valid? - raise InvalidIdentifier, %Q(Invalid GL Repository "#{gl_repository}") + raise InvalidIdentifier, %(Invalid GL Repository "#{gl_repository}") end # The older 2-segment format, where the container is implied. diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb index cc214d730fe..d7d262501de 100644 --- a/lib/gitlab/import_export/repo_restorer.rb +++ b/lib/gitlab/import_export/repo_restorer.rb @@ -42,7 +42,7 @@ module Gitlab def ensure_repository_does_not_exist! if repository.exists? shared.logger.info( - message: %Q{Deleting existing "#{repository.disk_path}" to re-import it.} + message: %{Deleting existing "#{repository.disk_path}" to re-import it.} ) Repositories::DestroyService.new(repository).execute diff --git a/lib/kramdown/parser/atlassian_document_format.rb b/lib/kramdown/parser/atlassian_document_format.rb index d27697a59a6..5a481042b15 100644 --- a/lib/kramdown/parser/atlassian_document_format.rb +++ b/lib/kramdown/parser/atlassian_document_format.rb @@ -219,8 +219,8 @@ module Kramdown # opportunity to replace it later. Mention name can have # spaces, so double quote it mention_text = ast_node.dig('attrs', 'text')&.gsub('@', '') - mention_text = %Q("#{mention_text}") if mention_text&.include?(' ') - mention_text = %Q(@adf-mention:#{mention_text}) + mention_text = %("#{mention_text}") if mention_text&.include?(' ') + mention_text = %(@adf-mention:#{mention_text}) add_text(mention_text, element, :text) end diff --git a/lib/tasks/tanuki_emoji.rake b/lib/tasks/tanuki_emoji.rake index b02d7a532c4..de2ae656952 100644 --- a/lib/tasks/tanuki_emoji.rake +++ b/lib/tasks/tanuki_emoji.rake @@ -157,9 +157,9 @@ namespace :tanuki_emoji do # SpriteFactory's SCSS is a bit too verbose for our purposes here, so # let's simplify it - system(%Q(sed -i '' "s/width: #{SIZE}px; height: #{SIZE}px; background: image-url('emoji.png')/background-position:/" #{style_path})) - system(%Q(sed -i '' "s/ no-repeat//" #{style_path})) - system(%Q(sed -i '' "s/ 0px/ 0/g" #{style_path})) + system(%(sed -i '' "s/width: #{SIZE}px; height: #{SIZE}px; background: image-url('emoji.png')/background-position:/" #{style_path})) + system(%(sed -i '' "s/ no-repeat//" #{style_path})) + system(%(sed -i '' "s/ 0px/ 0/g" #{style_path})) # Append a generic rule that applies to all Emojis File.open(style_path, 'a') do |f| diff --git a/locale/gitlab.pot b/locale/gitlab.pot index a118014a0d4..7de8be43b77 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -873,9 +873,6 @@ msgstr "" msgid "%{linkStart} Learn more%{linkEnd}." msgstr "" -msgid "%{linkStart}%{name}%{linkEnd} triggered pipeline for commit" -msgstr "" - msgid "%{listToShow}, and %{awardsListLength} more" msgstr "" @@ -55098,6 +55095,9 @@ msgstr "" msgid "triggered" msgstr "" +msgid "triggered pipeline for commit %{linkStart}%{shortId}%{linkEnd}" +msgstr "" + msgid "two-factor authentication settings" msgstr "" diff --git a/package.json b/package.json index 03585ff772f..a66f636d8b9 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "@gitlab/cluster-client": "^1.2.0", "@gitlab/favicon-overlay": "2.0.0", "@gitlab/fonts": "^1.2.0", - "@gitlab/svgs": "3.51.0", + "@gitlab/svgs": "3.53.0", "@gitlab/ui": "64.2.3", "@gitlab/visual-review-tools": "1.7.3", "@gitlab/web-ide": "0.0.1-dev-20230524134151", diff --git a/scripts/regenerate-schema b/scripts/regenerate-schema index 06230942dcd..67c58339c6c 100755 --- a/scripts/regenerate-schema +++ b/scripts/regenerate-schema @@ -52,7 +52,7 @@ class SchemaRegenerator def checkout_ref return unless ci? - run %Q[git checkout #{source_ref}] + run %[git checkout #{source_ref}] run %q[git clean -f -- db] end @@ -71,8 +71,8 @@ class SchemaRegenerator return false unless project_url return false unless target_project_url - run %Q[git remote add target_project #{target_project_url}.git] - run %Q[git fetch target_project #{target_branch}:#{target_branch}] + run %[git remote add target_project #{target_project_url}.git] + run %[git fetch target_project #{target_branch}:#{target_branch}] local_checkout_clean_schema end @@ -83,8 +83,8 @@ class SchemaRegenerator # Ask git to checkout the schema from the target branch and reset # the file to unstage the changes. def local_checkout_clean_schema - run %Q[git checkout #{merge_base} -- #{FILENAME}] - run %Q[git reset -- #{FILENAME}] + run %[git checkout #{merge_base} -- #{FILENAME}] + run %[git reset -- #{FILENAME}] end ## diff --git a/scripts/trigger-build.rb b/scripts/trigger-build.rb index c7c09557ff9..89a2bf034cc 100755 --- a/scripts/trigger-build.rb +++ b/scripts/trigger-build.rb @@ -19,7 +19,7 @@ module Trigger def self.variables_for_env_file(variables) variables.map do |key, value| - %Q(#{key}=#{value}) + %(#{key}=#{value}) end.join("\n") end diff --git a/spec/controllers/groups/uploads_controller_spec.rb b/spec/controllers/groups/uploads_controller_spec.rb index 645360289d1..6649e8f057c 100644 --- a/spec/controllers/groups/uploads_controller_spec.rb +++ b/spec/controllers/groups/uploads_controller_spec.rb @@ -40,8 +40,8 @@ RSpec.describe Groups::UploadsController do let(:user) { create(:user) } let(:jpg) { fixture_file_upload('spec/fixtures/rails_sample.jpg', 'image/jpg') } let(:txt) { fixture_file_upload('spec/fixtures/doc_sample.txt', 'text/plain') } - let(:secret) { FileUploader.generate_secret } - let(:uploader_class) { FileUploader } + let(:uploader_class) { NamespaceFileUploader } + let(:secret) { uploader_class.generate_secret } let(:upload_service) do UploadService.new(model, jpg, uploader_class).execute @@ -52,9 +52,9 @@ RSpec.describe Groups::UploadsController do end before do - allow(FileUploader).to receive(:generate_secret).and_return(secret) + allow(uploader_class).to receive(:generate_secret).and_return(secret) - allow_next_instance_of(FileUploader) do |instance| + allow_next_instance_of(uploader_class) do |instance| allow(instance).to receive(:image?).and_return(true) end @@ -72,6 +72,40 @@ RSpec.describe Groups::UploadsController do expect(response).to have_gitlab_http_status(:ok) end + + context 'when uploader class does not match the upload' do + let(:uploader_class) { FileUploader } + + it 'responds with status 200 but logs a deprecation message' do + expect(Gitlab::AppJsonLogger).to receive(:info).with( + message: 'Deprecated usage of build_uploader_from_params', + uploader_class: uploader_class.name, + path: filename, + exists: true + ) + + show_upload + + expect(response).to have_gitlab_http_status(:ok) + end + end + + context 'when filename does not match' do + let(:invalid_filename) { 'invalid_filename.jpg' } + + it 'responds with status 404 and logs a deprecation message' do + expect(Gitlab::AppJsonLogger).to receive(:info).with( + message: 'Deprecated usage of build_uploader_from_params', + uploader_class: uploader_class.name, + path: invalid_filename, + exists: false + ) + + get :show, params: params.merge(secret: secret, filename: invalid_filename) + + expect(response).to have_gitlab_http_status(:not_found) + end + end end context "when signed in" do diff --git a/spec/factories/packages/helm/file_metadatum.rb b/spec/factories/packages/helm/file_metadatum.rb index 590956e5d49..a15f9f386d5 100644 --- a/spec/factories/packages/helm/file_metadatum.rb +++ b/spec/factories/packages/helm/file_metadatum.rb @@ -10,9 +10,9 @@ FactoryBot.define do sequence(:channel) { |n| "#{FFaker::Lorem.word}-#{n}" } metadata do { - 'name': package_file.package.name, - 'version': package_file.package.version, - 'apiVersion': 'v2' + name: package_file.package.name, + version: package_file.package.version, + apiVersion: 'v2' }.tap do |defaults| defaults['description'] = description if description end diff --git a/spec/factories/packages/npm/metadata.rb b/spec/factories/packages/npm/metadata.rb index c8acaa10199..dfdcc3409f9 100644 --- a/spec/factories/packages/npm/metadata.rb +++ b/spec/factories/packages/npm/metadata.rb @@ -6,11 +6,11 @@ FactoryBot.define do package_json do { - 'name': package.name, - 'version': package.version, - 'dist': { - 'tarball': 'http://localhost/tarball.tgz', - 'shasum': '1234567890' + name: package.name, + version: package.version, + dist: { + tarball: 'http://localhost/tarball.tgz', + shasum: '1234567890' } } end diff --git a/spec/frontend/jobs/components/job/stages_dropdown_spec.js b/spec/frontend/jobs/components/job/stages_dropdown_spec.js index 9d01dc50e96..c42edc62183 100644 --- a/spec/frontend/jobs/components/job/stages_dropdown_spec.js +++ b/spec/frontend/jobs/components/job/stages_dropdown_spec.js @@ -1,4 +1,4 @@ -import { GlDropdown, GlDropdownItem, GlLink, GlSprintf } from '@gitlab/ui'; +import { GlDisclosureDropdown, GlLink, GlSprintf } from '@gitlab/ui'; import { shallowMount } from '@vue/test-utils'; import { Mousetrap } from '~/lib/mousetrap'; import { extendedWrapper } from 'helpers/vue_test_utils_helper'; @@ -16,8 +16,8 @@ describe('Stages Dropdown', () => { let wrapper; const findStatus = () => wrapper.findComponent(CiIcon); - const findSelectedStageText = () => wrapper.findComponent(GlDropdown).props('text'); - const findStageItem = (index) => wrapper.findAllComponents(GlDropdownItem).at(index); + const findDropdown = () => wrapper.findComponent(GlDisclosureDropdown); + const findSelectedStageText = () => findDropdown().props('toggleText'); const findPipelineInfoText = () => wrapper.findByTestId('pipeline-info').text(); @@ -50,10 +50,13 @@ describe('Stages Dropdown', () => { }); it('renders dropdown with stages', () => { - expect(findStageItem(0).text()).toBe('build'); + expect(findDropdown().props('items')).toEqual([ + expect.objectContaining({ text: 'build' }), + expect.objectContaining({ text: 'test' }), + ]); }); - it('rendes selected stage', () => { + it('renders selected stage', () => { expect(findSelectedStageText()).toBe('deploy'); }); }); diff --git a/spec/frontend/pipelines/pipeline_details_header_spec.js b/spec/frontend/pipelines/pipeline_details_header_spec.js index 828c90211ec..18ae7454a7b 100644 --- a/spec/frontend/pipelines/pipeline_details_header_spec.js +++ b/spec/frontend/pipelines/pipeline_details_header_spec.js @@ -1,9 +1,10 @@ -import { GlAlert, GlBadge, GlLoadingIcon, GlModal } from '@gitlab/ui'; +import { GlAlert, GlBadge, GlLoadingIcon, GlModal, GlSprintf } from '@gitlab/ui'; import Vue, { nextTick } from 'vue'; import VueApollo from 'vue-apollo'; import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import createMockApollo from 'helpers/mock_apollo_helper'; import waitForPromises from 'helpers/wait_for_promises'; +import { getIdFromGraphQLId } from '~/graphql_shared/utils'; import PipelineDetailsHeader from '~/pipelines/components/pipeline_details_header.vue'; import { BUTTON_TOOLTIP_RETRY, BUTTON_TOOLTIP_CANCEL } from '~/pipelines/constants'; import TimeAgo from '~/pipelines/components/pipelines_list/time_ago.vue'; @@ -69,6 +70,7 @@ describe('Pipeline details header', () => { const findCancelButton = () => wrapper.findByTestId('cancel-pipeline'); const findDeleteButton = () => wrapper.findByTestId('delete-pipeline'); const findDeleteModal = () => wrapper.findComponent(GlModal); + const findPipelineUserLink = () => wrapper.findByTestId('pipeline-user-link'); const defaultHandlers = [[getPipelineDetailsQuery, successHandler]]; @@ -123,6 +125,7 @@ describe('Pipeline details header', () => { }, }, }, + stubs: { GlSprintf }, apolloProvider: createMockApolloProvider(handlers), }); }; @@ -177,6 +180,23 @@ describe('Pipeline details header', () => { it('displays ref text', () => { expect(findPipelineRefText()).toBe('Related merge request !1 to merge test'); }); + + it('displays pipeline user link with required user popover attributes', () => { + const { + data: { + project: { + pipeline: { user }, + }, + }, + } = pipelineHeaderSuccess; + + const userId = getIdFromGraphQLId(user.id).toString(); + + expect(findPipelineUserLink().classes()).toContain('js-user-link'); + expect(findPipelineUserLink().attributes('data-user-id')).toBe(userId); + expect(findPipelineUserLink().attributes('data-username')).toBe(user.username); + expect(findPipelineUserLink().attributes('href')).toBe(user.webUrl); + }); }); describe('without pipeline name', () => { diff --git a/spec/graphql/types/root_storage_statistics_type_spec.rb b/spec/graphql/types/root_storage_statistics_type_spec.rb index 5dde6aa8b14..56f58825db0 100644 --- a/spec/graphql/types/root_storage_statistics_type_spec.rb +++ b/spec/graphql/types/root_storage_statistics_type_spec.rb @@ -7,9 +7,9 @@ RSpec.describe GitlabSchema.types['RootStorageStatistics'] do it 'has all the required fields' do expect(described_class).to have_graphql_fields(:storage_size, :repository_size, :lfs_objects_size, - :build_artifacts_size, :packages_size, :wiki_size, :snippets_size, - :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size, - :container_registry_size, :registry_size_estimated) + :build_artifacts_size, :packages_size, :wiki_size, :snippets_size, + :pipeline_artifacts_size, :uploads_size, :dependency_proxy_size, + :container_registry_size, :registry_size_estimated) end specify { expect(described_class).to require_graphql_authorizations(:read_statistics) } diff --git a/spec/models/packages/helm/file_metadatum_spec.rb b/spec/models/packages/helm/file_metadatum_spec.rb index 995179b391d..516b3fad940 100644 --- a/spec/models/packages/helm/file_metadatum_spec.rb +++ b/spec/models/packages/helm/file_metadatum_spec.rb @@ -49,11 +49,11 @@ RSpec.describe Packages::Helm::FileMetadatum, type: :model do describe '#metadata' do it 'validates #metadata', :aggregate_failures do is_expected.not_to validate_presence_of(:metadata) - is_expected.to allow_value({ 'name': 'foo', 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata) + is_expected.to allow_value({ name: 'foo', version: 'v1.0', apiVersion: 'v2' }).for(:metadata) is_expected.not_to allow_value({}).for(:metadata) - is_expected.not_to allow_value({ 'version': 'v1.0', 'apiVersion': 'v2' }).for(:metadata) - is_expected.not_to allow_value({ 'name': 'foo', 'apiVersion': 'v2' }).for(:metadata) - is_expected.not_to allow_value({ 'name': 'foo', 'version': 'v1.0' }).for(:metadata) + is_expected.not_to allow_value({ version: 'v1.0', apiVersion: 'v2' }).for(:metadata) + is_expected.not_to allow_value({ name: 'foo', apiVersion: 'v2' }).for(:metadata) + is_expected.not_to allow_value({ name: 'foo', version: 'v1.0' }).for(:metadata) end end end diff --git a/spec/models/packages/npm/metadatum_spec.rb b/spec/models/packages/npm/metadatum_spec.rb index 92daddded7e..418194bffdd 100644 --- a/spec/models/packages/npm/metadatum_spec.rb +++ b/spec/models/packages/npm/metadatum_spec.rb @@ -25,7 +25,7 @@ RSpec.describe Packages::Npm::Metadatum, type: :model, feature_category: :packag let(:valid_json) { { 'name' => 'foo', 'version' => 'v1.0', 'dist' => { 'tarball' => 'x', 'shasum' => 'x' } } } it { is_expected.to allow_value(valid_json).for(:package_json) } - it { is_expected.to allow_value(valid_json.merge('extra-field': { 'foo': 'bar' })).for(:package_json) } + it { is_expected.to allow_value(valid_json.merge('extra-field': { foo: 'bar' })).for(:package_json) } it { is_expected.to allow_value(with_dist { |dist| dist.merge('extra-field': 'x') }).for(:package_json) } %w[name version dist].each do |field| diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index a808c12a39a..4c6f1476481 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -805,6 +805,34 @@ RSpec.describe Snippet do include_examples 'size checker for snippet' end + describe '#hook_attrs' do + let_it_be(:snippet) { create(:personal_snippet, secret_token: 'foo') } + + subject(:attrs) { snippet.hook_attrs } + + it 'includes the expected attributes' do + is_expected.to match( + 'id' => snippet.id, + 'title' => snippet.title, + 'content' => snippet.content, + 'description' => snippet.description, + 'file_name' => snippet.file_name, + 'author_id' => snippet.author_id, + 'project_id' => snippet.project_id, + 'visibility_level' => snippet.visibility_level, + 'encrypted_secret_token' => snippet.encrypted_secret_token, + 'encrypted_secret_token_iv' => snippet.encrypted_secret_token_iv, + 'secret' => false, + 'secret_token' => nil, + 'repository_read_only' => snippet.repository_read_only?, + 'url' => Gitlab::UrlBuilder.build(snippet), + 'type' => 'PersonalSnippet', + 'created_at' => be_like_time(snippet.created_at), + 'updated_at' => be_like_time(snippet.updated_at) + ) + end + end + describe '#can_cache_field?' do using RSpec::Parameterized::TableSyntax diff --git a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb index cee698d6dc5..7c48f324d24 100644 --- a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb +++ b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb @@ -10,9 +10,11 @@ RSpec.describe 'rendering namespace statistics', feature_category: :metrics do let(:user) { create(:user) } let(:query) do - graphql_query_for('namespace', - { 'fullPath' => namespace.full_path }, - "rootStorageStatistics { #{all_graphql_fields_for('RootStorageStatistics')} }") + graphql_query_for( + 'namespace', + { 'fullPath' => namespace.full_path }, + "rootStorageStatistics { #{all_graphql_fields_for('RootStorageStatistics')} }" + ) end shared_examples 'a working namespace with storage statistics query' do diff --git a/spec/workers/packages/go/sync_packages_worker_spec.rb b/spec/workers/packages/go/sync_packages_worker_spec.rb index 5fdb7a242f6..08962de0805 100644 --- a/spec/workers/packages/go/sync_packages_worker_spec.rb +++ b/spec/workers/packages/go/sync_packages_worker_spec.rb @@ -73,7 +73,7 @@ RSpec.describe Packages::Go::SyncPackagesWorker, type: :worker, feature_category context 'with a package that exceeds project limits' do before do - Plan.default.actual_limits.update!({ 'golang_max_file_size': 1 }) + Plan.default.actual_limits.update!({ golang_max_file_size: 1 }) end it 'logs an exception' do diff --git a/workhorse/go.mod b/workhorse/go.mod index aecdf6d0c2d..8469ab67356 100644 --- a/workhorse/go.mod +++ b/workhorse/go.mod @@ -7,7 +7,7 @@ require ( github.com/BurntSushi/toml v1.3.0 github.com/FZambia/sentinel v1.1.1 github.com/alecthomas/chroma/v2 v2.7.0 - github.com/aws/aws-sdk-go v1.44.255 + github.com/aws/aws-sdk-go v1.44.256 github.com/disintegration/imaging v1.6.2 github.com/getsentry/raven-go v0.2.0 github.com/golang-jwt/jwt/v5 v5.0.0 @@ -17,7 +17,7 @@ require ( github.com/gorilla/websocket v1.5.0 github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 - github.com/johannesboyne/gofakes3 v0.0.0-20230310080033-c0edf658332b + github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877 github.com/jpillora/backoff v1.0.0 github.com/mitchellh/copystructure v1.2.0 github.com/prometheus/client_golang v1.15.1 @@ -33,7 +33,7 @@ require ( golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 golang.org/x/net v0.9.0 golang.org/x/oauth2 v0.5.0 - golang.org/x/tools v0.6.0 + golang.org/x/tools v0.8.0 google.golang.org/grpc v1.54.0 google.golang.org/protobuf v1.30.0 honnef.co/go/tools v0.3.3 @@ -111,7 +111,7 @@ require ( go.uber.org/atomic v1.10.0 // indirect golang.org/x/crypto v0.7.0 // indirect golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e // indirect - golang.org/x/mod v0.8.0 // indirect + golang.org/x/mod v0.10.0 // indirect golang.org/x/sync v0.2.0 // indirect golang.org/x/sys v0.8.0 // indirect golang.org/x/text v0.9.0 // indirect diff --git a/workhorse/go.sum b/workhorse/go.sum index 19e1c7f0f95..bb88da7f235 100644 --- a/workhorse/go.sum +++ b/workhorse/go.sum @@ -561,7 +561,6 @@ github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:W github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.33.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= @@ -569,8 +568,8 @@ github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4 github.com/aws/aws-sdk-go v1.44.156/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.187/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.44.200/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go v1.44.255 h1:tOd7OP5V6BeHhANksc7CFB/ILS2mHj3kRhTfZKFnsS0= -github.com/aws/aws-sdk-go v1.44.255/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go v1.44.256 h1:O8VH+bJqgLDguqkH/xQBFz5o/YheeZqgcOYIgsTVWY4= +github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2 v1.17.4 h1:wyC6p9Yfq6V2y98wfDsj6OnNQa4w2BLGCLIxzNhwOGY= github.com/aws/aws-sdk-go-v2 v1.17.4/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= @@ -994,7 +993,6 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= github.com/go-stack/stack v1.6.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -1374,14 +1372,13 @@ github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJk github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= -github.com/johannesboyne/gofakes3 v0.0.0-20230310080033-c0edf658332b h1:dRMf9/2xfp4tky4wnvFxsMQz78n92VeqDIxR27uass4= -github.com/johannesboyne/gofakes3 v0.0.0-20230310080033-c0edf658332b/go.mod h1:Cnosl0cRZIfKjTMuH49sQog2LeNsU5Hf4WnPIDWIDV0= +github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877 h1:O7syWuYGzre3s73s+NkgB8e0ZvsIVhT/zxNU7V1gHK8= +github.com/johannesboyne/gofakes3 v0.0.0-20230506070712-04da935ef877/go.mod h1:AxgWC4DDX54O2WDoQO1Ceabtn6IbktjU/7bigor+66g= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= @@ -1776,7 +1773,6 @@ github.com/sebest/xff v0.0.0-20210106013422-671bd2870b3a h1:iLcLb5Fwwz7g/DLK89F+ github.com/sebest/xff v0.0.0-20210106013422-671bd2870b3a/go.mod h1:wozgYq9WEBQBaIJe4YZ0qTSFAMxmcwBhQH0fO0R34Z0= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 h1:WnNuhiq+FOY3jNj6JXFT+eLN3CQ/oPIsDPRanvwsmbI= github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500/go.mod h1:+njLrG5wSeoG4Ds61rFgEzKvenR2UHbjMoDHsczxly0= github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw= @@ -2144,8 +2140,9 @@ golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -2445,6 +2442,7 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.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.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -2457,6 +2455,7 @@ golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= 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/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= @@ -2496,7 +2495,6 @@ golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190308174544-00c44ba9c14f/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -2578,8 +2576,9 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y= +golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/yarn.lock b/yarn.lock index 1198913d1ec..5b2a6bcad5e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1122,10 +1122,10 @@ stylelint-declaration-strict-value "1.8.0" stylelint-scss "4.2.0" -"@gitlab/svgs@3.51.0": - version "3.51.0" - resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-3.51.0.tgz#c6d63c7e16b71b167662696662efc1b0587acaaf" - integrity sha512-IyMcZsLJ7AYoyHhWimHKsP/Swk0MlOLxHxgP9kp8Nc/xPC8p/JRVzlWU9vehSTcoYzu55alnKYABJe4fhUw2aQ== +"@gitlab/svgs@3.53.0": + version "3.53.0" + resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-3.53.0.tgz#6f952e59db6a3ebb59f034c240d7001a2dc8a92d" + integrity sha512-WgDZtl3ZmZgP0Fw62/YnNH/VjJbCp0bTU+qaBudic7T/ohu/Ex11RBcwakJyUZ5KWueFChGkulWKxVZz9baaDA== "@gitlab/ui@64.2.3": version "64.2.3" |