Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-06-07 21:09:51 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-06-07 21:09:51 +0300
commit9ee2305f46a2b3d1d1e8a1f1182512599a74dbe1 (patch)
tree82c0631433839156f7d2fa88a5026c385b2b5703
parent9498dc957345829f29fe0bc4e55c969783b457be (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitlab/CODEOWNERS3
-rw-r--r--.gitlab/ci/qa.gitlab-ci.yml2
-rw-r--r--.rubocop_todo/layout/argument_alignment.yml2
-rw-r--r--.rubocop_todo/lint/symbol_conversion.yml8
-rw-r--r--.rubocop_todo/style/bare_percent_literals.yml21
-rw-r--r--app/assets/javascripts/jobs/components/job/sidebar/stages_dropdown.vue25
-rw-r--r--app/assets/javascripts/pipelines/components/pipeline_details_header.vue35
-rw-r--r--app/controllers/concerns/uploads_actions.rb8
-rw-r--r--app/models/commit.rb4
-rw-r--r--app/models/concerns/storage/legacy_namespace.rb2
-rw-r--r--app/models/integrations/datadog.rb2
-rw-r--r--app/models/snippet.rb2
-rw-r--r--app/services/feature_flags/base_service.rb4
-rw-r--r--app/services/merge_requests/merge_service.rb6
-rw-r--r--app/services/packages/debian/generate_distribution_key_service.rb2
-rw-r--r--app/services/packages/debian/process_changes_service.rb6
-rw-r--r--app/services/repositories/base_service.rb2
-rw-r--r--doc/administration/sidekiq/sidekiq_troubleshooting.md4
-rw-r--r--doc/development/code_review.md40
-rw-r--r--doc/development/documentation/styleguide/index.md54
-rw-r--r--doc/development/internal_api/index.md2
-rw-r--r--doc/integration/advanced_search/elasticsearch_troubleshooting.md38
-rw-r--r--doc/user/admin_area/settings/scim_setup.md10
-rw-r--r--doc/user/project/integrations/webhook_events.md5
-rw-r--r--doc/user/project/protected_branches.md43
-rw-r--r--lib/banzai/filter/autolink_filter.rb2
-rw-r--r--lib/banzai/filter/references/reference_filter.rb4
-rw-r--r--lib/banzai/filter/spaced_link_filter.rb2
-rw-r--r--lib/banzai/filter/table_of_contents_filter.rb4
-rw-r--r--lib/banzai/issuable_extractor.rb2
-rw-r--r--lib/gitlab/authorized_keys.rb2
-rw-r--r--lib/gitlab/etag_caching/middleware.rb2
-rw-r--r--lib/gitlab/etag_caching/router/rails.rb2
-rw-r--r--lib/gitlab/gl_repository/identifier.rb2
-rw-r--r--lib/gitlab/import_export/repo_restorer.rb2
-rw-r--r--lib/kramdown/parser/atlassian_document_format.rb4
-rw-r--r--lib/tasks/tanuki_emoji.rake6
-rw-r--r--locale/gitlab.pot6
-rw-r--r--package.json2
-rwxr-xr-xscripts/regenerate-schema10
-rwxr-xr-xscripts/trigger-build.rb2
-rw-r--r--spec/controllers/groups/uploads_controller_spec.rb42
-rw-r--r--spec/factories/packages/helm/file_metadatum.rb6
-rw-r--r--spec/factories/packages/npm/metadata.rb10
-rw-r--r--spec/frontend/jobs/components/job/stages_dropdown_spec.js13
-rw-r--r--spec/frontend/pipelines/pipeline_details_header_spec.js22
-rw-r--r--spec/graphql/types/root_storage_statistics_type_spec.rb6
-rw-r--r--spec/models/packages/helm/file_metadatum_spec.rb8
-rw-r--r--spec/models/packages/npm/metadatum_spec.rb2
-rw-r--r--spec/models/snippet_spec.rb28
-rw-r--r--spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb8
-rw-r--r--spec/workers/packages/go/sync_packages_worker_spec.rb2
-rw-r--r--workhorse/go.mod8
-rw-r--r--workhorse/go.sum21
-rw-r--r--yarn.lock8
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"