From 226a8605473d8461d0d2c6b973ddea6e9b3fa6c6 Mon Sep 17 00:00:00 2001 From: Jose Vargas Date: Wed, 21 Oct 2020 16:07:59 -0500 Subject: [PATCH 1/4] Paginate project_runners in ci_cd settings This pagination applies to the project ci_cd settings page --- .../projects/settings/ci_cd_controller.rb | 6 ++++-- .../projects/runners/_specific_runners.html.haml | 1 + .../jivanvl-add-pagination-specific-runners.yml | 5 +++++ spec/features/runners_spec.rb | 13 +++++++++++++ 4 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 changelogs/unreleased/jivanvl-add-pagination-specific-runners.yml diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 8ac83edef8d263..738fd860d0c984 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -5,6 +5,8 @@ module Settings class CiCdController < Projects::ApplicationController include RunnerSetupScripts + NUMBER_OF_RUNNERS_PER_PAGE = 20 + before_action :authorize_admin_pipeline! before_action :define_variables before_action do @@ -108,13 +110,13 @@ def define_variables end def define_runners_variables - @project_runners = @project.runners.ordered + @project_runners = @project.runners.ordered.page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE) @assignable_runners = current_user .ci_owned_runners .assignable_for(project) .ordered - .page(params[:page]).per(20) + .page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE) @shared_runners = ::Ci::Runner.instance_type.active diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index d7fe141e802f16..aa99b99315a873 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -17,6 +17,7 @@ %h4.underlined-title= _('Runners activated for this project') %ul.bordered-list.activated-specific-runners = render partial: 'projects/runners/runner', collection: @project_runners, as: :runner + = paginate @project_runners, theme: "gitlab", :params => { :anchor => '#js-runners-settings' } - if @assignable_runners.any? %h4.underlined-title= _('Available specific runners') diff --git a/changelogs/unreleased/jivanvl-add-pagination-specific-runners.yml b/changelogs/unreleased/jivanvl-add-pagination-specific-runners.yml new file mode 100644 index 00000000000000..4f5a60c7ff6695 --- /dev/null +++ b/changelogs/unreleased/jivanvl-add-pagination-specific-runners.yml @@ -0,0 +1,5 @@ +--- +title: Paginate project_runners in ci_cd settings +merge_request: 45830 +author: +type: fixed diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb index 6e18de3be7ba29..9697e10c3d18c9 100644 --- a/spec/features/runners_spec.rb +++ b/spec/features/runners_spec.rb @@ -122,6 +122,19 @@ end end + context 'when multiple runners are configured' do + let!(:specific_runner) { create(:ci_runner, :project, projects: [project]) } + let!(:specific_runner_2) { create(:ci_runner, :project, projects: [project]) } + + it 'adds pagination to the runner list' do + stub_const('Projects::Settings::CiCdController::NUMBER_OF_RUNNERS_PER_PAGE', 1) + + visit project_runners_path(project) + + expect(find('.pagination')).not_to be_nil + end + end + context 'when a specific runner exists in another project' do let(:another_project) { create(:project) } let!(:specific_runner) { create(:ci_runner, :project, projects: [another_project]) } -- GitLab From 0fd3a912608250434536fbd4a4cff3b289b09b93 Mon Sep 17 00:00:00 2001 From: Jose Vargas Date: Wed, 21 Oct 2020 17:44:51 -0500 Subject: [PATCH 2/4] Addres N+1 queries --- app/controllers/projects/settings/ci_cd_controller.rb | 2 +- app/views/projects/runners/_runner.html.haml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 738fd860d0c984..ff0a61b7505c94 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -110,7 +110,7 @@ def define_variables end def define_runners_variables - @project_runners = @project.runners.ordered.page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE) + @project_runners = @project.runners.ordered.page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE).with_tags @assignable_runners = current_user .ci_owned_runners diff --git a/app/views/projects/runners/_runner.html.haml b/app/views/projects/runners/_runner.html.haml index 74b6e981c008a0..1a3ba69018468a 100644 --- a/app/views/projects/runners/_runner.html.haml +++ b/app/views/projects/runners/_runner.html.haml @@ -37,8 +37,8 @@ - if runner.description.present? %p.runner-description = runner.description - - if runner.tag_list.present? + - if runner.tags.present? %p - - runner.tag_list.sort.each do |tag| + - runner.tags.map(&:name).sort.each do |tag| %span.badge.badge-primary = tag -- GitLab From bb3349869ef2d99974aeb834c926dafb57402547 Mon Sep 17 00:00:00 2001 From: Jose Vargas Date: Thu, 22 Oct 2020 11:52:19 -0500 Subject: [PATCH 3/4] Add expand_runners variable This allows the corresponding settings section to remain uncollapsed --- app/views/projects/runners/_specific_runners.html.haml | 2 +- app/views/projects/settings/ci_cd/show.html.haml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index aa99b99315a873..af2272d4699cf1 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -17,7 +17,7 @@ %h4.underlined-title= _('Runners activated for this project') %ul.bordered-list.activated-specific-runners = render partial: 'projects/runners/runner', collection: @project_runners, as: :runner - = paginate @project_runners, theme: "gitlab", :params => { :anchor => '#js-runners-settings' } + = paginate @project_runners, theme: "gitlab", params: { expand_runners: true, anchor: '#js-runners-settings' } - if @assignable_runners.any? %h4.underlined-title= _('Available specific runners') diff --git a/app/views/projects/settings/ci_cd/show.html.haml b/app/views/projects/settings/ci_cd/show.html.haml index 31669a11b8e7e4..f6ecb923100360 100644 --- a/app/views/projects/settings/ci_cd/show.html.haml +++ b/app/views/projects/settings/ci_cd/show.html.haml @@ -33,7 +33,7 @@ = render_if_exists 'projects/settings/ci_cd/protected_environments', expanded: expanded -%section.settings.no-animate#js-runners-settings{ class: ('expanded' if expanded), data: { qa_selector: 'runners_settings_content' } } +%section.settings.no-animate#js-runners-settings{ class: ('expanded' if expanded || params[:expand_runners]), data: { qa_selector: 'runners_settings_content' } } .settings-header %h4 = _("Runners") -- GitLab From 2e7f8cfdb1e5db731c457d3ca85dbd97fb14dc4d Mon Sep 17 00:00:00 2001 From: Adrien Kohlbecker Date: Tue, 10 Nov 2020 15:02:22 +0100 Subject: [PATCH 4/4] Separate paginated areas --- app/controllers/projects/settings/ci_cd_controller.rb | 4 ++-- app/views/projects/runners/_specific_runners.html.haml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index ff0a61b7505c94..f76278a12a4100 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -110,13 +110,13 @@ def define_variables end def define_runners_variables - @project_runners = @project.runners.ordered.page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE).with_tags + @project_runners = @project.runners.ordered.page(params[:project_page]).per(NUMBER_OF_RUNNERS_PER_PAGE).with_tags @assignable_runners = current_user .ci_owned_runners .assignable_for(project) .ordered - .page(params[:page]).per(NUMBER_OF_RUNNERS_PER_PAGE) + .page(params[:specific_page]).per(NUMBER_OF_RUNNERS_PER_PAGE) @shared_runners = ::Ci::Runner.instance_type.active diff --git a/app/views/projects/runners/_specific_runners.html.haml b/app/views/projects/runners/_specific_runners.html.haml index af2272d4699cf1..e02e2cc784a020 100644 --- a/app/views/projects/runners/_specific_runners.html.haml +++ b/app/views/projects/runners/_specific_runners.html.haml @@ -17,10 +17,10 @@ %h4.underlined-title= _('Runners activated for this project') %ul.bordered-list.activated-specific-runners = render partial: 'projects/runners/runner', collection: @project_runners, as: :runner - = paginate @project_runners, theme: "gitlab", params: { expand_runners: true, anchor: '#js-runners-settings' } + = paginate @project_runners, theme: "gitlab", param_name: "project_page", params: { expand_runners: true, anchor: 'js-runners-settings' } - if @assignable_runners.any? %h4.underlined-title= _('Available specific runners') %ul.bordered-list.available-specific-runners = render partial: 'projects/runners/runner', collection: @assignable_runners, as: :runner - = paginate @assignable_runners, theme: "gitlab", :params => { :anchor => '#js-runners-settings' } + = paginate @assignable_runners, theme: "gitlab", param_name: "specific_page", :params => { :anchor => 'js-runners-settings'} -- GitLab