From 3c49bcb602a38364d0034bfe927097bedbca986c Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Wed, 20 Jun 2018 11:23:33 +0100 Subject: [PATCH 01/12] Adds metrics to Operartions tab in projects sidebar --- app/controllers/projects/application_controller.rb | 5 +++++ app/controllers/projects_controller.rb | 1 + app/helpers/environments_helper.rb | 6 ++++++ app/views/layouts/nav/sidebar/_project.html.haml | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 5ab6d103c89..719a3c37f45 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -5,6 +5,7 @@ class Projects::ApplicationController < ApplicationController skip_before_action :authenticate_user! before_action :project before_action :repository + before_action :environment layout 'project' helper_method :repository, :can_collaborate_with_project?, :user_access @@ -32,6 +33,10 @@ class Projects::ApplicationController < ApplicationController @repository ||= project.repository end + def environment + @environment ||= project.environments.first + end + def authorize_action!(action) unless can?(current_user, action, project) return access_denied! diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index c2492a137fb..582e4d26685 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -8,6 +8,7 @@ class ProjectsController < Projects::ApplicationController before_action :redirect_git_extension, only: [:show] before_action :project, except: [:index, :new, :create] before_action :repository, except: [:index, :new, :create] + before_action :environment, except: [:index, :new, :create] before_action :assign_ref_vars, only: [:show], if: :repo_exists? before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?] before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?] diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index 4ce89f89fa9..ed6635a5f06 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -4,4 +4,10 @@ module EnvironmentsHelper endpoint: project_environments_path(@project, format: :json) } end + + def metrics_path(project, environment) + metrics_project_environment_path(project, environment) if environment + + project_environments_path(project) + end end diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 33416bf76d7..f516a7fefce 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -210,6 +210,11 @@ %li.divider.fly-out-top-item - if project_nav_tab? :environments + = nav_link(controller: [:environments, :metrics]) do + = link_to metrics_path(@project, @environment), title: 'Metrics', class: 'shortcuts-environments' do + %span + = _('Metrics') + = nav_link(controller: :environments) do = link_to project_environments_path(@project), title: 'Environments', class: 'shortcuts-environments' do %span From 55943872f43798b58009c4248d993cc8cb8d34cc Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Thu, 21 Jun 2018 10:05:25 +0100 Subject: [PATCH 02/12] Adds empty environments page --- app/controllers/projects/application_controller.rb | 6 +++--- app/controllers/projects/environments_controller.rb | 4 ++++ app/controllers/projects_controller.rb | 2 +- app/helpers/environments_helper.rb | 4 ++-- app/views/layouts/nav/sidebar/_project.html.haml | 2 +- app/views/projects/environments/empty.html.haml | 6 ++++++ config/routes/project.rb | 1 + 7 files changed, 18 insertions(+), 7 deletions(-) create mode 100644 app/views/projects/environments/empty.html.haml diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 719a3c37f45..5475e333db9 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -5,7 +5,7 @@ class Projects::ApplicationController < ApplicationController skip_before_action :authenticate_user! before_action :project before_action :repository - before_action :environment + before_action :available_environment layout 'project' helper_method :repository, :can_collaborate_with_project?, :user_access @@ -33,8 +33,8 @@ class Projects::ApplicationController < ApplicationController @repository ||= project.repository end - def environment - @environment ||= project.environments.first + def available_environment + @available_environment ||= project.environments.with_state(:available).first end def authorize_action!(action) diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 0821362f5df..47b2028860d 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -31,6 +31,10 @@ class Projects::EnvironmentsController < Projects::ApplicationController end end + def empty + render :empty + end + def folder folder_environments = project.environments.where(environment_type: params[:id]) @environments = folder_environments.with_state(params[:scope] || :available) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 582e4d26685..5a6ccd629d1 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -8,7 +8,7 @@ class ProjectsController < Projects::ApplicationController before_action :redirect_git_extension, only: [:show] before_action :project, except: [:index, :new, :create] before_action :repository, except: [:index, :new, :create] - before_action :environment, except: [:index, :new, :create] + before_action :available_environment, except: [:index, :new, :create] before_action :assign_ref_vars, only: [:show], if: :repo_exists? before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?] before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?] diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index ed6635a5f06..048175a5264 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -6,8 +6,8 @@ module EnvironmentsHelper end def metrics_path(project, environment) - metrics_project_environment_path(project, environment) if environment + return metrics_project_environment_path(project, environment) if environment - project_environments_path(project) + empty_project_environments_path(project) end end diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index f516a7fefce..d90ce99da8d 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -211,7 +211,7 @@ - if project_nav_tab? :environments = nav_link(controller: [:environments, :metrics]) do - = link_to metrics_path(@project, @environment), title: 'Metrics', class: 'shortcuts-environments' do + = link_to metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-environments' do %span = _('Metrics') diff --git a/app/views/projects/environments/empty.html.haml b/app/views/projects/environments/empty.html.haml new file mode 100644 index 00000000000..fc97afc1eab --- /dev/null +++ b/app/views/projects/environments/empty.html.haml @@ -0,0 +1,6 @@ +- page_title "Metrics" + +%h1 + No environments were found + += link_to "New Environment", new_project_environment_path(@project) diff --git a/config/routes/project.rb b/config/routes/project.rb index 6dfbd7ecd1f..702141749e8 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -235,6 +235,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do end collection do + get :empty get :folder, path: 'folders/*id', constraints: { format: /(html|json)/ } end From 1002f1c37b0b100f052ab58e7ff6bb9f4c063b90 Mon Sep 17 00:00:00 2001 From: Jose Date: Fri, 22 Jun 2018 16:45:01 -0500 Subject: [PATCH 03/12] Stylize empty state for when no environments are available --- app/views/projects/environments/empty.html.haml | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/app/views/projects/environments/empty.html.haml b/app/views/projects/environments/empty.html.haml index fc97afc1eab..34067979d4b 100644 --- a/app/views/projects/environments/empty.html.haml +++ b/app/views/projects/environments/empty.html.haml @@ -1,6 +1,14 @@ - page_title "Metrics" -%h1 - No environments were found - -= link_to "New Environment", new_project_environment_path(@project) +.row + .col-sm-12 + .svg-content + = image_tag 'illustrations/operations-metrics_empty.svg' +.row.empty-environments + .col-sm-12.text-center + %h4 + = s_('Metrics|No deployed environments') + .state-description + = s_('Metrics|Check out the CI/CD documentation on deploying to an environment') + .prepend-top-10 + = link_to "Learn about environments", help_page_path('ci/environments'), class: 'btn btn-success' From c4df74d1e1ba53996c0d64a8f8ef91712bbecf75 Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Mon, 25 Jun 2018 11:58:47 +0100 Subject: [PATCH 04/12] Rename sidebar metrics path --- app/helpers/environments_helper.rb | 4 ++-- app/views/layouts/nav/sidebar/_project.html.haml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index 048175a5264..9276d9b6ac5 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -5,8 +5,8 @@ module EnvironmentsHelper } end - def metrics_path(project, environment) - return metrics_project_environment_path(project, environment) if environment + def operations_metrics_path(project, environment) + return environment_metrics_path(environment) if environment empty_project_environments_path(project) end diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index d90ce99da8d..4096a0f4c31 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -211,7 +211,7 @@ - if project_nav_tab? :environments = nav_link(controller: [:environments, :metrics]) do - = link_to metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-environments' do + = link_to operations_metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-environments' do %span = _('Metrics') From 91463e52467d4b93d95693ac4eba1d5630ecdc98 Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Tue, 26 Jun 2018 10:36:16 +0100 Subject: [PATCH 05/12] Specify environment actions to distinguish between metrics and every other environment related actions --- .../projects/environments_controller.rb | 8 ++++---- .../projects/git_http_client_controller.rb | 1 + .../projects/uploads_controller.rb | 2 +- .../layouts/nav/sidebar/_project.html.haml | 6 +++--- .../projects/environments_controller_spec.rb | 10 ++++++++++ .../projects/user_uses_shortcuts_spec.rb | 8 ++++++++ spec/helpers/environments_helper_spec.rb | 19 +++++++++++++++++++ 7 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 spec/helpers/environments_helper_spec.rb diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 47b2028860d..decef19a0a2 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -31,10 +31,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController end end - def empty - render :empty - end - def folder folder_environments = project.environments.where(environment_type: params[:id]) @environments = folder_environments.with_state(params[:scope] || :available) @@ -124,6 +120,10 @@ class Projects::EnvironmentsController < Projects::ApplicationController end end + def empty + render :empty + end + def metrics # Currently, this acts as a hint to load the metrics details into the cache # if they aren't there already diff --git a/app/controllers/projects/git_http_client_controller.rb b/app/controllers/projects/git_http_client_controller.rb index 07249fe3182..199a8a4c4c5 100644 --- a/app/controllers/projects/git_http_client_controller.rb +++ b/app/controllers/projects/git_http_client_controller.rb @@ -15,6 +15,7 @@ class Projects::GitHttpClientController < Projects::ApplicationController # Git clients will not know what authenticity token to send along skip_before_action :verify_authenticity_token skip_before_action :repository + skip_before_action :available_environment before_action :authenticate_user private diff --git a/app/controllers/projects/uploads_controller.rb b/app/controllers/projects/uploads_controller.rb index f5cf089ad98..14e84f6a65f 100644 --- a/app/controllers/projects/uploads_controller.rb +++ b/app/controllers/projects/uploads_controller.rb @@ -2,7 +2,7 @@ class Projects::UploadsController < Projects::ApplicationController include UploadsActions # These will kick you out if you don't have access. - skip_before_action :project, :repository, + skip_before_action :project, :repository, :available_environment, if: -> { action_name == 'show' && image_or_video? } before_action :authorize_upload_file!, only: [:create] diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 4096a0f4c31..a1a14aec5c6 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -204,18 +204,18 @@ %ul.sidebar-sub-level-items = nav_link(controller: [:environments, :clusters, :user, :gcp], html_options: { class: "fly-out-top-item" } ) do - = link_to project_environments_path(@project) do + = link_to operations_metrics_path(@project, @available_environment) do %strong.fly-out-top-item-name = _('Operations') %li.divider.fly-out-top-item - if project_nav_tab? :environments - = nav_link(controller: [:environments, :metrics]) do + = nav_link(controller: :environments, action: [:metrics, :empty]) do = link_to operations_metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-environments' do %span = _('Metrics') - = nav_link(controller: :environments) do + = nav_link(controller: :environments, action: [:index, :folder, :show, :new, :edit, :create, :update, :stop, :terminal]) do = link_to project_environments_path(@project), title: 'Environments', class: 'shortcuts-environments' do %span = _('Environments') diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb index 47d4942acbd..36ebbc8a016 100644 --- a/spec/controllers/projects/environments_controller_spec.rb +++ b/spec/controllers/projects/environments_controller_spec.rb @@ -277,6 +277,16 @@ describe Projects::EnvironmentsController do end end + describe 'GET #empty' do + it 'responds with HTML' do + get :empty, namespace_id: project.namespace, + project_id: project + + expect(response).to be_ok + expect(response).to render_template 'empty' + end + end + describe 'GET #metrics' do before do allow(controller).to receive(:environment).and_return(environment) diff --git a/spec/features/projects/user_uses_shortcuts_spec.rb b/spec/features/projects/user_uses_shortcuts_spec.rb index 495a010b32c..806460ba4d4 100644 --- a/spec/features/projects/user_uses_shortcuts_spec.rb +++ b/spec/features/projects/user_uses_shortcuts_spec.rb @@ -110,6 +110,14 @@ describe 'User uses shortcuts', :js do end context 'when navigating to the Operations pages' do + it 'redirects to the Metrics page' do + find('body').native.send_key('g') + find('body').native.send_key('m') + + expect(page).to have_active_navigation('Operations') + expect(page).to have_active_sub_navigation('Metrics') + end + it 'redirects to the Environments page' do find('body').native.send_key('g') find('body').native.send_key('e') diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb new file mode 100644 index 00000000000..c6810f9003d --- /dev/null +++ b/spec/helpers/environments_helper_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe EnvironmentsHelper do + include ApplicationHelper + + describe 'operations_metrics_path' do + let(:project) { create(:project) } + + it 'returns empty metrics path when environment is nil' do + expect(helper.operations_metrics_path(project, nil)).to eq(empty_project_environments_path(project)) + end + + it 'returns environment metrics path when environment is passed' do + environment = create(:environment, project: project) + + expect(helper.operations_metrics_path(project, environment)).to eq(environment_metrics_path(environment)) + end + end +end From 50a11a339e65b23bd33e5ad937dbc39674093869 Mon Sep 17 00:00:00 2001 From: Jose Date: Tue, 26 Jun 2018 23:21:19 -0500 Subject: [PATCH 06/12] Fix metrics shortcut --- app/assets/javascripts/shortcuts_navigation.js | 1 + app/views/layouts/nav/sidebar/_project.html.haml | 2 +- app/views/projects/environments/empty.html.haml | 2 +- spec/features/projects/user_uses_shortcuts_spec.rb | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/shortcuts_navigation.js b/app/assets/javascripts/shortcuts_navigation.js index 78f7353eb0d..6b595764bc5 100644 --- a/app/assets/javascripts/shortcuts_navigation.js +++ b/app/assets/javascripts/shortcuts_navigation.js @@ -20,6 +20,7 @@ export default class ShortcutsNavigation extends Shortcuts { Mousetrap.bind('g s', () => findAndFollowLink('.shortcuts-snippets')); Mousetrap.bind('g k', () => findAndFollowLink('.shortcuts-kubernetes')); Mousetrap.bind('g e', () => findAndFollowLink('.shortcuts-environments')); + Mousetrap.bind('g l', () => findAndFollowLink('.shortcuts-metrics')); Mousetrap.bind('i', () => findAndFollowLink('.shortcuts-new-issue')); this.enabledHelp.push('.hidden-shortcut.project'); diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index a1a14aec5c6..7ff4bcebe27 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -211,7 +211,7 @@ - if project_nav_tab? :environments = nav_link(controller: :environments, action: [:metrics, :empty]) do - = link_to operations_metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-environments' do + = link_to operations_metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-metrics' do %span = _('Metrics') diff --git a/app/views/projects/environments/empty.html.haml b/app/views/projects/environments/empty.html.haml index 34067979d4b..b8ed6accecb 100644 --- a/app/views/projects/environments/empty.html.haml +++ b/app/views/projects/environments/empty.html.haml @@ -3,7 +3,7 @@ .row .col-sm-12 .svg-content - = image_tag 'illustrations/operations-metrics_empty.svg' + = image_tag 'illustrations/operations_metrics_empty.svg' .row.empty-environments .col-sm-12.text-center %h4 diff --git a/spec/features/projects/user_uses_shortcuts_spec.rb b/spec/features/projects/user_uses_shortcuts_spec.rb index 806460ba4d4..c8b3104b9fe 100644 --- a/spec/features/projects/user_uses_shortcuts_spec.rb +++ b/spec/features/projects/user_uses_shortcuts_spec.rb @@ -112,7 +112,7 @@ describe 'User uses shortcuts', :js do context 'when navigating to the Operations pages' do it 'redirects to the Metrics page' do find('body').native.send_key('g') - find('body').native.send_key('m') + find('body').native.send_key('l') expect(page).to have_active_navigation('Operations') expect(page).to have_active_sub_navigation('Metrics') From dd467d6c758b485938553f312ee276fd54e63384 Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Thu, 28 Jun 2018 11:54:02 +0200 Subject: [PATCH 07/12] Prevents project first environment from being fetched in every project view --- .../projects/application_controller.rb | 5 ----- .../projects/environments_controller.rb | 13 +++++++++++++ .../projects/git_http_client_controller.rb | 1 - .../projects/uploads_controller.rb | 2 +- app/controllers/projects_controller.rb | 1 - app/helpers/environments_helper.rb | 6 ------ .../layouts/nav/sidebar/_project.html.haml | 4 ++-- config/routes/project.rb | 1 + .../projects/environments_controller_spec.rb | 18 ++++++++++++++++++ spec/helpers/environments_helper_spec.rb | 19 ------------------- 10 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 spec/helpers/environments_helper_spec.rb diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 5475e333db9..5ab6d103c89 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -5,7 +5,6 @@ class Projects::ApplicationController < ApplicationController skip_before_action :authenticate_user! before_action :project before_action :repository - before_action :available_environment layout 'project' helper_method :repository, :can_collaborate_with_project?, :user_access @@ -33,10 +32,6 @@ class Projects::ApplicationController < ApplicationController @repository ||= project.repository end - def available_environment - @available_environment ||= project.environments.with_state(:available).first - end - def authorize_action!(action) unless can?(current_user, action, project) return access_denied! diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index decef19a0a2..53da384dc74 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -124,6 +124,19 @@ class Projects::EnvironmentsController < Projects::ApplicationController render :empty end + def metrics_redirect + environment = project.environments.with_state(:available).first + + path = + if environment + environment_metrics_path(environment) + else + empty_project_environments_path(project) + end + + redirect_to path + end + def metrics # Currently, this acts as a hint to load the metrics details into the cache # if they aren't there already diff --git a/app/controllers/projects/git_http_client_controller.rb b/app/controllers/projects/git_http_client_controller.rb index 199a8a4c4c5..07249fe3182 100644 --- a/app/controllers/projects/git_http_client_controller.rb +++ b/app/controllers/projects/git_http_client_controller.rb @@ -15,7 +15,6 @@ class Projects::GitHttpClientController < Projects::ApplicationController # Git clients will not know what authenticity token to send along skip_before_action :verify_authenticity_token skip_before_action :repository - skip_before_action :available_environment before_action :authenticate_user private diff --git a/app/controllers/projects/uploads_controller.rb b/app/controllers/projects/uploads_controller.rb index 14e84f6a65f..f5cf089ad98 100644 --- a/app/controllers/projects/uploads_controller.rb +++ b/app/controllers/projects/uploads_controller.rb @@ -2,7 +2,7 @@ class Projects::UploadsController < Projects::ApplicationController include UploadsActions # These will kick you out if you don't have access. - skip_before_action :project, :repository, :available_environment, + skip_before_action :project, :repository, if: -> { action_name == 'show' && image_or_video? } before_action :authorize_upload_file!, only: [:create] diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5a6ccd629d1..c2492a137fb 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -8,7 +8,6 @@ class ProjectsController < Projects::ApplicationController before_action :redirect_git_extension, only: [:show] before_action :project, except: [:index, :new, :create] before_action :repository, except: [:index, :new, :create] - before_action :available_environment, except: [:index, :new, :create] before_action :assign_ref_vars, only: [:show], if: :repo_exists? before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?] before_action :lfs_blob_ids, only: [:show], if: [:repo_exists?, :project_view_files?] diff --git a/app/helpers/environments_helper.rb b/app/helpers/environments_helper.rb index 9276d9b6ac5..4ce89f89fa9 100644 --- a/app/helpers/environments_helper.rb +++ b/app/helpers/environments_helper.rb @@ -4,10 +4,4 @@ module EnvironmentsHelper endpoint: project_environments_path(@project, format: :json) } end - - def operations_metrics_path(project, environment) - return environment_metrics_path(environment) if environment - - empty_project_environments_path(project) - end end diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index 7ff4bcebe27..a1763393d25 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -204,14 +204,14 @@ %ul.sidebar-sub-level-items = nav_link(controller: [:environments, :clusters, :user, :gcp], html_options: { class: "fly-out-top-item" } ) do - = link_to operations_metrics_path(@project, @available_environment) do + = link_to metrics_project_environments_path(@project) do %strong.fly-out-top-item-name = _('Operations') %li.divider.fly-out-top-item - if project_nav_tab? :environments = nav_link(controller: :environments, action: [:metrics, :empty]) do - = link_to operations_metrics_path(@project, @available_environment), title: 'Metrics', class: 'shortcuts-metrics' do + = link_to metrics_project_environments_path(@project), title: 'Metrics', class: 'shortcuts-metrics' do %span = _('Metrics') diff --git a/config/routes/project.rb b/config/routes/project.rb index 702141749e8..18685d3acfd 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -235,6 +235,7 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do end collection do + get :metrics, action: :metrics_redirect get :empty get :folder, path: 'folders/*id', constraints: { format: /(html|json)/ } end diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb index 36ebbc8a016..f6ce4c20d5b 100644 --- a/spec/controllers/projects/environments_controller_spec.rb +++ b/spec/controllers/projects/environments_controller_spec.rb @@ -287,6 +287,24 @@ describe Projects::EnvironmentsController do end end + describe 'GET #metrics_redirect' do + let(:project) { create(:project) } + + it 'redirects to environment if it exists' do + environment = create(:environment, name: 'production', project: project) + + get :metrics_redirect, environment_params + + expect(response).to redirect_to(environment_metrics_path(environment)) + end + + it 'redirects to empty page if no environment exists' do + get :metrics_redirect, environment_params + + expect(response).to redirect_to(empty_project_environments_path(project)) + end + end + describe 'GET #metrics' do before do allow(controller).to receive(:environment).and_return(environment) diff --git a/spec/helpers/environments_helper_spec.rb b/spec/helpers/environments_helper_spec.rb deleted file mode 100644 index c6810f9003d..00000000000 --- a/spec/helpers/environments_helper_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'spec_helper' - -describe EnvironmentsHelper do - include ApplicationHelper - - describe 'operations_metrics_path' do - let(:project) { create(:project) } - - it 'returns empty metrics path when environment is nil' do - expect(helper.operations_metrics_path(project, nil)).to eq(empty_project_environments_path(project)) - end - - it 'returns environment metrics path when environment is passed' do - environment = create(:environment, project: project) - - expect(helper.operations_metrics_path(project, environment)).to eq(environment_metrics_path(environment)) - end - end -end From c9a7145a100d24c6dbed98d11b0bc3af7a97cdb7 Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Fri, 29 Jun 2018 10:02:32 +0200 Subject: [PATCH 08/12] Remove GET empty from EnvironmentsController --- .../projects/environments_controller.rb | 17 +++++------------ .../layouts/nav/sidebar/_project.html.haml | 2 +- config/routes/project.rb | 1 - .../projects/environments_controller_spec.rb | 13 ++----------- 4 files changed, 8 insertions(+), 25 deletions(-) diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 53da384dc74..1a586105a6d 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -120,21 +120,14 @@ class Projects::EnvironmentsController < Projects::ApplicationController end end - def empty - render :empty - end - def metrics_redirect environment = project.environments.with_state(:available).first - path = - if environment - environment_metrics_path(environment) - else - empty_project_environments_path(project) - end - - redirect_to path + if environment + redirect_to environment_metrics_path(environment) + else + render :empty + end end def metrics diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index a1763393d25..bb34bbb4bde 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -210,7 +210,7 @@ %li.divider.fly-out-top-item - if project_nav_tab? :environments - = nav_link(controller: :environments, action: [:metrics, :empty]) do + = nav_link(controller: :environments, action: [:metrics, :metrics_redirect]) do = link_to metrics_project_environments_path(@project), title: 'Metrics', class: 'shortcuts-metrics' do %span = _('Metrics') diff --git a/config/routes/project.rb b/config/routes/project.rb index 18685d3acfd..286b96d765b 100644 --- a/config/routes/project.rb +++ b/config/routes/project.rb @@ -236,7 +236,6 @@ constraints(::Constraints::ProjectUrlConstrainer.new) do collection do get :metrics, action: :metrics_redirect - get :empty get :folder, path: 'folders/*id', constraints: { format: /(html|json)/ } end diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb index f6ce4c20d5b..cb561e24762 100644 --- a/spec/controllers/projects/environments_controller_spec.rb +++ b/spec/controllers/projects/environments_controller_spec.rb @@ -277,16 +277,6 @@ describe Projects::EnvironmentsController do end end - describe 'GET #empty' do - it 'responds with HTML' do - get :empty, namespace_id: project.namespace, - project_id: project - - expect(response).to be_ok - expect(response).to render_template 'empty' - end - end - describe 'GET #metrics_redirect' do let(:project) { create(:project) } @@ -301,7 +291,8 @@ describe Projects::EnvironmentsController do it 'redirects to empty page if no environment exists' do get :metrics_redirect, environment_params - expect(response).to redirect_to(empty_project_environments_path(project)) + expect(response).to be_ok + expect(response).to render_template 'empty' end end From 7923ad63c26d7d9575d4f449c420f9e8a9a0cb6b Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Fri, 29 Jun 2018 15:31:46 +0200 Subject: [PATCH 09/12] Changes Operations navigation path --- app/views/layouts/nav/sidebar/_project.html.haml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index bb34bbb4bde..e4fe82f7666 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -196,7 +196,7 @@ - if project_nav_tab? :operations = nav_link(controller: [:environments, :clusters, :user, :gcp]) do - = link_to project_environments_path(@project), class: 'shortcuts-operations' do + = link_to metrics_project_environments_path(@project), class: 'shortcuts-operations' do .nav-icon-container = sprite_icon('cloud-gear') %span.nav-item-name From 55e2df6c804202a39d0165289988062a693087aa Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Mon, 2 Jul 2018 13:02:06 +0100 Subject: [PATCH 10/12] Fixes backend specs --- spec/controllers/projects/environments_controller_spec.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec/controllers/projects/environments_controller_spec.rb b/spec/controllers/projects/environments_controller_spec.rb index cb561e24762..63cef579864 100644 --- a/spec/controllers/projects/environments_controller_spec.rb +++ b/spec/controllers/projects/environments_controller_spec.rb @@ -283,13 +283,13 @@ describe Projects::EnvironmentsController do it 'redirects to environment if it exists' do environment = create(:environment, name: 'production', project: project) - get :metrics_redirect, environment_params + get :metrics_redirect, namespace_id: project.namespace, project_id: project expect(response).to redirect_to(environment_metrics_path(environment)) end it 'redirects to empty page if no environment exists' do - get :metrics_redirect, environment_params + get :metrics_redirect, namespace_id: project.namespace, project_id: project expect(response).to be_ok expect(response).to render_template 'empty' From 99dea5fa13286346f8c7066d803eb04f4e989663 Mon Sep 17 00:00:00 2001 From: Tiago Botelho Date: Tue, 3 Jul 2018 10:17:07 +0100 Subject: [PATCH 11/12] Makes production environment the default environment for a project --- .../projects/environments_controller.rb | 2 +- app/models/project.rb | 9 ++++++++ spec/models/project_spec.rb | 22 +++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 1a586105a6d..27b7425b965 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -121,7 +121,7 @@ class Projects::EnvironmentsController < Projects::ApplicationController end def metrics_redirect - environment = project.environments.with_state(:available).first + environment = project.default_environment if environment redirect_to environment_metrics_path(environment) diff --git a/app/models/project.rb b/app/models/project.rb index d91d7dcfe9a..c2afd2dfec5 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1774,6 +1774,15 @@ class Project < ActiveRecord::Base end end + def default_environment + production_first = "(CASE WHEN name = 'production' THEN 0 ELSE 1 END), id ASC" + + environments + .with_state(:available) + .reorder(production_first) + .first + end + def secret_variables_for(ref:, environment: nil) # EE would use the environment if protected_for?(ref) diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index a2f8fac2f38..312164558fb 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2292,6 +2292,28 @@ describe Project do end end + describe '#default_environment' do + let(:project) { create(:project) } + + it 'returns production environment when it exists' do + production = create(:environment, name: "production", project: project) + create(:environment, name: 'staging', project: project) + + expect(project.default_environment).to eq(production) + end + + it 'returns first environment when no production environment exists' do + create(:environment, name: 'staging', project: project) + create(:environment, name: 'foo', project: project) + + expect(project.default_environment).to eq(project.environments.first) + end + + it 'returns nil when no available environment exists' do + expect(project.default_environment).to be_nil + end + end + describe '#secret_variables_for' do let(:project) { create(:project) } From 01248876d2a74e3a5eee5a55908c687da3b9600e Mon Sep 17 00:00:00 2001 From: Jose Date: Wed, 4 Jul 2018 10:56:36 -0500 Subject: [PATCH 12/12] Added shortcuts help, i18n --- app/views/help/_shortcuts.html.haml | 6 ++++++ app/views/layouts/nav/sidebar/_project.html.haml | 4 ++-- app/views/projects/environments/empty.html.haml | 4 ++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/views/help/_shortcuts.html.haml b/app/views/help/_shortcuts.html.haml index c23fe0b5c49..37b56f92030 100644 --- a/app/views/help/_shortcuts.html.haml +++ b/app/views/help/_shortcuts.html.haml @@ -179,6 +179,12 @@ %kbd e %td Go to environments + %tr + %td.shortcut + %kbd g + %kbd l + %td + Go to metrics %tr %td.shortcut %kbd g diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index e4fe82f7666..00d75b3399b 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -211,12 +211,12 @@ - if project_nav_tab? :environments = nav_link(controller: :environments, action: [:metrics, :metrics_redirect]) do - = link_to metrics_project_environments_path(@project), title: 'Metrics', class: 'shortcuts-metrics' do + = link_to metrics_project_environments_path(@project), title: _('Metrics'), class: 'shortcuts-metrics' do %span = _('Metrics') = nav_link(controller: :environments, action: [:index, :folder, :show, :new, :edit, :create, :update, :stop, :terminal]) do - = link_to project_environments_path(@project), title: 'Environments', class: 'shortcuts-environments' do + = link_to project_environments_path(@project), title: _('Environments'), class: 'shortcuts-environments' do %span = _('Environments') diff --git a/app/views/projects/environments/empty.html.haml b/app/views/projects/environments/empty.html.haml index b8ed6accecb..1413930ebdb 100644 --- a/app/views/projects/environments/empty.html.haml +++ b/app/views/projects/environments/empty.html.haml @@ -1,4 +1,4 @@ -- page_title "Metrics" +- page_title _("Metrics") .row .col-sm-12 @@ -11,4 +11,4 @@ .state-description = s_('Metrics|Check out the CI/CD documentation on deploying to an environment') .prepend-top-10 - = link_to "Learn about environments", help_page_path('ci/environments'), class: 'btn btn-success' + = link_to s_("Metrics|Learn about environments"), help_page_path('ci/environments'), class: 'btn btn-success'