Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
f3b2c53677
commit
eba7329faa
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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?
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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']
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
# project - An instance of Project.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
# client - An instance of Gitlab::GithubImport::Client.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
# Importer::LfsObjectsImporter can resume work when interrupted as
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
# client - An instance of Gitlab::GithubImport::Client.
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
resumes_work_when_interrupted!
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ module Gitlab
|
|||
|
||||
data_consistency :always
|
||||
|
||||
include GithubImport::Queue
|
||||
include StageMethods
|
||||
|
||||
# client - An instance of Gitlab::GithubImport::Client.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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}"
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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]]);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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/) }
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
18
yarn.lock
18
yarn.lock
|
|
@ -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"
|
||||
|
|
|
|||
Loading…
Reference in New Issue