summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-07-13 09:09:42 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-07-13 09:09:42 +0000
commit8ce82c1eaf87d1b22b645e2c37671f01d2c35581 (patch)
treec6dc06ec31b343d3f9531846c7fa6ff41087b213
parent63d4054f263da695a7fd90202e33d2c5392572a2 (diff)
downloadgitlab-ce-8ce82c1eaf87d1b22b645e2c37671f01d2c35581.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--app/assets/javascripts/analytics/devops_report/components/service_ping_disabled.vue (renamed from app/assets/javascripts/analytics/devops_report/components/usage_ping_disabled.vue)23
-rw-r--r--app/assets/javascripts/analytics/devops_report/devops_score_disabled_service_ping.js (renamed from app/assets/javascripts/analytics/devops_report/devops_score_disabled_usage_ping.js)18
-rw-r--r--app/assets/javascripts/pages/admin/dev_ops_report/index.js4
-rw-r--r--app/views/admin/dev_ops_report/_report.html.haml9
-rw-r--r--app/views/groups/merge_requests.html.haml2
-rw-r--r--doc/user/group/iterations/index.md2
-rw-r--r--doc/user/project/merge_requests/code_quality.md2
-rw-r--r--doc/user/project/repository/repository_mirroring.md11
-rw-r--r--locale/gitlab.pot48
-rw-r--r--spec/features/admin/admin_dev_ops_report_spec.rb2
-rw-r--r--spec/features/groups/merge_requests_spec.rb25
-rw-r--r--spec/frontend/analytics/devops_report/components/service_ping_disabled_spec.js61
12 files changed, 145 insertions, 62 deletions
diff --git a/app/assets/javascripts/analytics/devops_report/components/usage_ping_disabled.vue b/app/assets/javascripts/analytics/devops_report/components/service_ping_disabled.vue
index c0ad814172d..7c14cf3767f 100644
--- a/app/assets/javascripts/analytics/devops_report/components/usage_ping_disabled.vue
+++ b/app/assets/javascripts/analytics/devops_report/components/service_ping_disabled.vue
@@ -25,28 +25,33 @@ export default {
};
</script>
<template>
- <gl-empty-state class="js-empty-state" :title="__('Usage ping is off')" :svg-path="svgPath">
+ <gl-empty-state :title="s__('ServicePing|Service ping is off')" :svg-path="svgPath">
<template #description>
<gl-sprintf
v-if="!isAdmin"
:message="
- __(
- 'To view instance-level analytics, ask an admin to turn on %{docLinkStart}usage ping%{docLinkEnd}.',
+ s__(
+ 'ServicePing|To view instance-level analytics, ask an admin to turn on %{docLinkStart}service ping%{docLinkEnd}.',
)
"
>
<template #docLink="{ content }">
- <gl-link :href="docsLink" target="_blank">{{ content }}</gl-link>
+ <gl-link :href="docsLink" target="_blank" data-testid="docs-link">{{ content }}</gl-link>
</template>
</gl-sprintf>
- <template v-else
- ><p>
- {{ __('Turn on usage ping to review instance-level analytics.') }}
+ <template v-else>
+ <p>
+ {{ s__('ServicePing|Turn on service ping to review instance-level analytics.') }}
</p>
- <gl-button category="primary" variant="success" :href="primaryButtonPath">
- {{ __('Turn on usage ping') }}</gl-button
+ <gl-button
+ category="primary"
+ variant="success"
+ :href="primaryButtonPath"
+ data-testid="power-on-button"
>
+ {{ s__('ServicePing|Turn on service ping') }}
+ </gl-button>
</template>
</template>
</gl-empty-state>
diff --git a/app/assets/javascripts/analytics/devops_report/devops_score_disabled_usage_ping.js b/app/assets/javascripts/analytics/devops_report/devops_score_disabled_service_ping.js
index 0131407e723..63b36f35247 100644
--- a/app/assets/javascripts/analytics/devops_report/devops_score_disabled_usage_ping.js
+++ b/app/assets/javascripts/analytics/devops_report/devops_score_disabled_service_ping.js
@@ -1,27 +1,33 @@
import Vue from 'vue';
+import { parseBoolean } from '~/lib/utils/common_utils';
import UserCallout from '~/user_callout';
-import UsagePingDisabled from './components/usage_ping_disabled.vue';
+import ServicePingDisabled from './components/service_ping_disabled.vue';
export default () => {
// eslint-disable-next-line no-new
new UserCallout();
- const emptyStateContainer = document.getElementById('js-devops-usage-ping-disabled');
+ const emptyStateContainer = document.getElementById('js-devops-service-ping-disabled');
if (!emptyStateContainer) return false;
- const { emptyStateSvgPath, enableUsagePingLink, docsLink, isAdmin } = emptyStateContainer.dataset;
+ const {
+ isAdmin,
+ emptyStateSvgPath,
+ enableServicePingPath,
+ docsLink,
+ } = emptyStateContainer.dataset;
return new Vue({
el: emptyStateContainer,
provide: {
- isAdmin: Boolean(isAdmin),
+ isAdmin: parseBoolean(isAdmin),
svgPath: emptyStateSvgPath,
- primaryButtonPath: enableUsagePingLink,
+ primaryButtonPath: enableServicePingPath,
docsLink,
},
render(h) {
- return h(UsagePingDisabled);
+ return h(ServicePingDisabled);
},
});
};
diff --git a/app/assets/javascripts/pages/admin/dev_ops_report/index.js b/app/assets/javascripts/pages/admin/dev_ops_report/index.js
index d6fa1be29b0..a94a60af7ff 100644
--- a/app/assets/javascripts/pages/admin/dev_ops_report/index.js
+++ b/app/assets/javascripts/pages/admin/dev_ops_report/index.js
@@ -1,5 +1,5 @@
import initDevOpsScore from '~/analytics/devops_report/devops_score';
-import initDevOpsScoreDisabledUsagePing from '~/analytics/devops_report/devops_score_disabled_usage_ping';
+import initDevOpsScoreDisabledServicePing from '~/analytics/devops_report/devops_score_disabled_service_ping';
-initDevOpsScoreDisabledUsagePing();
+initDevOpsScoreDisabledServicePing();
initDevOpsScore();
diff --git a/app/views/admin/dev_ops_report/_report.html.haml b/app/views/admin/dev_ops_report/_report.html.haml
index dbd0020e382..c08a57fdb25 100644
--- a/app/views/admin/dev_ops_report/_report.html.haml
+++ b/app/views/admin/dev_ops_report/_report.html.haml
@@ -1,10 +1,9 @@
-- usage_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled
+- service_ping_enabled = Gitlab::CurrentSettings.usage_ping_enabled
-- if usage_ping_enabled && show_callout?('dev_ops_report_intro_callout_dismissed')
+- if service_ping_enabled && show_callout?('dev_ops_report_intro_callout_dismissed')
= render 'callout'
-- if !usage_ping_enabled
- #js-devops-usage-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_usage_ping_link: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/usage_ping/index.md') } }
+- if !service_ping_enabled
+ #js-devops-service-ping-disabled{ data: { is_admin: current_user&.admin.to_s, empty_state_svg_path: image_path('illustrations/convdev/convdev_no_index.svg'), enable_service_ping_path: metrics_and_profiling_admin_application_settings_path(anchor: 'js-usage-settings'), docs_link: help_page_path('development/usage_ping/index.md') } }
- else
#js-devops-score{ data: { devops_score_metrics: devops_score_metrics(@metric).to_json, devops_report_docs_path: help_page_path('user/admin_area/analytics/dev_ops_report'), no_data_image_path: image_path('dev_ops_report_no_data.svg') } }
-
diff --git a/app/views/groups/merge_requests.html.haml b/app/views/groups/merge_requests.html.haml
index 33f836c2de0..ad916e3aeec 100644
--- a/app/views/groups/merge_requests.html.haml
+++ b/app/views/groups/merge_requests.html.haml
@@ -2,7 +2,7 @@
- page_title _("Merge requests")
-- if @merge_requests&.size == 0
+- if issuables_count_for_state(:merge_requests, :all) == 0
= render 'shared/empty_states/merge_requests', project_select_button: true
- else
.top-area
diff --git a/doc/user/group/iterations/index.md b/doc/user/group/iterations/index.md
index 921c40eef73..5a435f32569 100644
--- a/doc/user/group/iterations/index.md
+++ b/doc/user/group/iterations/index.md
@@ -65,7 +65,7 @@ To create an iteration cadence:
1. Select **New iteration cadence**.
1. Fill out required fields, and select **Create iteration cadence**. The cadence list page opens.
-## Delete an iteration cadence
+### Delete an iteration cadence
Prerequisites:
diff --git a/doc/user/project/merge_requests/code_quality.md b/doc/user/project/merge_requests/code_quality.md
index 08ade308174..c447406a58a 100644
--- a/doc/user/project/merge_requests/code_quality.md
+++ b/doc/user/project/merge_requests/code_quality.md
@@ -60,7 +60,7 @@ See also the Code Climate list of [Supported Languages for Maintainability](http
> - [Deployed behind a feature flag](../../../user/feature_flags.md), disabled by default.
> - [Enabled by default](https://gitlab.com/gitlab-org/gitlab/-/issues/284140) in GitLab 13.12.
> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/284140) in GitLab 14.1.
-> - [Feature enhanced](https://gitlab.com/gitlab-org/gitlab/-/issues/2526) in GitLab 14.0.
+> - [Inline annotation added](https://gitlab.com/gitlab-org/gitlab/-/issues/2526) in GitLab 14.1.
Changes to files in merge requests can cause Code Quality to fall if merged. In these cases,
the merge request's diff view displays an indicator next to lines with new Code Quality violations. For example:
diff --git a/doc/user/project/repository/repository_mirroring.md b/doc/user/project/repository/repository_mirroring.md
index 369e054aed1..0871c27c7f9 100644
--- a/doc/user/project/repository/repository_mirroring.md
+++ b/doc/user/project/repository/repository_mirroring.md
@@ -617,3 +617,14 @@ Check if the repository owner is specified in the URL of your mirrored repositor
```
The repository owner is needed for Bitbucket to connect to the repository for mirroring.
+
+### Pull mirror is missing LFS files
+
+In some cases, pull mirroring does not transfer LFS files. This issue occurs when:
+
+- You use an SSH repository URL. The workaround is to use an HTTPS repository URL instead.
+ There is [an issue to fix this for SSH URLs](https://gitlab.com/gitlab-org/gitlab/-/issues/11997).
+- You're using GitLab 14.0 or older, and the source repository is a public Bitbucket URL.
+ This was [fixed in GitLab 14.0.6](https://gitlab.com/gitlab-org/gitlab/-/issues/335123).
+- You mirror an external repository using object storage.
+ There is [an issue to fix this](https://gitlab.com/gitlab-org/gitlab/-/issues/335495).
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 72d817fbc2d..d65b6817810 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -11243,9 +11243,6 @@ msgstr ""
msgid "DevopsAdoption|%{adoptedCount}/%{featuresCount} %{title} features adopted"
msgstr ""
-msgid "DevopsAdoption|Add Group"
-msgstr ""
-
msgid "DevopsAdoption|Add a group to get started"
msgstr ""
@@ -11261,21 +11258,12 @@ msgstr ""
msgid "DevopsAdoption|Add sub-group to table"
msgstr ""
-msgid "DevopsAdoption|Add/remove groups"
-msgstr ""
-
-msgid "DevopsAdoption|Add/remove sub-groups"
-msgstr ""
-
msgid "DevopsAdoption|Adopted"
msgstr ""
msgid "DevopsAdoption|An error occurred while removing the group. Please try again."
msgstr ""
-msgid "DevopsAdoption|An error occurred while saving changes. Please try again."
-msgstr ""
-
msgid "DevopsAdoption|Approvals"
msgstr ""
@@ -11327,21 +11315,12 @@ msgstr ""
msgid "DevopsAdoption|Feature adoption is based on usage in the previous calendar month. Last updated: %{timestamp}."
msgstr ""
-msgid "DevopsAdoption|Filter by name"
-msgstr ""
-
msgid "DevopsAdoption|Issues"
msgstr ""
msgid "DevopsAdoption|MRs"
msgstr ""
-msgid "DevopsAdoption|My group"
-msgstr ""
-
-msgid "DevopsAdoption|No filter results."
-msgstr ""
-
msgid "DevopsAdoption|No results…"
msgstr ""
@@ -11375,9 +11354,6 @@ msgstr ""
msgid "DevopsAdoption|SAST enabled for at least one project"
msgstr ""
-msgid "DevopsAdoption|Save changes"
-msgstr ""
-
msgid "DevopsAdoption|Scanning"
msgstr ""
@@ -29825,6 +29801,18 @@ msgstr ""
msgid "ServiceDesk|Your users can send emails to this address:"
msgstr ""
+msgid "ServicePing|Service ping is off"
+msgstr ""
+
+msgid "ServicePing|To view instance-level analytics, ask an admin to turn on %{docLinkStart}service ping%{docLinkEnd}."
+msgstr ""
+
+msgid "ServicePing|Turn on service ping"
+msgstr ""
+
+msgid "ServicePing|Turn on service ping to review instance-level analytics."
+msgstr ""
+
msgid "Session ID"
msgstr ""
@@ -34393,9 +34381,6 @@ msgstr ""
msgid "To view all %{scannedResourcesCount} scanned URLs, %{linkStart}please download the CSV file%{linkEnd}"
msgstr ""
-msgid "To view instance-level analytics, ask an admin to turn on %{docLinkStart}usage ping%{docLinkEnd}."
-msgstr ""
-
msgid "To widen your search, change or remove filters above"
msgstr ""
@@ -34797,12 +34782,6 @@ msgstr ""
msgid "Turn on"
msgstr ""
-msgid "Turn on usage ping"
-msgstr ""
-
-msgid "Turn on usage ping to review instance-level analytics."
-msgstr ""
-
msgid "Twitter"
msgstr ""
@@ -35364,9 +35343,6 @@ msgstr ""
msgid "Usage Trends"
msgstr ""
-msgid "Usage ping is off"
-msgstr ""
-
msgid "Usage statistics"
msgstr ""
diff --git a/spec/features/admin/admin_dev_ops_report_spec.rb b/spec/features/admin/admin_dev_ops_report_spec.rb
index 33f984af807..8f1960b681c 100644
--- a/spec/features/admin/admin_dev_ops_report_spec.rb
+++ b/spec/features/admin/admin_dev_ops_report_spec.rb
@@ -32,7 +32,7 @@ RSpec.describe 'DevOps Report page', :js do
it 'shows empty state' do
visit admin_dev_ops_report_path
- expect(page).to have_selector(".js-empty-state")
+ expect(page).to have_text('Service ping is off')
end
it 'hides the intro callout' do
diff --git a/spec/features/groups/merge_requests_spec.rb b/spec/features/groups/merge_requests_spec.rb
index f79c93157dc..077f680629f 100644
--- a/spec/features/groups/merge_requests_spec.rb
+++ b/spec/features/groups/merge_requests_spec.rb
@@ -75,4 +75,29 @@ RSpec.describe 'Group merge requests page' do
end
end
end
+
+ context 'empty state with no merge requests' do
+ before do
+ MergeRequest.delete_all
+ end
+
+ it 'shows an empty state, button to create merge request and no filters bar', :aggregate_failures, :js do
+ visit path
+
+ expect(page).to have_selector('.empty-state')
+ expect(page).to have_link('Select project to create merge request')
+ expect(page).not_to have_selector('.issues-filters')
+ end
+
+ context 'with no open merge requests' do
+ it 'shows an empty state, button to create merge request and filters bar', :aggregate_failures, :js do
+ create(:merge_request, :closed, source_project: project, target_project: project)
+ visit path
+
+ expect(page).to have_selector('.empty-state')
+ expect(page).to have_link('Select project to create merge request')
+ expect(page).to have_selector('.issues-filters')
+ end
+ end
+ end
end
diff --git a/spec/frontend/analytics/devops_report/components/service_ping_disabled_spec.js b/spec/frontend/analytics/devops_report/components/service_ping_disabled_spec.js
new file mode 100644
index 00000000000..75ef9d9db94
--- /dev/null
+++ b/spec/frontend/analytics/devops_report/components/service_ping_disabled_spec.js
@@ -0,0 +1,61 @@
+import { GlEmptyState, GlSprintf } from '@gitlab/ui';
+import { TEST_HOST } from 'helpers/test_constants';
+import { shallowMountExtended } from 'helpers/vue_test_utils_helper';
+import ServicePingDisabled from '~/analytics/devops_report/components/service_ping_disabled.vue';
+
+describe('~/analytics/devops_report/components/service_ping_disabled.vue', () => {
+ let wrapper;
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ const createWrapper = ({ isAdmin = false } = {}) => {
+ wrapper = shallowMountExtended(ServicePingDisabled, {
+ provide: {
+ isAdmin,
+ svgPath: TEST_HOST,
+ docsLink: TEST_HOST,
+ primaryButtonPath: TEST_HOST,
+ },
+ stubs: { GlEmptyState, GlSprintf },
+ });
+ };
+
+ const findEmptyState = () => wrapper.findComponent(GlEmptyState);
+ const findMessageForRegularUsers = () => wrapper.findComponent(GlSprintf);
+ const findDocsLink = () => wrapper.findByTestId('docs-link');
+ const findPowerOnButton = () => wrapper.findByTestId('power-on-button');
+
+ it('renders empty state with provided SVG path', () => {
+ createWrapper();
+
+ expect(findEmptyState().props('svgPath')).toBe(TEST_HOST);
+ });
+
+ describe('for regular users', () => {
+ beforeEach(() => {
+ createWrapper({ isAdmin: false });
+ });
+
+ it('renders message without power-on button', () => {
+ expect(findMessageForRegularUsers().exists()).toBe(true);
+ expect(findPowerOnButton().exists()).toBe(false);
+ });
+
+ it('renders docs link', () => {
+ expect(findDocsLink().exists()).toBe(true);
+ expect(findDocsLink().attributes('href')).toBe(TEST_HOST);
+ });
+ });
+
+ describe('for admins', () => {
+ beforeEach(() => {
+ createWrapper({ isAdmin: true });
+ });
+
+ it('renders power-on button', () => {
+ expect(findPowerOnButton().exists()).toBe(true);
+ });
+ });
+});