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>2022-01-27 09:11:50 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2022-01-27 09:11:50 +0300
commit62b1efcc13b511943d1e0b96f13ce435571997ac (patch)
tree78e0c413319a43b5ebca330d77407d82e7c2e2d1
parent88b04d72ad0c923a084d36177c65a836471605f4 (diff)
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--app/assets/javascripts/badges/components/badge.vue9
-rw-r--r--app/assets/javascripts/badges/components/badge_form.vue12
-rw-r--r--app/assets/javascripts/badges/components/badge_list.vue10
-rw-r--r--app/views/projects/_home_panel.html.haml8
-rw-r--r--app/views/projects/edit.html.haml2
-rw-r--r--data/removals/14_0/deprecate_ci_project_config_path_variable.yml7
-rw-r--r--doc/administration/instance_limits.md2
-rw-r--r--doc/administration/pages/img/pages_deploy_failure_v14_8.pngbin0 -> 32510 bytes
-rw-r--r--doc/administration/pages/index.md17
-rw-r--r--doc/api/index.md4
-rw-r--r--doc/update/removals.md10
-rw-r--r--doc/user/project/merge_requests/code_quality.md19
-rw-r--r--locale/gitlab.pot3
-rw-r--r--qa/qa/page/component/badges.rb53
-rw-r--r--qa/qa/page/project/settings/main.rb8
-rw-r--r--qa/qa/page/project/show.rb8
-rw-r--r--qa/qa/resource/badge_base.rb25
-rw-r--r--qa/qa/resource/group_badge.rb8
-rw-r--r--qa/qa/resource/project_badge.rb21
-rw-r--r--qa/qa/resource/user.rb3
-rw-r--r--qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb51
-rw-r--r--spec/serializers/build_details_entity_spec.rb2
-rw-r--r--spec/serializers/ci/lint/result_serializer_spec.rb4
-rw-r--r--spec/serializers/diff_file_base_entity_spec.rb2
-rw-r--r--spec/serializers/runner_entity_spec.rb2
-rw-r--r--spec/serializers/trigger_variable_entity_spec.rb2
-rw-r--r--spec/support/helpers/repo_helpers.rb2
-rw-r--r--spec/support/shared_contexts/graphql/requests/packages_shared_context.rb2
-rw-r--r--spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb2
-rw-r--r--spec/support/shared_examples/models/update_project_statistics_shared_examples.rb4
-rw-r--r--spec/support/shared_examples/requests/api/notes_shared_examples.rb2
-rw-r--r--spec/tasks/gitlab/backup_rake_spec.rb4
-rw-r--r--spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb2
-rw-r--r--spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb2
-rw-r--r--spec/workers/cleanup_container_repository_worker_spec.rb2
-rw-r--r--spec/workers/delete_container_repository_worker_spec.rb2
-rw-r--r--spec/workers/delete_merged_branches_worker_spec.rb4
-rw-r--r--spec/workers/post_receive_spec.rb16
-rw-r--r--spec/workers/project_destroy_worker_spec.rb4
41 files changed, 277 insertions, 67 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index db6470a97ce..e5ae5401425 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-440ad2b355bdbcf1d2b21ea63be40fddfc788d86
+eea10ee3cb10380821d9ea095a1e247a1801fda7
diff --git a/app/assets/javascripts/badges/components/badge.vue b/app/assets/javascripts/badges/components/badge.vue
index 53469ac8999..8bef972cc58 100644
--- a/app/assets/javascripts/badges/components/badge.vue
+++ b/app/assets/javascripts/badges/components/badge.vue
@@ -74,7 +74,14 @@ export default {
<template>
<div>
- <a v-show="!isLoading && !hasError" :href="linkUrl" target="_blank" rel="noopener noreferrer">
+ <a
+ v-show="!isLoading && !hasError"
+ :href="linkUrl"
+ target="_blank"
+ rel="noopener noreferrer"
+ data-qa-selector="badge_image_link"
+ :data-qa-link-url="linkUrl"
+ >
<img
:src="imageUrlWithRetries"
class="project-badge"
diff --git a/app/assets/javascripts/badges/components/badge_form.vue b/app/assets/javascripts/badges/components/badge_form.vue
index 2c7e878f044..d1570e16639 100644
--- a/app/assets/javascripts/badges/components/badge_form.vue
+++ b/app/assets/javascripts/badges/components/badge_form.vue
@@ -182,7 +182,7 @@ export default {
@submit.prevent.stop="onSubmit"
>
<gl-form-group :label="s__('Badges|Name')" label-for="badge-name">
- <gl-form-input id="badge-name" v-model="name" />
+ <gl-form-input id="badge-name" v-model="name" data-qa-selector="badge_name_field" />
</gl-form-group>
<div class="form-group">
@@ -191,6 +191,7 @@ export default {
<input
id="badge-link-url"
v-model="linkUrl"
+ data-qa-selector="badge_link_url_field"
type="URL"
class="form-control gl-form-input"
required
@@ -206,6 +207,7 @@ export default {
<input
id="badge-image-url"
v-model="imageUrl"
+ data-qa-selector="badge_image_url_field"
type="URL"
class="form-control gl-form-input"
required
@@ -246,7 +248,13 @@ export default {
</gl-button>
</div>
<div v-else class="form-group">
- <gl-button :loading="isSaving" type="submit" variant="confirm" category="primary">
+ <gl-button
+ :loading="isSaving"
+ type="submit"
+ variant="confirm"
+ category="primary"
+ data-qa-selector="add_badge_button"
+ >
{{ s__('Badges|Add badge') }}
</gl-button>
</div>
diff --git a/app/assets/javascripts/badges/components/badge_list.vue b/app/assets/javascripts/badges/components/badge_list.vue
index 86c7b4c7a6e..76625fe9a60 100644
--- a/app/assets/javascripts/badges/components/badge_list.vue
+++ b/app/assets/javascripts/badges/components/badge_list.vue
@@ -34,8 +34,14 @@ export default {
<span v-if="isGroupBadge">{{ s__('Badges|This group has no badges') }}</span>
<span v-else>{{ s__('Badges|This project has no badges') }}</span>
</div>
- <div v-else class="card-body">
- <badge-list-row v-for="badge in badges" :key="badge.id" :badge="badge" />
+ <div v-else class="card-body" data-qa-selector="badge_list_content">
+ <badge-list-row
+ v-for="badge in badges"
+ :key="badge.id"
+ :badge="badge"
+ data-qa-selector="badge_list_row"
+ :data-qa-badge-name="badge.name"
+ />
</div>
</div>
</template>
diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml
index 7e8daea5651..016bdcf2ce6 100644
--- a/app/views/projects/_home_panel.html.haml
+++ b/app/views/projects/_home_panel.html.haml
@@ -71,11 +71,13 @@
= render_if_exists "projects/home_mirror"
- if @project.badges.present?
- .project-badges.mb-2
+ .project-badges.mb-2{ data: { qa_selector: 'project_badges_content' } }
- @project.badges.each do |badge|
- %a.gl-mr-3{ href: badge.rendered_link_url(@project),
+ - badge_link_url = badge.rendered_link_url(@project)
+ %a.gl-mr-3{ href: badge_link_url,
target: '_blank',
- rel: 'noopener noreferrer' }>
+ rel: 'noopener noreferrer',
+ data: { qa_selector: 'badge_image_link', qa_link_url: badge_link_url } }>
%img.project-badge{ src: badge.rendered_image_url(@project),
'aria-hidden': true,
alt: 'Project badge' }>
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index cc9f4e54a89..e1744e689cf 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -40,7 +40,7 @@
= render_if_exists 'projects/merge_request_approvals_settings', expanded: expanded
-%section.settings.no-animate{ class: ('expanded' if expanded) }
+%section.settings.no-animate{ class: ('expanded' if expanded), data: { qa_selector: 'badges_settings_content' } }
.settings-header
%h4.settings-title.js-settings-toggle.js-settings-toggle-trigger-only
= s_('ProjectSettings|Badges')
diff --git a/data/removals/14_0/deprecate_ci_project_config_path_variable.yml b/data/removals/14_0/deprecate_ci_project_config_path_variable.yml
deleted file mode 100644
index 32d7368a211..00000000000
--- a/data/removals/14_0/deprecate_ci_project_config_path_variable.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-- name: "`CI_PROJECT_CONFIG_PATH` removed in GitLab 14.0"
- removal_date: "2021-06-22"
- removal_milestone: "14.0"
- reporter: stkerr
- breaking_change: true
- body: |
- GitLab 14.0 removes the `CI_PROJECT_CONFIG_PATH` pre-defined project variable in favor of `CI_CONFIG_PATH`, which is functionally the same. If you are using `CI_PROJECT_CONFIG_PATH` in your pipeline configurations, update them to use `CI_CONFIG_PATH` instead.
diff --git a/doc/administration/instance_limits.md b/doc/administration/instance_limits.md
index e985dfec339..f993784a201 100644
--- a/doc/administration/instance_limits.md
+++ b/doc/administration/instance_limits.md
@@ -260,7 +260,7 @@ The maximum webhook payload size is 25 MB.
### Recursive webhooks
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/329743) in GitLab 14.8.
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/329743) in GitLab 14.8.
GitLab detects and blocks webhooks that are recursive or that exceed the limit
of webhooks that can be triggered from other webhooks. This enables GitLab to
diff --git a/doc/administration/pages/img/pages_deploy_failure_v14_8.png b/doc/administration/pages/img/pages_deploy_failure_v14_8.png
new file mode 100644
index 00000000000..ec502b86453
--- /dev/null
+++ b/doc/administration/pages/img/pages_deploy_failure_v14_8.png
Binary files differ
diff --git a/doc/administration/pages/index.md b/doc/administration/pages/index.md
index f5744fafcf5..053e0f634d3 100644
--- a/doc/administration/pages/index.md
+++ b/doc/administration/pages/index.md
@@ -1511,3 +1511,20 @@ behavior:
NOTE:
`inplace_chroot` option might not work with the other features, such as [Pages Access Control](#access-control).
The [GitLab Pages README](https://gitlab.com/gitlab-org/gitlab-pages#caveats) has more information about caveats and workarounds.
+
+### GitLab Pages deploy job fails with error "is not a recognized provider"
+
+If the **pages** job succeeds but the **deploy** job gives the error "is not a recognized provider":
+
+![Pages Deploy Failure](img/pages_deploy_failure_v14_8.png)
+
+The error message `is not a recognized provider` could be coming from the `fog` gem that GitLab uses to connect to cloud providers for object storage.
+
+To fix that:
+
+1. Check your `gitlab.rb` file. If you have `gitlab_rails['pages_object_store_enabled']` enabled, but no bucket details have been configured, either:
+
+ - Configure object storage for your Pages deployments, following the [S3-compatible connection settings](#s3-compatible-connection-settings) guide.
+ - Store your deployments locally, by commenting out that line.
+
+1. Save the changes you made to your `gitlab.rb` file, then [reconfigure GitLab](../restart_gitlab.md#omnibus-gitlab-reconfigure).
diff --git a/doc/api/index.md b/doc/api/index.md
index 69db971f58c..08b266f35eb 100644
--- a/doc/api/index.md
+++ b/doc/api/index.md
@@ -31,7 +31,9 @@ GitLab provides an [SCIM API](scim.md) that both implements
## GraphQL API
-A [GraphQL API](graphql/index.md) is available in GitLab.
+A GraphQL API is available in GitLab.
+For a list of the available resources and their endpoints, see
+[GraphQL API resources](graphql/reference/index.md).
With GraphQL, you can make an API request for only what you need,
and it's versioned by default.
diff --git a/doc/update/removals.md b/doc/update/removals.md
index d6a3d9afb0b..550de5ff41a 100644
--- a/doc/update/removals.md
+++ b/doc/update/removals.md
@@ -658,16 +658,6 @@ changes to your code, settings, or workflow.
The Web Application Firewall (WAF) was deprecated in GitLab 13.6 and is removed from GitLab 14.0. The WAF had limitations inherent in the architectural design that made it difficult to meet the requirements traditionally expected of a WAF. By removing the WAF, GitLab is able to focus on improving other areas in the product where more value can be provided to users. Users who currently rely on the WAF can continue to use the free and open source [ModSecurity](https://github.com/SpiderLabs/ModSecurity) project, which is independent from GitLab. Additional details are available in the [deprecation issue](https://gitlab.com/gitlab-org/gitlab/-/issues/271276).
-### `CI_PROJECT_CONFIG_PATH` removed in GitLab 14.0
-
-WARNING:
-This feature was changed or removed in 14.0
-as a [breaking change](https://docs.gitlab.com/ee/development/contributing/#breaking-changes).
-Before updating GitLab, review the details carefully to determine if you need to make any
-changes to your code, settings, or workflow.
-
-GitLab 14.0 removes the `CI_PROJECT_CONFIG_PATH` pre-defined project variable in favor of `CI_CONFIG_PATH`, which is functionally the same. If you are using `CI_PROJECT_CONFIG_PATH` in your pipeline configurations, update them to use `CI_CONFIG_PATH` instead.
-
### `CI_PROJECT_CONFIG_PATH` variable has been removed
WARNING:
diff --git a/doc/user/project/merge_requests/code_quality.md b/doc/user/project/merge_requests/code_quality.md
index 6085b5e91d3..d9fa36e4718 100644
--- a/doc/user/project/merge_requests/code_quality.md
+++ b/doc/user/project/merge_requests/code_quality.md
@@ -591,3 +591,22 @@ plugins:
If your merge requests do not show any code quality changes when using a custom tool,
ensure that the line property is an `integer`.
+
+### Code Quality CI job with Code Climate plugins enabled fails with error "engine <plugin_name> ran for 900 seconds and was killed"
+
+If you enabled any of the Code Climate plugins, and the Code Quality CI job fails with the error below,
+it's likely the job takes longer than the default timeout of 900 seconds.
+
+```shell
+error: (CC::CLI::Analyze::EngineFailure) engine pmd ran for 900 seconds and was killed
+Could not analyze code quality for the repository at /code
+```
+
+To work around this problem, set `TIMEOUT_SECONDS` to a higher value in your `.gitlab.-ci.yml` file.
+
+For example:
+
+```yaml
+variables:
+ TIMEOUT_SECONDS: 3600
+```
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 5723715e530..03647273bf3 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -15711,6 +15711,9 @@ msgstr ""
msgid "Geo sites"
msgstr ""
+msgid "Geo|%{boldStart}N/A%{boldEnd}: Geo does not verify this component yet. See the %{linkStart}data types we plan to support%{linkEnd}."
+msgstr ""
+
msgid "Geo|%{component} synced"
msgstr ""
diff --git a/qa/qa/page/component/badges.rb b/qa/qa/page/component/badges.rb
new file mode 100644
index 00000000000..f2c5f809d8d
--- /dev/null
+++ b/qa/qa/page/component/badges.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+module QA
+ module Page
+ module Component
+ class Badges < Page::Base
+ view 'app/assets/javascripts/badges/components/badge_form.vue' do
+ element :badge_name_field
+ element :badge_link_url_field
+ element :badge_image_url_field
+ element :add_badge_button
+ end
+
+ view 'app/assets/javascripts/badges/components/badge_list.vue' do
+ element :badge_list_content
+ element :badge_list_row
+ end
+
+ view 'app/assets/javascripts/badges/components/badge.vue' do
+ element :badge_image_link
+ end
+
+ def fill_name(name)
+ fill_element :badge_name_field, name
+ end
+
+ def fill_link_url(url)
+ fill_element :badge_link_url_field, url
+ end
+
+ def fill_image_url(url)
+ fill_element :badge_image_url_field, url
+ end
+
+ def click_add_badge_button
+ click_element :add_badge_button
+ end
+
+ def has_badge?(badge_name)
+ within_element(:badge_list_content) do
+ has_element?(:badge_list_row, badge_name: badge_name)
+ end
+ end
+
+ def has_visible_badge_image_link?(link_url)
+ within_element(:badge_list_content) do
+ has_element?(:badge_image_link, link_url: link_url)
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/page/project/settings/main.rb b/qa/qa/page/project/settings/main.rb
index 5efcb7bf23c..52ed630ac66 100644
--- a/qa/qa/page/project/settings/main.rb
+++ b/qa/qa/page/project/settings/main.rb
@@ -9,11 +9,13 @@ module QA
include Component::Select2
include SubMenus::Project
include Component::Breadcrumbs
+ include Layout::Flash
view 'app/views/projects/edit.html.haml' do
element :advanced_settings_content
element :merge_request_settings_content
element :visibility_features_permissions_content
+ element :badges_settings_content
end
view 'app/views/projects/settings/_general.html.haml' do
@@ -51,6 +53,12 @@ module QA
VisibilityFeaturesPermissions.perform(&block)
end
end
+
+ def expand_badges_settings(&block)
+ expand_content(:badges_settings_content) do
+ Component::Badges.perform(&block)
+ end
+ end
end
end
end
diff --git a/qa/qa/page/project/show.rb b/qa/qa/page/project/show.rb
index 8074b6f833b..4c9df2716e2 100644
--- a/qa/qa/page/project/show.rb
+++ b/qa/qa/page/project/show.rb
@@ -39,6 +39,8 @@ module QA
element :forked_from_link
element :project_name_content
element :project_id_content
+ element :project_badges_content
+ element :badge_image_link
end
view 'app/views/projects/_files.html.haml' do
@@ -179,6 +181,12 @@ module QA
has_css?('.tree-holder')
end
end
+
+ def has_visible_badge_image_link?(link_url)
+ within_element(:project_badges_content) do
+ has_element?(:badge_image_link, link_url: link_url)
+ end
+ end
end
end
end
diff --git a/qa/qa/resource/badge_base.rb b/qa/qa/resource/badge_base.rb
new file mode 100644
index 00000000000..5bb7eb98d4e
--- /dev/null
+++ b/qa/qa/resource/badge_base.rb
@@ -0,0 +1,25 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class BadgeBase < Base
+ attributes :id,
+ :name,
+ :link_url,
+ :image_url
+
+ def initialize
+ @name = "qa-badge-#{SecureRandom.hex(8)}"
+ end
+
+ def fabricate!
+ Page::Component::Badges.perform do |badges|
+ badges.fill_name(name)
+ badges.fill_link_url(link_url)
+ badges.fill_image_url(image_url)
+ badges.click_add_badge_button
+ end
+ end
+ end
+ end
+end
diff --git a/qa/qa/resource/group_badge.rb b/qa/qa/resource/group_badge.rb
index 3719b502b93..0c176bd5fbc 100644
--- a/qa/qa/resource/group_badge.rb
+++ b/qa/qa/resource/group_badge.rb
@@ -2,12 +2,8 @@
module QA
module Resource
- class GroupBadge < Base
- attributes :id,
- :name,
- :link_url,
- :image_url,
- :group
+ class GroupBadge < BadgeBase
+ attribute :group
# API get path
#
diff --git a/qa/qa/resource/project_badge.rb b/qa/qa/resource/project_badge.rb
new file mode 100644
index 00000000000..e036999117e
--- /dev/null
+++ b/qa/qa/resource/project_badge.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module QA
+ module Resource
+ class ProjectBadge < BadgeBase
+ def initialize
+ super
+
+ @link_url = "#{Runtime::Scenario.gitlab_address}/%{project_path}"
+ @image_url = "#{Runtime::Scenario.gitlab_address}/%{project_path}/badges/%{default_branch}/pipeline.svg"
+ end
+
+ def fabricate!
+ Page::Project::Menu.perform(&:go_to_general_settings)
+ Page::Project::Settings::Main.perform(&:expand_badges_settings)
+
+ super
+ end
+ end
+ end
+end
diff --git a/qa/qa/resource/user.rb b/qa/qa/resource/user.rb
index eab428a61e7..cf8e0564041 100644
--- a/qa/qa/resource/user.rb
+++ b/qa/qa/resource/user.rb
@@ -100,7 +100,8 @@ module QA
def exists?
api_get
- rescue ResourceNotFoundError
+ # TODO: remove 'InternalServerError' from below line after https://gitlab.com/gitlab-org/gitlab/-/issues/349337 has been resolved
+ rescue ResourceNotFoundError, InternalServerError
false
end
diff --git a/qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb
new file mode 100644
index 00000000000..2933d580957
--- /dev/null
+++ b/qa/qa/specs/features/browser_ui/1_manage/project/create_project_badge_spec.rb
@@ -0,0 +1,51 @@
+# frozen_string_literal: true
+
+module QA
+ RSpec.describe 'Manage' do
+ describe 'Create project badge' do
+ let(:badge_name) { "project-badge-#{SecureRandom.hex(8)}" }
+ let(:expected_badge_link_url) { "#{Runtime::Scenario.gitlab_address}/#{project.path_with_namespace}" }
+ let(:expected_badge_image_url) { "#{Runtime::Scenario.gitlab_address}/#{project.path_with_namespace}/badges/main/pipeline.svg" }
+ let(:project) do
+ Resource::Project.fabricate_via_api! do |project|
+ project.name = 'badge-test-project'
+ project.initialize_with_readme = true
+ end
+ end
+
+ before do
+ Flow::Login.sign_in
+ project.visit!
+ end
+
+ it 'creates project badge successfully', testcase: 'https://gitlab.com/gitlab-org/gitlab/-/quality/test_cases/350065' do
+ Resource::ProjectBadge.fabricate! do |badge|
+ badge.name = badge_name
+ end
+
+ Page::Project::Settings::Main.perform do |project_settings|
+ expect(project_settings).to have_notice('New badge added.')
+ end
+
+ Page::Component::Badges.perform do |badges|
+ aggregate_failures do
+ expect(badges).to have_badge(badge_name)
+ expect(badges).to have_visible_badge_image_link(expected_badge_link_url)
+ expect(badges.asset_exists?(expected_badge_image_url)).to be_truthy
+ end
+ end
+
+ project.visit!
+
+ Page::Project::Show.perform do |project|
+ expect(project).to have_visible_badge_image_link(expected_badge_link_url)
+ expect(project.asset_exists?(expected_badge_image_url)).to be_truthy
+ end
+ end
+
+ after do
+ project&.remove_via_api!
+ end
+ end
+ end
+end
diff --git a/spec/serializers/build_details_entity_spec.rb b/spec/serializers/build_details_entity_spec.rb
index a24841fe286..da2734feb51 100644
--- a/spec/serializers/build_details_entity_spec.rb
+++ b/spec/serializers/build_details_entity_spec.rb
@@ -11,7 +11,7 @@ RSpec.describe BuildDetailsEntity do
describe '#as_json' do
let(:project) { create(:project, :repository) }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
let(:pipeline) { create(:ci_pipeline, project: project) }
let(:build) { create(:ci_build, :failed, pipeline: pipeline) }
let(:request) { double('request', project: project) }
diff --git a/spec/serializers/ci/lint/result_serializer_spec.rb b/spec/serializers/ci/lint/result_serializer_spec.rb
index a834ea05e14..3fdaba1808a 100644
--- a/spec/serializers/ci/lint/result_serializer_spec.rb
+++ b/spec/serializers/ci/lint/result_serializer_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe Ci::Lint::ResultSerializer, :aggregate_failures do
let(:result) do
Gitlab::Ci::Lint
- .new(project: project, current_user: project.owner)
+ .new(project: project, current_user: project.first_owner)
.validate(yaml_content, dry_run: false)
end
@@ -64,7 +64,7 @@ RSpec.describe Ci::Lint::ResultSerializer, :aggregate_failures do
context 'when dry run is enabled' do
let(:result) do
Gitlab::Ci::Lint
- .new(project: project, current_user: project.owner)
+ .new(project: project, current_user: project.first_owner)
.validate(yaml_content, dry_run: true)
end
diff --git a/spec/serializers/diff_file_base_entity_spec.rb b/spec/serializers/diff_file_base_entity_spec.rb
index 99dbaff4b7e..11ceb7991d7 100644
--- a/spec/serializers/diff_file_base_entity_spec.rb
+++ b/spec/serializers/diff_file_base_entity_spec.rb
@@ -142,7 +142,7 @@ RSpec.describe DiffFileBaseEntity do
end
context 'when source_project and target_project are different' do
- let(:target_project) { fork_project(source_project, source_project.owner, repository: true) }
+ let(:target_project) { fork_project(source_project, source_project.first_owner, repository: true) }
it 'returns the merge_request ide route with the target_project as param' do
expect(entity[:ide_edit_path]).to eq("#{expected_merge_request_path}?target_project=#{ERB::Util.url_encode(target_project.full_path)}")
diff --git a/spec/serializers/runner_entity_spec.rb b/spec/serializers/runner_entity_spec.rb
index 39cac65c5ac..f34cb794834 100644
--- a/spec/serializers/runner_entity_spec.rb
+++ b/spec/serializers/runner_entity_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe RunnerEntity do
let(:runner) { create(:ci_runner, :project, projects: [project]) }
let(:entity) { described_class.new(runner, request: request, current_user: user) }
let(:request) { double('request') }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
before do
allow(request).to receive(:current_user).and_return(user)
diff --git a/spec/serializers/trigger_variable_entity_spec.rb b/spec/serializers/trigger_variable_entity_spec.rb
index e90bfc24f9f..deabbb9d54b 100644
--- a/spec/serializers/trigger_variable_entity_spec.rb
+++ b/spec/serializers/trigger_variable_entity_spec.rb
@@ -31,7 +31,7 @@ RSpec.describe TriggerVariableEntity do
end
context 'when user is owner' do
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
it 'exposes the variable value' do
expect(subject).to include(:value)
diff --git a/spec/support/helpers/repo_helpers.rb b/spec/support/helpers/repo_helpers.rb
index bbba58d60d6..f275be39dc4 100644
--- a/spec/support/helpers/repo_helpers.rb
+++ b/spec/support/helpers/repo_helpers.rb
@@ -129,7 +129,7 @@ eos
commit_message: 'Add new content')
Files::CreateService.new(
project,
- project.owner,
+ project.first_owner,
commit_message: commit_message,
start_branch: start_branch,
branch_name: branch_name,
diff --git a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
index 9ac3d4a04f9..13e7ecf2669 100644
--- a/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
+++ b/spec/support/shared_contexts/graphql/requests/packages_shared_context.rb
@@ -11,7 +11,7 @@ RSpec.shared_context 'package details setup' do
let(:package_files) { all_graphql_fields_for('PackageFile') }
let(:dependency_links) { all_graphql_fields_for('PackageDependencyLink') }
let(:pipelines) { all_graphql_fields_for('Pipeline', max_depth: 1) }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
let(:package_details) { graphql_data_at(:package) }
let(:metadata_response) { graphql_data_at(:package, :metadata) }
let(:first_file) { package.package_files.find { |f| global_id_of(f) == first_file_response['id'] } }
diff --git a/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb b/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
index 1c816ee4b0a..456175e7113 100644
--- a/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
+++ b/spec/support/shared_examples/features/creatable_merge_request_shared_examples.rb
@@ -62,7 +62,7 @@ RSpec.shared_examples 'a creatable merge request' do
end
it 'updates the branches when selecting a new target project', :js do
- target_project_member = target_project.owner
+ target_project_member = target_project.first_owner
::Branches::CreateService.new(target_project, target_project_member)
.execute('a-brand-new-branch-to-test', 'master')
diff --git a/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb b/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
index d3fd28727b5..b4c438771ce 100644
--- a/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
+++ b/spec/support/shared_examples/lib/sidebars/projects/menus/zentao_menu_shared_examples.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.shared_examples 'ZenTao menu with CE version' do
let(:project) { create(:project, has_external_issue_tracker: true) }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
let(:context) { Sidebars::Projects::Context.new(current_user: user, container: project) }
let(:zentao_integration) { create(:zentao_integration, project: project) }
diff --git a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
index 06326ffac97..ad0bbc0aeff 100644
--- a/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
+++ b/spec/support/shared_examples/models/update_project_statistics_shared_examples.rb
@@ -115,14 +115,14 @@ RSpec.shared_examples 'UpdateProjectStatistics' do |with_counter_attribute|
expect(ProjectStatistics)
.not_to receive(:increment_statistic)
- expect(Projects::DestroyService.new(project, project.owner).execute).to eq(true)
+ expect(Projects::DestroyService.new(project, project.first_owner).execute).to eq(true)
end
it 'does not schedule a namespace statistics worker' do
expect(Namespaces::ScheduleAggregationWorker)
.not_to receive(:perform_async)
- expect(Projects::DestroyService.new(project, project.owner).execute).to eq(true)
+ expect(Projects::DestroyService.new(project, project.first_owner).execute).to eq(true)
end
end
end
diff --git a/spec/support/shared_examples/requests/api/notes_shared_examples.rb b/spec/support/shared_examples/requests/api/notes_shared_examples.rb
index 0434d0beb7e..2a157f6e855 100644
--- a/spec/support/shared_examples/requests/api/notes_shared_examples.rb
+++ b/spec/support/shared_examples/requests/api/notes_shared_examples.rb
@@ -190,7 +190,7 @@ RSpec.shared_examples 'noteable API' do |parent_type, noteable_type, id_name|
if parent_type == 'projects'
context 'by a project owner' do
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
it 'sets the creation time on the new note' do
post api("/#{parent_type}/#{parent.id}/#{noteable_type}/#{noteable[id_name]}/notes", user), params: params
diff --git a/spec/tasks/gitlab/backup_rake_spec.rb b/spec/tasks/gitlab/backup_rake_spec.rb
index c5e73aa3b45..92843f48b8b 100644
--- a/spec/tasks/gitlab/backup_rake_spec.rb
+++ b/spec/tasks/gitlab/backup_rake_spec.rb
@@ -344,9 +344,9 @@ RSpec.describe 'gitlab:app namespace rake task', :delete do
shared_examples 'includes repositories in all repository storages' do
specify :aggregate_failures do
project_a = create(:project, :repository)
- project_snippet_a = create(:project_snippet, :repository, project: project_a, author: project_a.owner)
+ project_snippet_a = create(:project_snippet, :repository, project: project_a, author: project_a.first_owner)
project_b = create(:project, :repository, repository_storage: second_storage_name)
- project_snippet_b = create(:project_snippet, :repository, project: project_b, author: project_b.owner)
+ project_snippet_b = create(:project_snippet, :repository, project: project_b, author: project_b.first_owner)
project_snippet_b.snippet_repository.update!(shard: project_b.project_repository.shard)
create(:wiki_page, container: project_a)
create(:design, :with_file, issue: create(:issue, project: project_a))
diff --git a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
index 869defbb331..22e925e22ae 100644
--- a/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
+++ b/spec/views/layouts/nav/sidebar/_project.html.haml_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe 'layouts/nav/sidebar/_project' do
let_it_be_with_reload(:project) { create(:project, :repository) }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
let(:current_ref) { 'master' }
before do
diff --git a/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb b/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
index 116a0e4d035..a637ac088ff 100644
--- a/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
+++ b/spec/workers/ci/external_pull_requests/create_pipeline_worker_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe Ci::ExternalPullRequests::CreatePipelineWorker do
let_it_be(:project) { create(:project, :auto_devops, :repository) }
- let_it_be(:user) { project.owner }
+ let_it_be(:user) { project.first_owner }
let_it_be(:external_pull_request) do
branch = project.repository.branches.last
create(:external_pull_request, project: project, source_branch: branch.name, source_sha: branch.target)
diff --git a/spec/workers/cleanup_container_repository_worker_spec.rb b/spec/workers/cleanup_container_repository_worker_spec.rb
index 6ae4308bd46..6723ea2049d 100644
--- a/spec/workers/cleanup_container_repository_worker_spec.rb
+++ b/spec/workers/cleanup_container_repository_worker_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe CleanupContainerRepositoryWorker, :clean_gitlab_redis_shared_state do
let(:repository) { create(:container_repository) }
let(:project) { repository.project }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
subject { described_class.new }
diff --git a/spec/workers/delete_container_repository_worker_spec.rb b/spec/workers/delete_container_repository_worker_spec.rb
index b8363a2f81a..ec040eab2d4 100644
--- a/spec/workers/delete_container_repository_worker_spec.rb
+++ b/spec/workers/delete_container_repository_worker_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe DeleteContainerRepositoryWorker do
let(:registry) { create(:container_repository) }
let(:project) { registry.project }
- let(:user) { project.owner }
+ let(:user) { project.first_owner }
subject { described_class.new }
diff --git a/spec/workers/delete_merged_branches_worker_spec.rb b/spec/workers/delete_merged_branches_worker_spec.rb
index 861ca111b92..056fcb1200d 100644
--- a/spec/workers/delete_merged_branches_worker_spec.rb
+++ b/spec/workers/delete_merged_branches_worker_spec.rb
@@ -13,11 +13,11 @@ RSpec.describe DeleteMergedBranchesWorker do
expect(instance).to receive(:execute).and_return(true)
end
- worker.perform(project.id, project.owner.id)
+ worker.perform(project.id, project.first_owner.id)
end
it "returns false when project was not found" do
- expect(worker.perform('unknown', project.owner.id)).to be_falsy
+ expect(worker.perform('unknown', project.first_owner.id)).to be_falsy
end
end
end
diff --git a/spec/workers/post_receive_spec.rb b/spec/workers/post_receive_spec.rb
index 42e39c51a88..9b33e559c71 100644
--- a/spec/workers/post_receive_spec.rb
+++ b/spec/workers/post_receive_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe PostReceive do
let(:wrongly_encoded_changes) { changes.encode("ISO-8859-1").force_encoding("UTF-8") }
let(:base64_changes) { Base64.encode64(wrongly_encoded_changes) }
let(:gl_repository) { "project-#{project.id}" }
- let(:key) { create(:key, user: project.owner) }
+ let(:key) { create(:key, user: project.first_owner) }
let!(:key_id) { key.shell_id }
let(:project) do
@@ -47,7 +47,7 @@ RSpec.describe PostReceive do
context 'with PersonalSnippet' do
let(:gl_repository) { "snippet-#{snippet.id}" }
- let(:snippet) { create(:personal_snippet, author: project.owner) }
+ let(:snippet) { create(:personal_snippet, author: project.first_owner) }
it 'does not log an error' do
expect(Gitlab::GitLogger).not_to receive(:error)
@@ -60,7 +60,7 @@ RSpec.describe PostReceive do
context 'with ProjectSnippet' do
let(:gl_repository) { "snippet-#{snippet.id}" }
- let(:snippet) { create(:snippet, type: 'ProjectSnippet', project: nil, author: project.owner) }
+ let(:snippet) { create(:snippet, type: 'ProjectSnippet', project: nil, author: project.first_owner) }
it 'returns false and logs an error' do
expect(Gitlab::GitLogger).to receive(:error).with("POST-RECEIVE: #{error_message}")
@@ -74,7 +74,7 @@ RSpec.describe PostReceive do
let(:empty_project) { create(:project, :empty_repo) }
before do
- allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(empty_project.owner)
+ allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(empty_project.first_owner)
# Need to mock here so we can expect calls on project
allow(Gitlab::GlRepository).to receive(:parse).and_return([empty_project, empty_project, Gitlab::GlRepository::PROJECT])
end
@@ -128,7 +128,7 @@ RSpec.describe PostReceive do
let(:push_service) { double(execute: true) }
before do
- allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(project.owner)
+ allow_next(Gitlab::GitPostReceive).to receive(:identify).and_return(project.first_owner)
allow(Gitlab::GlRepository).to receive(:parse).and_return([project, project, Gitlab::GlRepository::PROJECT])
end
@@ -381,7 +381,7 @@ RSpec.describe PostReceive do
allow(Project).to receive(:find_by).and_return(project)
expect_next(MergeRequests::PushedBranchesService).to receive(:execute).and_return(%w(tést))
- expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.owner.id, any_args)
+ expect(UpdateMergeRequestsWorker).to receive(:perform_async).with(project.id, project.first_owner.id, any_args)
perform
end
@@ -461,13 +461,13 @@ RSpec.describe PostReceive do
end
context 'with PersonalSnippet' do
- let!(:snippet) { create(:personal_snippet, :repository, author: project.owner) }
+ let!(:snippet) { create(:personal_snippet, :repository, author: project.first_owner) }
it_behaves_like 'snippet changes actions'
end
context 'with ProjectSnippet' do
- let!(:snippet) { create(:project_snippet, :repository, project: project, author: project.owner) }
+ let!(:snippet) { create(:project_snippet, :repository, project: project, author: project.first_owner) }
it_behaves_like 'snippet changes actions'
end
diff --git a/spec/workers/project_destroy_worker_spec.rb b/spec/workers/project_destroy_worker_spec.rb
index 00a4ddac29f..0b0543a5089 100644
--- a/spec/workers/project_destroy_worker_spec.rb
+++ b/spec/workers/project_destroy_worker_spec.rb
@@ -14,7 +14,7 @@ RSpec.describe ProjectDestroyWorker do
describe '#perform' do
it 'deletes the project' do
- subject.perform(project.id, project.owner.id, {})
+ subject.perform(project.id, project.first_owner.id, {})
expect(Project.all).not_to include(project)
expect(Dir.exist?(path)).to be_falsey
@@ -22,7 +22,7 @@ RSpec.describe ProjectDestroyWorker do
it 'does not raise error when project could not be found' do
expect do
- subject.perform(-1, project.owner.id, {})
+ subject.perform(-1, project.first_owner.id, {})
end.not_to raise_error
end