diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-30 09:08:55 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-01-30 09:08:55 +0000 |
commit | be37a0ee5e3e3dbb967266248f0f46f14a9931e2 (patch) | |
tree | 8fd575a36933fb847a6f92ff76d9c1ad908a3f7b | |
parent | 6305f1dc00870f6e0635e2e850538a00bbd00bda (diff) | |
download | gitlab-ce-be37a0ee5e3e3dbb967266248f0f46f14a9931e2.tar.gz |
Add latest changes from gitlab-org/gitlab@master
17 files changed, 257 insertions, 53 deletions
diff --git a/app/assets/javascripts/pages/projects/pipelines/init_pipelines.js b/app/assets/javascripts/pages/projects/pipelines/init_pipelines.js index ba4ae04ab3d..ade6908c4a5 100644 --- a/app/assets/javascripts/pages/projects/pipelines/init_pipelines.js +++ b/app/assets/javascripts/pages/projects/pipelines/init_pipelines.js @@ -1,6 +1,18 @@ import Pipelines from '~/pipelines'; export default () => { + const mergeRequestListToggle = document.querySelector('.js-toggle-mr-list'); + const truncatedMergeRequestList = document.querySelector('.js-truncated-mr-list'); + const fullMergeRequestList = document.querySelector('.js-full-mr-list'); + + if (mergeRequestListToggle) { + mergeRequestListToggle.addEventListener('click', e => { + e.preventDefault(); + truncatedMergeRequestList.classList.toggle('hide'); + fullMergeRequestList.classList.toggle('hide'); + }); + } + const { controllerAction } = document.querySelector('.js-pipeline-container').dataset; const pipelineStatusUrl = `${document .querySelector('.js-pipeline-tab-link a') diff --git a/app/presenters/ci/pipeline_presenter.rb b/app/presenters/ci/pipeline_presenter.rb index f01ff56540a..b113c7043e7 100644 --- a/app/presenters/ci/pipeline_presenter.rb +++ b/app/presenters/ci/pipeline_presenter.rb @@ -70,18 +70,22 @@ module Ci end end - def all_related_merge_request_text + def all_related_merge_request_text(limit: nil) if all_related_merge_requests.none? - 'No related merge requests found.' + _("No related merge requests found.") else _("%{count} related %{pluralized_subject}: %{links}" % { count: all_related_merge_requests.count, - pluralized_subject: 'merge request'.pluralize(all_related_merge_requests.count), - links: all_related_merge_request_links.join(', ') + pluralized_subject: n_('merge request', 'merge requests', all_related_merge_requests.count), + links: all_related_merge_request_links(limit: limit).join(', ') }).html_safe end end + def has_many_merge_requests? + all_related_merge_requests.count > 1 + end + def link_to_pipeline_ref link_to(pipeline.ref, project_commits_path(pipeline.project, pipeline.ref), @@ -118,8 +122,10 @@ module Ci end end - def all_related_merge_request_links - all_related_merge_requests.map do |merge_request| + def all_related_merge_request_links(limit: nil) + limit ||= all_related_merge_requests.count + + all_related_merge_requests.first(limit).map do |merge_request| mr_path = project_merge_request_path(merge_request.project, merge_request) link_to "#{merge_request.to_reference} #{merge_request.title}", mr_path, class: 'mr-iid' diff --git a/app/services/metrics/dashboard/default_embed_service.rb b/app/services/metrics/dashboard/default_embed_service.rb index e1bd98bd5c2..39f7c3943dd 100644 --- a/app/services/metrics/dashboard/default_embed_service.rb +++ b/app/services/metrics/dashboard/default_embed_service.rb @@ -20,6 +20,12 @@ module Metrics system_metrics_kubernetes_container_cores_total ).freeze + class << self + def valid_params?(params) + params[:embedded].present? + end + end + # Returns a new dashboard with only the matching # metrics from the system dashboard, stripped of groups. # @return [Hash] diff --git a/app/services/metrics/dashboard/predefined_dashboard_service.rb b/app/services/metrics/dashboard/predefined_dashboard_service.rb index 1be1a000854..297f00b1be9 100644 --- a/app/services/metrics/dashboard/predefined_dashboard_service.rb +++ b/app/services/metrics/dashboard/predefined_dashboard_service.rb @@ -15,6 +15,10 @@ module Metrics ].freeze class << self + def valid_params?(params) + matching_dashboard?(params[:dashboard_path]) + end + def matching_dashboard?(filepath) filepath == self::DASHBOARD_PATH end diff --git a/app/services/metrics/dashboard/project_dashboard_service.rb b/app/services/metrics/dashboard/project_dashboard_service.rb index b0d54ee9347..fadbe0fae01 100644 --- a/app/services/metrics/dashboard/project_dashboard_service.rb +++ b/app/services/metrics/dashboard/project_dashboard_service.rb @@ -9,6 +9,10 @@ module Metrics DASHBOARD_ROOT = ".gitlab/dashboards" class << self + def valid_params?(params) + params[:dashboard_path].present? + end + def all_dashboard_paths(project) file_finder(project) .list_files_for(DASHBOARD_ROOT) diff --git a/app/views/projects/pipelines/_info.html.haml b/app/views/projects/pipelines/_info.html.haml index ce6ae765de9..85902d51ab0 100644 --- a/app/views/projects/pipelines/_info.html.haml +++ b/app/views/projects/pipelines/_info.html.haml @@ -69,4 +69,11 @@ .icon-container = sprite_icon("git-merge") %span.related-merge-requests - = @pipeline.all_related_merge_request_text + %span.js-truncated-mr-list + = @pipeline.all_related_merge_request_text(limit: 1) + - if @pipeline.has_many_merge_requests? + = link_to("#", class: "js-toggle-mr-list") do + %span.text-expander + = sprite_icon('ellipsis_h', size: 12) + %span.js-full-mr-list.hide + = @pipeline.all_related_merge_request_text diff --git a/changelogs/unreleased/198466.yml b/changelogs/unreleased/198466.yml new file mode 100644 index 00000000000..5c50dd0717a --- /dev/null +++ b/changelogs/unreleased/198466.yml @@ -0,0 +1,5 @@ +--- +title: update service desk project to use GlLoadingIcon over font awesome spinner +merge_request: +author: Oregand +type: changed diff --git a/changelogs/unreleased/39531.yml b/changelogs/unreleased/39531.yml new file mode 100644 index 00000000000..b06330a010d --- /dev/null +++ b/changelogs/unreleased/39531.yml @@ -0,0 +1,6 @@ +--- +title: Update styles for pipeline status badge to be correctly vertically centered + in project pipeline card +merge_request: +author: Oregand +type: fixed diff --git a/changelogs/unreleased/mfluharty-expandable-pipeline-mr-links-list.yml b/changelogs/unreleased/mfluharty-expandable-pipeline-mr-links-list.yml new file mode 100644 index 00000000000..76ad4215037 --- /dev/null +++ b/changelogs/unreleased/mfluharty-expandable-pipeline-mr-links-list.yml @@ -0,0 +1,5 @@ +--- +title: Truncate related merge requests list in pipeline view +merge_request: 19404 +author: +type: changed diff --git a/lib/gitlab/metrics/dashboard/service_selector.rb b/lib/gitlab/metrics/dashboard/service_selector.rb index 5b6f25420e0..5a3007e4814 100644 --- a/lib/gitlab/metrics/dashboard/service_selector.rb +++ b/lib/gitlab/metrics/dashboard/service_selector.rb @@ -8,50 +8,39 @@ module Gitlab module Metrics module Dashboard class ServiceSelector - SERVICES = ::Metrics::Dashboard - class << self include Gitlab::Utils::StrongMemoize + SERVICES = [ + ::Metrics::Dashboard::CustomMetricEmbedService, + ::Metrics::Dashboard::GrafanaMetricEmbedService, + ::Metrics::Dashboard::DynamicEmbedService, + ::Metrics::Dashboard::DefaultEmbedService, + ::Metrics::Dashboard::SystemDashboardService, + ::Metrics::Dashboard::PodDashboardService, + ::Metrics::Dashboard::ProjectDashboardService + ].freeze + # Returns a class which inherits from the BaseService - # class that can be used to obtain a dashboard. + # class that can be used to obtain a dashboard for + # the provided params. # @return [Gitlab::Metrics::Dashboard::Services::BaseService] def call(params) - return SERVICES::CustomMetricEmbedService if custom_metric_embed?(params) - return SERVICES::GrafanaMetricEmbedService if grafana_metric_embed?(params) - return SERVICES::DynamicEmbedService if dynamic_embed?(params) - return SERVICES::DefaultEmbedService if params[:embedded] - return SERVICES::SystemDashboardService if system_dashboard?(params[:dashboard_path]) - return SERVICES::PodDashboardService if pod_dashboard?(params[:dashboard_path]) - return SERVICES::ProjectDashboardService if params[:dashboard_path] - - default_service - end + service = services.find do |service_class| + service_class.valid_params?(params) + end - private - - def default_service - SERVICES::SystemDashboardService + service || default_service end - def system_dashboard?(filepath) - SERVICES::SystemDashboardService.matching_dashboard?(filepath) - end - - def pod_dashboard?(filepath) - SERVICES::PodDashboardService.matching_dashboard?(filepath) - end - - def custom_metric_embed?(params) - SERVICES::CustomMetricEmbedService.valid_params?(params) - end + private - def grafana_metric_embed?(params) - SERVICES::GrafanaMetricEmbedService.valid_params?(params) + def services + SERVICES end - def dynamic_embed?(params) - SERVICES::DynamicEmbedService.valid_params?(params) + def default_service + ::Metrics::Dashboard::SystemDashboardService end end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 2a4fd3f4717..81442d3fc7d 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -7164,6 +7164,9 @@ msgstr "" msgid "Enter new AWS Secret Access Key" msgstr "" +msgid "Enter number of issues" +msgstr "" + msgid "Enter the issue description" msgstr "" @@ -11292,9 +11295,6 @@ msgstr "" msgid "List" msgstr "" -msgid "List Settings" -msgstr "" - msgid "List Your Gitea Repositories" msgstr "" @@ -11304,6 +11304,9 @@ msgstr "" msgid "List of IPs and CIDRs of allowed secondary nodes. Comma-separated, e.g. \"1.1.1.1, 2.2.2.0/24\"" msgstr "" +msgid "List settings" +msgstr "" + msgid "List the merge requests that must be merged before this one." msgstr "" @@ -12604,6 +12607,9 @@ msgstr "" msgid "No public groups" msgstr "" +msgid "No related merge requests found." +msgstr "" + msgid "No repository" msgstr "" @@ -15607,6 +15613,9 @@ msgstr "" msgid "Remove group" msgstr "" +msgid "Remove limit" +msgstr "" + msgid "Remove milestone" msgstr "" @@ -21436,7 +21445,7 @@ msgstr "" msgid "Withdraw Access Request" msgstr "" -msgid "Work in Progress Limit" +msgid "Work in progress Limit" msgstr "" msgid "Workflow Help" diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb index cb0acc55e06..5fe99c0ad1d 100644 --- a/spec/features/projects/pipelines/pipeline_spec.rb +++ b/spec/features/projects/pipelines/pipeline_spec.rb @@ -99,12 +99,74 @@ describe 'Pipeline', :js do end end - it 'shows links to the related merge requests' do - visit_pipeline + describe 'related merge requests' do + context 'when there are no related merge requests' do + it 'shows a "no related merge requests" message' do + visit_pipeline + + within '.related-merge-request-info' do + expect(page).to have_content('No related merge requests found.') + end + end + end + + context 'when there is one related merge request' do + before do + create(:merge_request, + source_project: project, + source_branch: pipeline.ref) + end + + it 'shows a link to the merge request' do + visit_pipeline + + within '.related-merge-requests' do + expect(page).to have_content('1 related merge request: ') + expect(page).to have_selector('.js-truncated-mr-list') + expect(page).to have_link('!1 My title 1') + + expect(page).not_to have_selector('.js-full-mr-list') + expect(page).not_to have_selector('.text-expander') + end + end + end + + context 'when there are two related merge requests' do + before do + create(:merge_request, + source_project: project, + source_branch: pipeline.ref, + target_branch: 'feature-1') + + create(:merge_request, + source_project: project, + source_branch: pipeline.ref, + target_branch: 'feature-2') + end - within '.related-merge-request-info' do - pipeline.all_merge_requests.map do |merge_request| - expect(page).to have_link(project_merge_request_path(project, merge_request)) + it 'links to the most recent related merge request' do + visit_pipeline + + within '.related-merge-requests' do + expect(page).to have_content('2 related merge requests: ') + expect(page).to have_link('!2 My title 3') + expect(page).to have_selector('.text-expander') + expect(page).to have_selector('.js-full-mr-list', visible: false) + end + end + + it 'expands to show links to all related merge requests' do + visit_pipeline + + within '.related-merge-requests' do + find('.text-expander').click + + expect(page).to have_selector('.js-full-mr-list', visible: true) + + pipeline.all_merge_requests.map do |merge_request| + expect(page).to have_link(href: project_merge_request_path(project, merge_request)) + end + end end end end diff --git a/spec/presenters/ci/pipeline_presenter_spec.rb b/spec/presenters/ci/pipeline_presenter_spec.rb index fd391478eb4..700d1f5cbb6 100644 --- a/spec/presenters/ci/pipeline_presenter_spec.rb +++ b/spec/presenters/ci/pipeline_presenter_spec.rb @@ -209,6 +209,15 @@ describe Ci::PipelinePresenter do "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_2)}\">#{mr_2.to_reference} #{mr_2.title}</a>, " \ "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_1)}\">#{mr_1.to_reference} #{mr_1.title}</a>") } + + context 'with a limit passed' do + subject { presenter.all_related_merge_request_text(limit: 1) } + + it { + is_expected.to eq("2 related merge requests: " \ + "<a class=\"mr-iid\" href=\"#{merge_request_path(mr_2)}\">#{mr_2.to_reference} #{mr_2.title}</a>") + } + end end end diff --git a/spec/services/metrics/dashboard/default_embed_service_spec.rb b/spec/services/metrics/dashboard/default_embed_service_spec.rb index 741a9644905..1b88276368c 100644 --- a/spec/services/metrics/dashboard/default_embed_service_spec.rb +++ b/spec/services/metrics/dashboard/default_embed_service_spec.rb @@ -13,6 +13,26 @@ describe Metrics::Dashboard::DefaultEmbedService, :use_clean_rails_memory_store_ project.add_maintainer(user) end + describe '.valid_params?' do + let(:params) { { embedded: true } } + + subject { described_class.valid_params?(params) } + + it { is_expected.to be_truthy } + + context 'missing embedded' do + let(:params) { {} } + + it { is_expected.to be_falsey } + end + + context 'not embedded' do + let(:params) { { embedded: false } } + + it { is_expected.to be_falsey } + end + end + describe '#get_dashboard' do let(:service_params) { [project, user, { environment: environment }] } let(:service_call) { described_class.new(*service_params).get_dashboard } diff --git a/spec/services/metrics/dashboard/pod_dashboard_service_spec.rb b/spec/services/metrics/dashboard/pod_dashboard_service_spec.rb index c3993bf71ea..36ca6f882fa 100644 --- a/spec/services/metrics/dashboard/pod_dashboard_service_spec.rb +++ b/spec/services/metrics/dashboard/pod_dashboard_service_spec.rb @@ -13,7 +13,27 @@ describe Metrics::Dashboard::PodDashboardService, :use_clean_rails_memory_store_ project.add_maintainer(user) end - describe 'get_dashboard' do + describe '.valid_params?' do + let(:params) { { dashboard_path: described_class::DASHBOARD_PATH } } + + subject { described_class.valid_params?(params) } + + it { is_expected.to be_truthy } + + context 'missing dashboard_path' do + let(:params) { {} } + + it { is_expected.to be_falsey } + end + + context 'non-matching dashboard_path' do + let(:params) { { dashboard_path: 'path/to/bunk.yml' } } + + it { is_expected.to be_falsey } + end + end + + describe '#get_dashboard' do let(:dashboard_path) { described_class::DASHBOARD_PATH } let(:service_params) { [project, user, { environment: environment, dashboard_path: dashboard_path }] } let(:service_call) { described_class.new(*service_params).get_dashboard } diff --git a/spec/services/metrics/dashboard/project_dashboard_service_spec.rb b/spec/services/metrics/dashboard/project_dashboard_service_spec.rb index cba8ef2ec98..829e750d438 100644 --- a/spec/services/metrics/dashboard/project_dashboard_service_spec.rb +++ b/spec/services/metrics/dashboard/project_dashboard_service_spec.rb @@ -13,7 +13,7 @@ describe Metrics::Dashboard::ProjectDashboardService, :use_clean_rails_memory_st project.add_maintainer(user) end - describe 'get_dashboard' do + describe '#get_dashboard' do let(:dashboard_path) { '.gitlab/dashboards/test.yml' } let(:service_params) { [project, user, { environment: environment, dashboard_path: dashboard_path }] } let(:service_call) { described_class.new(*service_params).get_dashboard } @@ -62,7 +62,7 @@ describe Metrics::Dashboard::ProjectDashboardService, :use_clean_rails_memory_st end end - describe '::all_dashboard_paths' do + describe '.all_dashboard_paths' do let(:all_dashboards) { described_class.all_dashboard_paths(project) } context 'when there are no project dashboards' do @@ -87,4 +87,24 @@ describe Metrics::Dashboard::ProjectDashboardService, :use_clean_rails_memory_st end end end + + describe '.valid_params?' do + let(:params) { { dashboard_path: '.gitlab/dashboard/test.yml' } } + + subject { described_class.valid_params?(params) } + + it { is_expected.to be_truthy } + + context 'missing dashboard_path' do + let(:params) { {} } + + it { is_expected.to be_falsey } + end + + context 'empty dashboard_path' do + let(:params) { { dashboard_path: '' } } + + it { is_expected.to be_falsey } + end + end end diff --git a/spec/services/metrics/dashboard/system_dashboard_service_spec.rb b/spec/services/metrics/dashboard/system_dashboard_service_spec.rb index cc9f711c611..1956f9b563b 100644 --- a/spec/services/metrics/dashboard/system_dashboard_service_spec.rb +++ b/spec/services/metrics/dashboard/system_dashboard_service_spec.rb @@ -13,7 +13,7 @@ describe Metrics::Dashboard::SystemDashboardService, :use_clean_rails_memory_sto project.add_maintainer(user) end - describe 'get_dashboard' do + describe '#get_dashboard' do let(:dashboard_path) { described_class::DASHBOARD_PATH } let(:service_params) { [project, user, { environment: environment, dashboard_path: dashboard_path }] } let(:service_call) { described_class.new(*service_params).get_dashboard } @@ -30,7 +30,7 @@ describe Metrics::Dashboard::SystemDashboardService, :use_clean_rails_memory_sto end end - describe '::all_dashboard_paths' do + describe '.all_dashboard_paths' do it 'returns the dashboard attributes' do all_dashboards = described_class.all_dashboard_paths(project) @@ -44,4 +44,24 @@ describe Metrics::Dashboard::SystemDashboardService, :use_clean_rails_memory_sto ) end end + + describe '.valid_params?' do + let(:params) { { dashboard_path: described_class::DASHBOARD_PATH } } + + subject { described_class.valid_params?(params) } + + it { is_expected.to be_truthy } + + context 'missing dashboard_path' do + let(:params) { {} } + + it { is_expected.to be_falsey } + end + + context 'non-matching dashboard_path' do + let(:params) { { dashboard_path: 'path/to/bunk.yml' } } + + it { is_expected.to be_falsey } + end + end end |