- new Vue({
- el: document.getElementById('js-code-owners'),
- router,
- apolloProvider,
- render(h) {
- return h(CodeOwners, {
- props: {
- filePath: this.$route.params.path,
- projectPath,
- },
- });
- },
- });
-
initLastCommitApp();
- initCodeOwnersApp();
router.afterEach(({ params: { path } }) => {
setTitle(path, ref, fullName);
diff --git a/app/assets/javascripts/repository/queries/code_owners_info.query.graphql b/app/assets/javascripts/repository/queries/code_owners_info.query.graphql
deleted file mode 100644
index 29c6265bbbd..00000000000
--- a/app/assets/javascripts/repository/queries/code_owners_info.query.graphql
+++ /dev/null
@@ -1,15 +0,0 @@
-query getCodeOwnersInfo($projectPath: ID!, $filePath: String!, $ref: String!) {
- project(fullPath: $projectPath) {
- id
- repository {
- blobs(paths: [$filePath], ref: $ref) {
- nodes {
- codeOwners {
- name
- webPath
- }
- }
- }
- }
- }
-}
diff --git a/app/graphql/types/repository/blob_type.rb b/app/graphql/types/repository/blob_type.rb
index 0182a372df3..104171e6772 100644
--- a/app/graphql/types/repository/blob_type.rb
+++ b/app/graphql/types/repository/blob_type.rb
@@ -71,10 +71,6 @@ module Types
field :pipeline_editor_path, GraphQL::Types::String, null: true,
description: 'Web path to edit .gitlab-ci.yml file.'
- field :code_owners, [Types::UserType], null: true,
- description: 'List of code owners for the blob.',
- calls_gitaly: true
-
field :file_type, GraphQL::Types::String, null: true,
description: 'Expected format of the blob based on the extension.'
diff --git a/app/presenters/blob_presenter.rb b/app/presenters/blob_presenter.rb
index 5466e8e0b05..5835a77d0b9 100644
--- a/app/presenters/blob_presenter.rb
+++ b/app/presenters/blob_presenter.rb
@@ -66,10 +66,6 @@ class BlobPresenter < Gitlab::View::Presenter::Delegated
project_ci_pipeline_editor_path(project, branch_name: blob.commit_id) if can_collaborate_with_project?(project) && blob.path == project.ci_config_path_or_default
end
- def code_owners
- Gitlab::CodeOwners.for_blob(project, blob)
- end
-
def fork_and_edit_path
fork_path_for_current_user(project, edit_blob_path)
end
diff --git a/app/views/projects/_files.html.haml b/app/views/projects/_files.html.haml
index 2f4a61865f8..cdcc98552f9 100644
--- a/app/views/projects/_files.html.haml
+++ b/app/views/projects/_files.html.haml
@@ -10,11 +10,10 @@
.nav-block.gl-display-flex.gl-xs-flex-direction-column.gl-align-items-stretch
= render 'projects/tree/tree_header', tree: @tree
- .info-well.gl-display-none.gl-sm-display-flex.project-last-commit.gl-flex-direction-column
- #js-last-commit.gl-m-auto
+ #js-last-commit
+ .info-well.gl-display-none.gl-sm-display-flex.project-last-commit
.gl-spinner-container.m-auto
= loading_icon(size: 'md', color: 'dark', css_class: 'align-text-bottom')
- #js-code-owners
- if is_project_overview
.project-buttons.gl-mb-3.js-show-on-project-root
diff --git a/doc/administration/clusters/kas.md b/doc/administration/clusters/kas.md
index 93b24007de8..a925c79a6d5 100644
--- a/doc/administration/clusters/kas.md
+++ b/doc/administration/clusters/kas.md
@@ -4,7 +4,9 @@ group: Configure
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
---
-# Install the Kubernetes Agent Server (KAS) **(PREMIUM SELF)**
+# Install the Kubernetes Agent Server (KAS) **(FREE SELF)**
+
+> [Moved](https://gitlab.com/groups/gitlab-org/-/epics/6290) from GitLab Premium to GitLab Free in 14.5.
The Kubernetes Agent Server (KAS) is a GitLab backend service dedicated to
managing [Kubernetes Agents](../../user/clusters/agent/index.md).
diff --git a/doc/administration/geo/replication/faq.md b/doc/administration/geo/replication/faq.md
index 70a6e506c28..e613a9b5670 100644
--- a/doc/administration/geo/replication/faq.md
+++ b/doc/administration/geo/replication/faq.md
@@ -50,6 +50,8 @@ attachments and avatars, and the whole database. This means user accounts,
issues, merge requests, groups, project data, and so on, will be available for
query.
+For more details, see the [supported Geo data types](datatypes.md).
+
## Can I `git push` to a **secondary** site?
Yes! Pushing directly to a **secondary** site (for both HTTP and SSH, including Git LFS) was [introduced](https://about.gitlab.com/releases/2018/09/22/gitlab-11-3-released/) in GitLab 11.3.
diff --git a/doc/api/graphql/reference/index.md b/doc/api/graphql/reference/index.md
index 626b1e5ae5e..d49eee5d15c 100644
--- a/doc/api/graphql/reference/index.md
+++ b/doc/api/graphql/reference/index.md
@@ -14073,7 +14073,6 @@ Returns [`Tree`](#tree).
| Name | Type | Description |
| ---- | ---- | ----------- |
| `canModifyBlob` | [`Boolean`](#boolean) | Whether the current user can modify the blob. |
-| `codeOwners` | [`[UserCore!]`](#usercore) | List of code owners for the blob. |
| `editBlobPath` | [`String`](#string) | Web path to edit the blob in the old-style editor. |
| `externalStorageUrl` | [`String`](#string) | Web path to download the raw blob via external storage, if enabled. |
| `fileType` | [`String`](#string) | Expected format of the blob based on the extension. |
diff --git a/doc/user/profile/index.md b/doc/user/profile/index.md
index 6274f91e818..a2d9ac21a18 100644
--- a/doc/user/profile/index.md
+++ b/doc/user/profile/index.md
@@ -274,6 +274,15 @@ To change your primary email:
1. In the **Email** field, enter your new email address.
1. Select **Update profile settings**.
+## Set your public email
+
+You can select one of your [configured email addresses](#add-emails-to-your-user-profile) to be displayed on your public profile:
+
+1. In the top-right corner, select your avatar.
+1. Select **Edit profile**.
+1. In the **Public email** field, select one of the available email addresses.
+1. Select **Update profile settings**.
+
### Use an automatically-generated private commit email
GitLab provides an automatically-generated private commit email address,
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index d2d543d2bd9..173056721f0 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -3752,9 +3752,6 @@ msgstr ""
msgid "An error occurred while loading chart data"
msgstr ""
-msgid "An error occurred while loading code owners."
-msgstr ""
-
msgid "An error occurred while loading commit signatures"
msgstr ""
diff --git a/qa/qa/service/praefect_manager.rb b/qa/qa/service/praefect_manager.rb
index 089e7b11554..dd4cce5d0b0 100644
--- a/qa/qa/service/praefect_manager.rb
+++ b/qa/qa/service/praefect_manager.rb
@@ -199,6 +199,13 @@ module QA
max_duration: 180,
retry_on_exception: true
)
+
+ QA::Runtime::Logger.info('Wait until Praefect starts and is listening')
+ wait_until_shell_command_matches(
+ "docker exec #{@praefect} bash -c 'cat /var/log/gitlab/praefect/current'",
+ /listening at tcp address/
+ )
+
wait_for_gitaly_check
end
diff --git a/spec/frontend/repository/components/__snapshots__/code_owners_spec.js.snap b/spec/frontend/repository/components/__snapshots__/code_owners_spec.js.snap
deleted file mode 100644
index 06c01970afc..00000000000
--- a/spec/frontend/repository/components/__snapshots__/code_owners_spec.js.snap
+++ /dev/null
@@ -1,220 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Code owners component matches the snapshot 1`] = ``;
-
-exports[`Code owners component matches the snapshot 2`] = `
-
-
-
-
- Code owners
-
-
-
-
-
-
- :
-
-
-
-
-
-
-
-
- John Doe
-
-
-
-
-`;
-
-exports[`Code owners component matches the snapshot 3`] = `
-
-
-
-
- Code owners
-
-
-
-
-
-
- :
-
-
-
-
-
-
-
-
- John Doe
-
-
-
-
-
-
-
- and
-
-
-
-
- John Doe
-
-
-
-
-`;
-
-exports[`Code owners component matches the snapshot 4`] = `
-
-
-
-
- Code owners
-
-
-
-
-
-
- :
-
-
-
-
-
-
-
-
- John Doe
-
-
-
-
-
- ,
-
-
-
-
-
-
- John Doe
-
-
-
-
-
- ,
-
-
-
- and
-
-
-
-
- John Doe
-
-
-
-
-`;
diff --git a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
index fe2247420ed..be4f8a688e0 100644
--- a/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
+++ b/spec/frontend/repository/components/__snapshots__/last_commit_spec.js.snap
@@ -2,7 +2,7 @@
exports[`Repository last commit component renders commit widget 1`] = `
{
- localVue.use(VueApollo);
-
- const project = {
- ...codeOwnersDataMock,
- repository: {
- blobs: {
- nodes: [{ codeOwners }],
- },
- },
- };
-
- mockResolver = jest.fn().mockResolvedValue({ data: { project } });
-
- wrapper = extendedWrapper(
- shallowMount(CodeOwners, {
- localVue,
- apolloProvider: createMockApollo([[codeOwnersInfoQuery, mockResolver]]),
- propsData: { projectPath: 'some/project', filePath: 'some/file' },
- mixins: [{ data: () => ({ ref: refMock }) }],
- }),
- );
-
- wrapper.setData({ isFetching: false });
-
- await waitForPromises();
-};
-
-describe('Code owners component', () => {
- const findHelpIcon = () => wrapper.findByTestId('help-icon');
- const findUsersIcon = () => wrapper.findByTestId('users-icon');
- const findCodeOwners = () => wrapper.findAllByTestId('code-owners');
- const findCommaSeparators = () => wrapper.findAllByTestId('comma-separator');
- const findAndSeparator = () => wrapper.findAllByTestId('and-separator');
- const findLink = () => wrapper.findComponent(GlLink);
-
- beforeEach(() => createComponent());
-
- afterEach(() => wrapper.destroy());
-
- describe('help link', () => {
- it('renders a GlLink component', () => {
- expect(findLink().exists()).toBe(true);
- expect(findLink().attributes('href')).toBe('/help/user/project/code_owners');
- expect(findLink().attributes('target')).toBe('_blank');
- expect(findLink().attributes('title')).toBe('About this feature');
- });
-
- it('renders a Help icon', () => {
- expect(findHelpIcon().exists()).toBe(true);
- expect(findHelpIcon().props('name')).toBe('question-o');
- });
- });
-
- it('renders a Users icon', () => {
- expect(findUsersIcon().exists()).toBe(true);
- expect(findUsersIcon().props('name')).toBe('users');
- });
-
- it.each`
- codeOwners | commaSeparators | hasAndSeparator
- ${[]} | ${0} | ${false}
- ${[codeOwnerMock]} | ${0} | ${false}
- ${[codeOwnerMock, codeOwnerMock]} | ${0} | ${true}
- ${[codeOwnerMock, codeOwnerMock, codeOwnerMock]} | ${2} | ${true}
- `('matches the snapshot', async ({ codeOwners, commaSeparators, hasAndSeparator }) => {
- await createComponent(codeOwners);
-
- expect(findCommaSeparators().length).toBe(commaSeparators);
- expect(findAndSeparator().exists()).toBe(hasAndSeparator);
- expect(findCodeOwners().length).toBe(codeOwners.length);
- expect(wrapper.element).toMatchSnapshot();
- });
-});
diff --git a/spec/frontend/repository/mock_data.js b/spec/frontend/repository/mock_data.js
index b0defac1eb5..adf5991ac3c 100644
--- a/spec/frontend/repository/mock_data.js
+++ b/spec/frontend/repository/mock_data.js
@@ -55,18 +55,3 @@ export const projectMock = {
export const propsMock = { path: 'some_file.js', projectPath: 'some/path' };
export const refMock = 'default-ref';
-
-export const codeOwnerMock = { name: 'John Doe', webPath: 'path/to/@johnDoe' };
-
-export const codeOwnersDataMock = {
- id: '1234',
- repository: {
- blobs: {
- nodes: [
- {
- codeOwners: [],
- },
- ],
- },
- },
-};
diff --git a/spec/graphql/types/repository/blob_type_spec.rb b/spec/graphql/types/repository/blob_type_spec.rb
index e0def84fcac..7f37237f355 100644
--- a/spec/graphql/types/repository/blob_type_spec.rb
+++ b/spec/graphql/types/repository/blob_type_spec.rb
@@ -24,7 +24,6 @@ RSpec.describe Types::Repository::BlobType do
:raw_path,
:replace_path,
:pipeline_editor_path,
- :code_owners,
:simple_viewer,
:rich_viewer,
:plain_data,
diff --git a/spec/simplecov_env.rb b/spec/simplecov_env.rb
index c880f2d0829..25dd3a937ca 100644
--- a/spec/simplecov_env.rb
+++ b/spec/simplecov_env.rb
@@ -51,7 +51,7 @@ module SimpleCovEnv
add_filter '/vendor/ruby/'
add_filter '/app/controllers/sherlock/' # Profiling tool used only in development
add_filter '/bin/'
- add_filter 'db/fixtures/' # Matches EE files as well
+ add_filter 'db/fixtures/development/' # Matches EE files as well
add_group 'Channels', 'app/channels' # Matches EE files as well
add_group 'Controllers', 'app/controllers' # Matches EE files as well