Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot 2023-12-19 03:21:36 +00:00
parent f3b2c53677
commit eba7329faa
56 changed files with 147 additions and 119 deletions

View File

@ -10,6 +10,11 @@ especially important if they didn't participate in the discussion.
%{first_multiline_commit}
## MR acceptance checklist
**Please evaluate this MR against the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist).**
It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
## Screenshots or screen recordings
_Screenshots are required for UI changes, and strongly recommended for all other merge requests._
@ -39,12 +44,6 @@ Example below:
1. Click the `invite members` button.
-->
## MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
* [ ] I have evaluated the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist) for this MR.
<!-- template sourced from https://gitlab.com/gitlab-org/gitlab/-/blob/master/.gitlab/merge_request_templates/Default.md -->
/assign me

View File

@ -37,9 +37,8 @@ This MR can be reused to upgrade `gitlab-styles` in this project after a new ver
## MR acceptance checklist
This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.
- [ ] I have evaluated the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist) for this MR.
**Please evaluate this MR against the [MR acceptance checklist](https://docs.gitlab.com/ee/development/code_review.html#acceptance-checklist).**
It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.
## After merge

View File

@ -159,7 +159,7 @@ export default {
search: {
deep: true,
handler() {
// TODO Implement back button reponse using onpopstate
// TODO Implement back button response using onpopstate
// See https://gitlab.com/gitlab-org/gitlab/-/issues/333804
updateHistory({
url: fromSearchToUrl(this.search),

View File

@ -279,7 +279,7 @@ module MergeRequestsHelper
target_branch = link_to merge_request.target_branch, project_tree_path(merge_request.target_project, merge_request.target_branch), title: merge_request.target_branch, class: 'ref-container gl-display-inline-block gl-text-truncate gl-max-w-26 gl-mx-2'
safe_format('%{author} • %{source_branch} %{copy_button} ➔ %{target_branch} %{created_at}', author: link_to_author, source_branch: merge_request_source_branch(merge_request), copy_button: copy_button, target_branch: target_branch, created_at: time_ago_with_tooltip(merge_request.created_at, html_class: 'gl-display-inline-block'))
_('%{author} requested to merge %{source_branch} %{copy_button} into %{target_branch} %{created_at}').html_safe % { author: link_to_author.html_safe, source_branch: merge_request_source_branch(merge_request).html_safe, copy_button: copy_button.html_safe, target_branch: target_branch.html_safe, created_at: time_ago_with_tooltip(merge_request.created_at, html_class: 'gl-display-inline-block').html_safe }
end
def sticky_header_data

View File

@ -618,12 +618,11 @@ class ContainerRepository < ApplicationRecord
self.new(project: path.repository_project, name: path.repository_name)
end
def self.find_or_create_from_path(path)
repository = safe_find_or_create_by(
project: path.repository_project,
def self.find_or_create_from_path!(path)
ContainerRepository.upsert({
project_id: path.repository_project.id,
name: path.repository_name
)
return repository if repository.persisted?
}, unique_by: %i[project_id name])
find_by_path!(path)
end

View File

@ -231,7 +231,7 @@ module Auth
return if path.has_repository?
return unless actions.include?('push')
ContainerRepository.find_or_create_from_path(path)
ContainerRepository.find_or_create_from_path!(path)
end
# Overridden in EE

View File

@ -25,7 +25,7 @@ module Import
# Creates a project with the strategy parameters
#
# @return [Services::ServiceReponse]
# @return [Services::ServiceResponse]
def execute
return error(errors.full_messages) unless valid?
return error(project.errors.full_messages) unless project.saved?

View File

@ -1,6 +1,6 @@
.gl-md-ml-3.dropdown.gl-dropdown{ class: "gl-display-none! gl-md-display-flex!" }
#js-check-out-modal{ data: how_merge_modal_data(@merge_request) }
= button_tag type: 'button', class: "btn dropdown-toggle btn-confirm-secondary gl-button gl-dropdown-toggle", data: { toggle: 'dropdown', testid: 'mr-code-dropdown' } do
= button_tag type: 'button', class: "btn dropdown-toggle btn-confirm gl-button gl-dropdown-toggle", data: { toggle: 'dropdown', testid: 'mr-code-dropdown' } do
%span.gl-dropdown-button-text= _('Code')
= sprite_icon "chevron-down", size: 16, css_class: "dropdown-icon gl-icon gl-ml-2 gl-mr-0!"
.dropdown-menu.dropdown-menu-right

View File

@ -16,6 +16,7 @@ module Gitlab
feature_category :importers
worker_has_external_dependencies!
sidekiq_options retry: 5
sidekiq_retries_exhausted do |msg|
args = msg['args']
jid = msg['jid']

View File

@ -14,7 +14,7 @@ module Gitlab
# the dead queue. This does mean some resources may not be imported, but
# this is better than a project being stuck in the "import" state
# forever.
sidekiq_options dead: false, retry: 5
sidekiq_options dead: false
end
end
end

View File

@ -9,6 +9,9 @@ module Gitlab
included do
include ApplicationWorker
include GithubImport::Queue
sidekiq_options retry: 6
sidekiq_options status_expiration: Gitlab::Import::StuckImportJob::IMPORT_JOBS_EXPIRATION

View File

@ -11,12 +11,15 @@ module Gitlab
data_consistency :always
sidekiq_options retry: 3
include ::Gitlab::Import::AdvanceStage
sidekiq_options dead: false
feature_category :importers
loggable_arguments 1, 2
sidekiq_options retry: 6
# TODO: Allow this class to include GithubImport::Queue and remove
# the following two lines https://gitlab.com/gitlab-org/gitlab/-/issues/435622
feature_category :importers
sidekiq_options dead: false
# The known importer stages and their corresponding Sidekiq workers.
STAGES = {

View File

@ -9,6 +9,8 @@ module Gitlab
include GithubImport::Queue
sidekiq_options retry: 5
# The interval to schedule new instances of this job at.
INTERVAL = 5.minutes.to_i

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# project - An instance of Project.

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# These importers are fast enough that we can just run them in the same

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# client - An instance of Gitlab::GithubImport::Client.

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# Importer::LfsObjectsImporter can resume work when interrupted as

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# client - An instance of Gitlab::GithubImport::Client.

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
resumes_work_when_interrupted!

View File

@ -8,7 +8,6 @@ module Gitlab
data_consistency :always
include GithubImport::Queue
include StageMethods
# client - An instance of Gitlab::GithubImport::Client.

View File

@ -6,7 +6,7 @@ feature_categories:
- database
description: >-
The batched_background_migrations table stores information about the batched background migrations present in the system.
See https://docs.gitlab.com/ee/development/batched_background_migrations.html for more details.
See https://docs.gitlab.com/ee/development/database/batched_background_migrations.html for more details.
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/54628
milestone: '13.10'
gitlab_schema: gitlab_shared

View File

@ -67,6 +67,8 @@ is used.
To prevent artifacts from expiring, you can select **Keep** from the job details page.
The option is not available when an artifact has no expiry set.
By default, the [latest artifacts are always kept](#keep-artifacts-from-most-recent-successful-jobs).
### With a dynamically defined name
You can use [CI/CD variables](../variables/index.md) to dynamically define the
@ -331,15 +333,21 @@ With this configuration, GitLab adds **artifact 1** as a link to `file.txt` to t
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/16267) in GitLab 13.0.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/229936) in GitLab 13.4.
> - [Made optional with a CI/CD setting](https://gitlab.com/gitlab-org/gitlab/-/issues/241026) in GitLab 13.8.
> - Artifacts for [blocked](https://gitlab.com/gitlab-org/gitlab/-/issues/387087) or [failed](https://gitlab.com/gitlab-org/gitlab/-/issues/266958) pipelines no longer kept indefinitely in GitLab 16.7.
By default artifacts are always kept for successful pipelines for the most recent commit on
each ref. This means that the latest artifacts do not immediately expire according
to the `expire_in` configuration.
By default artifacts are always kept for successful pipelines for the most recent commit on each ref.
Any [`expire_in`](#with-an-expiry) configuration does not apply to the most recent artifacts.
If a pipeline for a new commit on the same ref completes successfully, the previous pipeline's
artifacts are deleted according to the `expire_in` configuration. The artifacts
of the new pipeline are kept automatically. If multiple pipelines run for the most
recent commit on the ref, all artifacts are kept.
A pipeline's artifacts are only deleted according to the `expire_in` configuration
if a new pipeline runs for the same ref and:
- Succeeds.
- Fails.
- Stops running due to being blocked by a manual job.
Additionally, artifacts are kept for the ref's last successful pipeline even if it
is not the latest pipeline. As a result, if a new pipeline run fails, the last successful pipeline's
artifacts are still kept.
Keeping the latest artifacts can use a large amount of storage space in projects
with a lot of jobs or large artifacts. If the latest artifacts are not needed in
@ -356,7 +364,3 @@ Then the artifacts in the earlier pipeline for that ref are allowed to expire to
You can disable this behavior for all projects on a self-managed instance in the
[instance's CI/CD settings](../../administration/settings/continuous_integration.md#keep-the-latest-artifacts-for-all-jobs-in-the-latest-successful-pipelines).
When **Keep artifacts from most recent successful jobs** is enabled, artifacts are always kept for [blocked](job_control.md#types-of-manual-jobs)
pipelines. These artifacts expire only after the blocking job is triggered and the pipeline completes.
[Issue 387087](https://gitlab.com/gitlab-org/gitlab/-/issues/387087) proposes to change this behavior.

View File

@ -231,6 +231,8 @@ Efforts to improve this are in:
#### Acceptance checklist
<!-- When editing, remember to announce the change to Engineering Division -->
This checklist encourages the authors, reviewers, and maintainers of merge requests (MRs) to confirm changes were analyzed for high-impact risks to quality, performance, reliability, security, observability, and maintainability.
Using checklists improves quality in software engineering. This checklist is a straightforward tool to support and bolster the skills of contributors to the GitLab codebase.

View File

@ -294,7 +294,7 @@ requirements.
### Approval
1. The [MR acceptance checklist](../code_review.md#acceptance-checklist) has been checked as confirmed in the MR.
1. The MR was evaluated against the [MR acceptance checklist](../code_review.md#acceptance-checklist).
1. Create an issue in the [infrastructure issue tracker](https://gitlab.com/gitlab-com/gl-infra/reliability/-/issues) to inform the Infrastructure department when your contribution is changing default settings or introduces a new setting, if relevant.
1. An agreed-upon [rollout plan](https://about.gitlab.com/handbook/engineering/development/processes/rollout-plans/).
1. Reviewed by relevant reviewers, and all concerns are addressed for Availability, Regressions, and Security. Documentation reviews should take place as soon as possible, but they should not block a merge request.

View File

@ -1,5 +1,5 @@
variables:
DAST_AUTO_DEPLOY_IMAGE_VERSION: 'v2.70.0'
DAST_AUTO_DEPLOY_IMAGE_VERSION: 'v2.71.0'
.dast-auto-deploy:
image: "${CI_TEMPLATE_REGISTRY_HOST}/gitlab-org/cluster-integration/auto-deploy-image:${DAST_AUTO_DEPLOY_IMAGE_VERSION}"

View File

@ -1,5 +1,5 @@
variables:
AUTO_DEPLOY_IMAGE_VERSION: 'v2.70.0'
AUTO_DEPLOY_IMAGE_VERSION: 'v2.71.0'
.auto-deploy:
image: "${CI_TEMPLATE_REGISTRY_HOST}/gitlab-org/cluster-integration/auto-deploy-image:${AUTO_DEPLOY_IMAGE_VERSION}"

View File

@ -1,5 +1,5 @@
variables:
AUTO_DEPLOY_IMAGE_VERSION: 'v2.70.0'
AUTO_DEPLOY_IMAGE_VERSION: 'v2.71.0'
.auto-deploy:
image: "${CI_TEMPLATE_REGISTRY_HOST}/gitlab-org/cluster-integration/auto-deploy-image:${AUTO_DEPLOY_IMAGE_VERSION}"

View File

@ -550,6 +550,9 @@ msgstr ""
msgid "%{author} has added you as an approver."
msgstr ""
msgid "%{author} requested to merge %{source_branch} %{copy_button} into %{target_branch} %{created_at}"
msgstr ""
msgid "%{board_target} not found"
msgstr ""
@ -5359,6 +5362,9 @@ msgid_plural "An error occurred while saving the settings"
msgstr[0] ""
msgstr[1] ""
msgid "An error occurred while saving the settings."
msgstr ""
msgid "An error occurred while saving your settings. Try saving them again."
msgstr ""
@ -45335,6 +45341,9 @@ msgstr ""
msgid "Settings for the License Compliance feature"
msgstr ""
msgid "Settings saved successfully."
msgstr ""
msgid "Settings|Enable this feature allows you to add customized CI YAML file to run as part of the policies action. This features is your acceptance of the %{link_start}GitLab Testing Agreement%{link_end}."
msgstr ""

View File

@ -255,7 +255,7 @@
"chokidar": "^3.5.3",
"commander": "^2.20.3",
"custom-jquery-matchers": "^2.1.0",
"eslint": "8.55.0",
"eslint": "8.56.0",
"eslint-import-resolver-jest": "3.0.2",
"eslint-import-resolver-webpack": "0.13.8",
"eslint-plugin-import": "^2.29.1",

View File

@ -2,7 +2,7 @@
source 'https://rubygems.org'
gem 'gitlab-qa', '~> 13', require: 'gitlab/qa'
gem 'gitlab-qa', '~> 13', '>= 13.1.0', require: 'gitlab/qa'
gem 'gitlab_quality-test_tooling', '~> 1.9.0', require: false
gem 'gitlab-utils', path: '../gems/gitlab-utils'
gem 'activesupport', '~> 7.0.8' # This should stay in sync with the root's Gemfile

View File

@ -120,7 +120,7 @@ GEM
gitlab (4.19.0)
httparty (~> 0.20)
terminal-table (>= 1.5.1)
gitlab-qa (13.0.0)
gitlab-qa (13.1.0)
activesupport (>= 6.1, < 7.1)
gitlab (~> 4.19)
http (~> 5.0)
@ -359,7 +359,7 @@ DEPENDENCIES
faraday-retry (~> 2.2)
fog-core (= 2.1.0)
fog-google (~> 1.19)
gitlab-qa (~> 13)
gitlab-qa (~> 13, >= 13.1.0)
gitlab-utils!
gitlab_quality-test_tooling (~> 1.9.0)
influxdb-client (~> 3.0)

View File

@ -25,7 +25,7 @@ module QA
File.binwrite(private_key_file, key.private_key)
File.chmod(0700, private_key_file)
keyscan_params = ['-H']
keyscan_params = ['-T 60 -H']
keyscan_params << "-p #{uri_port}" if uri_port
keyscan_params << uri.host

View File

@ -59,8 +59,8 @@ RSpec.describe QA::Support::SSH do
end
describe '#setup' do
let(:expected_ssh_command_no_port) { "ssh-keyscan -H foo.com >> #{known_hosts_file.path}" }
let(:expected_ssh_command_port) { "ssh-keyscan -H -p #{port} foo.com >> #{known_hosts_file.path}" }
let(:expected_ssh_command_no_port) { "ssh-keyscan -T 60 -H foo.com >> #{known_hosts_file.path}" }
let(:expected_ssh_command_port) { "ssh-keyscan -T 60 -H -p #{port} foo.com >> #{known_hosts_file.path}" }
let(:call_method) { ssh.setup }
before do

View File

@ -98,7 +98,7 @@ RSpec.describe 'User creates a merge request', :js, feature_category: :code_revi
click_button('Create merge request')
expect(page).to have_content(title).and have_content("#{forked_project.full_path}:fix ➔ master")
expect(page).to have_content(title).and have_content("requested to merge #{forked_project.full_path}:fix into master")
end
end
end

View File

@ -95,7 +95,7 @@ RSpec.describe 'User edits a merge request', :js, feature_category: :code_review
click_button('Save changes')
expect(page).to have_content("#{merge_request.source_branch} merge-test")
expect(page).to have_content("requested to merge #{merge_request.source_branch} into merge-test")
expect(page).to have_content("changed target branch from #{merge_request.target_branch} to merge-test")
end

View File

@ -339,11 +339,24 @@ RSpec.describe 'Signup', :js, feature_category: :user_management do
end
context 'when invisible captcha detects malicious behaviour' do
it 'prevents from signing up' do
visit new_user_registration_path
context 'with form submitted quicker than timestamp_threshold', :freeze_time do
it 'prevents from signing up' do
visit new_user_registration_path
expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
expect(page).to have_content('That was a bit too quick! Please resubmit.')
expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
expect(page).to have_content('That was a bit too quick! Please resubmit.')
end
end
context 'with honeypot field is filled' do
it 'prevents from signing up' do
visit new_user_registration_path
find_field('If you are human, please ignore this field.',
visible: false).execute_script("this.value = 'bot'")
expect { fill_in_sign_up_form(new_user) }.not_to change { User.count }
end
end
end
end

View File

@ -258,7 +258,7 @@ describe('Badges store actions', () => {
it('dispatches requestLoadBadges and receiveLoadBadges for successful response', async () => {
const dummyData = 'this is just some data';
const dummyReponse = [
const dummyResponse = [
createDummyBadgeResponse(),
createDummyBadgeResponse(),
createDummyBadgeResponse(),
@ -266,11 +266,11 @@ describe('Badges store actions', () => {
endpointMock.replyOnce(() => {
expect(dispatch.mock.calls).toEqual([['requestLoadBadges', dummyData]]);
dispatch.mockClear();
return [HTTP_STATUS_OK, dummyReponse];
return [HTTP_STATUS_OK, dummyResponse];
});
await actions.loadBadges({ state, dispatch }, dummyData);
const badges = dummyReponse.map(transformBackendBadge);
const badges = dummyResponse.map(transformBackendBadge);
expect(dispatch.mock.calls).toEqual([['receiveLoadBadges', badges]]);
});
@ -377,15 +377,15 @@ describe('Badges store actions', () => {
});
it('dispatches requestRenderedBadge and receiveRenderedBadge for successful response', async () => {
const dummyReponse = createDummyBadgeResponse();
const dummyResponse = createDummyBadgeResponse();
endpointMock.replyOnce(() => {
expect(dispatch.mock.calls).toEqual([['requestRenderedBadge']]);
dispatch.mockClear();
return [HTTP_STATUS_OK, dummyReponse];
return [HTTP_STATUS_OK, dummyResponse];
});
await actions.renderBadge({ state, dispatch });
const renderedBadge = transformBackendBadge(dummyReponse);
const renderedBadge = transformBackendBadge(dummyResponse);
expect(dispatch.mock.calls).toEqual([['receiveRenderedBadge', renderedBadge]]);
});

View File

@ -306,14 +306,14 @@ RSpec.describe BulkImports::Pipeline::Runner, feature_category: :importers do
allow(extractor).to receive(:extract).with(context).and_raise(
BulkImports::NetworkError.new(
'Net::ReadTimeout',
response: instance_double(HTTParty::Response, code: reponse_status_code, headers: {})
response: instance_double(HTTParty::Response, code: response_status_code, headers: {})
)
)
end
end
context 'when exception is retriable' do
let(:reponse_status_code) { 429 }
let(:response_status_code) { 429 }
it 'raises the exception BulkImports::RetryPipelineError' do
expect { subject.run }.to raise_error(BulkImports::RetryPipelineError)
@ -321,7 +321,7 @@ RSpec.describe BulkImports::Pipeline::Runner, feature_category: :importers do
end
context 'when exception is not retriable' do
let(:reponse_status_code) { 505 }
let(:response_status_code) { 505 }
it_behaves_like 'failed pipeline', 'BulkImports::NetworkError', 'Net::ReadTimeout'
end

View File

@ -1148,9 +1148,9 @@ RSpec.describe ContainerRepository, :aggregate_failures, feature_category: :cont
end
end
describe '.find_or_create_from_path' do
describe '.find_or_create_from_path!' do
let(:repository) do
described_class.find_or_create_from_path(ContainerRegistry::Path.new(path))
described_class.find_or_create_from_path!(ContainerRegistry::Path.new(path))
end
let(:repository_path) { ContainerRegistry::Path.new(path) }
@ -1239,7 +1239,7 @@ RSpec.describe ContainerRepository, :aggregate_failures, feature_category: :cont
Thread.new do
true while wait_for_it
described_class.find_or_create_from_path(path)
described_class.find_or_create_from_path!(path)
end
end
wait_for_it = false

View File

@ -241,7 +241,7 @@ RSpec.describe API::Ci::PipelineSchedules, feature_category: :continuous_integra
let(:url) { "/projects/#{project.id}/pipeline_schedules/#{pipeline_schedule.id}/pipelines" }
matcher :return_pipeline_schedule_pipelines_successfully do
match_unless_raises do |reponse|
match_unless_raises do |response|
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(response).to match_response_schema('public_api/v4/pipelines')

View File

@ -20,7 +20,7 @@ RSpec.describe 'Deleting a container registry protection rule', :aggregate_failu
post_graphql_mutation(mutation, current_user: current_user)
end
shared_examples 'an erroneous reponse' do
shared_examples 'an erroneous response' do
it { post_graphql_mutation_delete_container_registry_protection_rule.tap { expect(mutation_response).to be_blank } }
it do
@ -53,7 +53,7 @@ RSpec.describe 'Deleting a container registry protection rule', :aggregate_failu
create(:container_registry_protection_rule, repository_path_pattern: 'protection_rule_other_project')
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { is_expected.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -64,7 +64,7 @@ RSpec.describe 'Deleting a container registry protection rule', :aggregate_failu
repository_path_pattern: 'protection_rule_deleted').destroy!
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { is_expected.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -80,7 +80,7 @@ RSpec.describe 'Deleting a container registry protection rule', :aggregate_failu
end
with_them do
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { is_expected.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -91,7 +91,7 @@ RSpec.describe 'Deleting a container registry protection rule', :aggregate_failu
stub_feature_flags(container_registry_protected_containers: false)
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it do
post_graphql_mutation_delete_container_registry_protection_rule

View File

@ -15,7 +15,7 @@ RSpec.describe 'Deleting a package protection rule', :aggregate_failures, featur
subject { post_graphql_mutation(mutation, current_user: current_user) }
shared_examples 'an erroneous reponse' do
shared_examples 'an erroneous response' do
it { subject.tap { expect(mutation_response).to be_blank } }
it { expect { subject }.not_to change { ::Packages::Protection::Rule.count } }
end
@ -44,7 +44,7 @@ RSpec.describe 'Deleting a package protection rule', :aggregate_failures, featur
create(:package_protection_rule, package_name_pattern: 'protection_rule_other_project')
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { subject.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -54,7 +54,7 @@ RSpec.describe 'Deleting a package protection rule', :aggregate_failures, featur
create(:package_protection_rule, project: project, package_name_pattern: 'protection_rule_deleted').destroy!
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { subject.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -70,7 +70,7 @@ RSpec.describe 'Deleting a package protection rule', :aggregate_failures, featur
end
with_them do
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { subject.tap { expect_graphql_errors_to_include(/you don't have permission to perform this action/) } }
end
@ -81,7 +81,7 @@ RSpec.describe 'Deleting a package protection rule', :aggregate_failures, featur
stub_feature_flags(packages_protected_packages: false)
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { subject.tap { expect_graphql_errors_to_include(/'packages_protected_packages' feature flag is disabled/) } }
end

View File

@ -63,7 +63,7 @@ RSpec.describe 'Updating the packages protection rule', :aggregate_failures, fea
end
end
shared_examples 'an erroneous reponse' do
shared_examples 'an erroneous response' do
it { subject.tap { expect(mutation_response).to be_blank } }
it { expect { subject }.not_to change { package_protection_rule.reload.updated_at } }
end
@ -92,7 +92,7 @@ RSpec.describe 'Updating the packages protection rule', :aggregate_failures, fea
context 'with invalid input param `pushProtectedUpToAccessLevel`' do
let(:input) { super().merge(push_protected_up_to_access_level: nil) }
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { is_expected.tap { expect_graphql_errors_to_include(/pushProtectedUpToAccessLevel can't be blank/) } }
end
@ -100,7 +100,7 @@ RSpec.describe 'Updating the packages protection rule', :aggregate_failures, fea
context 'with invalid input param `packageNamePattern`' do
let(:input) { super().merge(package_name_pattern: '') }
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it { is_expected.tap { expect_graphql_errors_to_include(/packageNamePattern can't be blank/) } }
end
@ -125,7 +125,7 @@ RSpec.describe 'Updating the packages protection rule', :aggregate_failures, fea
stub_feature_flags(packages_protected_packages: false)
end
it_behaves_like 'an erroneous reponse'
it_behaves_like 'an erroneous response'
it 'returns error of disabled feature flag' do
is_expected.tap { expect_graphql_errors_to_include(/'packages_protected_packages' feature flag is disabled/) }

View File

@ -207,7 +207,7 @@ RSpec.describe API::Ml::Mlflow::RegisteredModels, feature_category: :mlops do
let(:route) { "/projects/#{project_id}/ml/mlflow/api/2.0/mlflow/registered-models/delete" }
let(:request) { delete api(route), params: params, headers: headers }
it 'returns a success reponse', :aggregate_failures do
it 'returns a success response', :aggregate_failures do
is_expected.to have_gitlab_http_status(:ok)
expect(json_response).to eq({})
end

View File

@ -50,7 +50,7 @@ RSpec.describe API::RemoteMirrors, feature_category: :source_code_management do
let(:route) { "/projects/#{project.id}/remote_mirrors" }
shared_examples 'creates a remote mirror' do
it 'creates a remote mirror and returns reponse' do
it 'creates a remote mirror and returns response' do
project.add_maintainer(user)
post api(route, user), params: params

View File

@ -15,6 +15,10 @@ RSpec.describe Gitlab::GithubImport::StageMethods, feature_category: :importers
end.new
end
it 'has a Sidekiq retry of 6' do
expect(worker.class.sidekiq_options['retry']).to eq(6)
end
describe '#perform' do
it 'returns if no project could be found' do
expect(worker).not_to receive(:try_import)

View File

@ -263,7 +263,7 @@ RSpec.describe 'Every Sidekiq worker', feature_category: :shared do
'Gitlab::BitbucketServerImport::Stage::ImportPullRequestsWorker' => 3,
'Gitlab::BitbucketServerImport::Stage::ImportRepositoryWorker' => 3,
'Gitlab::BitbucketServerImport::Stage::ImportUsersWorker' => 3,
'Gitlab::GithubImport::AdvanceStageWorker' => 3,
'Gitlab::GithubImport::AdvanceStageWorker' => 6,
'Gitlab::GithubImport::Attachments::ImportReleaseWorker' => 5,
'Gitlab::GithubImport::Attachments::ImportNoteWorker' => 5,
'Gitlab::GithubImport::Attachments::ImportIssueWorker' => 5,
@ -280,20 +280,20 @@ RSpec.describe 'Every Sidekiq worker', feature_category: :shared do
'Gitlab::GithubImport::PullRequests::ImportMergedByWorker' => 5,
'Gitlab::GithubImport::ImportPullRequestWorker' => 5,
'Gitlab::GithubImport::RefreshImportJidWorker' => 5,
'Gitlab::GithubImport::Stage::FinishImportWorker' => 5,
'Gitlab::GithubImport::Stage::ImportBaseDataWorker' => 5,
'Gitlab::GithubImport::Stage::ImportIssuesAndDiffNotesWorker' => 5,
'Gitlab::GithubImport::Stage::ImportIssueEventsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportLfsObjectsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportAttachmentsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportProtectedBranchesWorker' => 5,
'Gitlab::GithubImport::Stage::ImportNotesWorker' => 5,
'Gitlab::GithubImport::Stage::ImportCollaboratorsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportPullRequestsMergedByWorker' => 5,
'Gitlab::GithubImport::Stage::ImportPullRequestsReviewRequestsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportPullRequestsReviewsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportPullRequestsWorker' => 5,
'Gitlab::GithubImport::Stage::ImportRepositoryWorker' => 5,
'Gitlab::GithubImport::Stage::FinishImportWorker' => 6,
'Gitlab::GithubImport::Stage::ImportBaseDataWorker' => 6,
'Gitlab::GithubImport::Stage::ImportIssuesAndDiffNotesWorker' => 6,
'Gitlab::GithubImport::Stage::ImportIssueEventsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportLfsObjectsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportAttachmentsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportProtectedBranchesWorker' => 6,
'Gitlab::GithubImport::Stage::ImportNotesWorker' => 6,
'Gitlab::GithubImport::Stage::ImportCollaboratorsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportPullRequestsMergedByWorker' => 6,
'Gitlab::GithubImport::Stage::ImportPullRequestsReviewRequestsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportPullRequestsReviewsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportPullRequestsWorker' => 6,
'Gitlab::GithubImport::Stage::ImportRepositoryWorker' => 6,
'Gitlab::GithubGistsImport::ImportGistWorker' => 5,
'Gitlab::GithubGistsImport::StartImportWorker' => 5,
'Gitlab::GithubGistsImport::FinishImportWorker' => 5,

View File

@ -4,4 +4,8 @@ require 'spec_helper'
RSpec.describe Gitlab::GithubImport::AdvanceStageWorker, feature_category: :importers do
it_behaves_like Gitlab::Import::AdvanceStage, factory: :import_state
it 'has a Sidekiq retry of 6' do
expect(described_class.sidekiq_options['retry']).to eq(6)
end
end

View File

@ -1194,10 +1194,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
"@eslint/js@8.55.0":
version "8.55.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6"
integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==
"@eslint/js@8.56.0":
version "8.56.0"
resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b"
integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==
"@floating-ui/core@^1.2.6":
version "1.2.6"
@ -6307,15 +6307,15 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800"
integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==
eslint@8.55.0:
version "8.55.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8"
integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==
eslint@8.56.0:
version "8.56.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15"
integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
"@eslint/js" "8.55.0"
"@eslint/js" "8.56.0"
"@humanwhocodes/config-array" "^0.11.13"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"