diff options
-rw-r--r-- | app/assets/stylesheets/pages/notes.scss | 5 | ||||
-rw-r--r-- | app/controllers/concerns/metrics_dashboard.rb | 63 | ||||
-rw-r--r-- | app/controllers/projects/environments_controller.rb | 49 | ||||
-rw-r--r-- | changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml | 5 | ||||
-rw-r--r-- | danger/specs/Dangerfile | 2 | ||||
-rw-r--r-- | doc/topics/git/troubleshooting_git.md | 9 | ||||
-rw-r--r-- | lib/gitlab/metrics/dashboard/finder.rb | 8 | ||||
-rw-r--r-- | locale/gitlab.pot | 24 | ||||
-rw-r--r-- | spec/controllers/concerns/metrics_dashboard_spec.rb | 58 |
9 files changed, 177 insertions, 46 deletions
diff --git a/app/assets/stylesheets/pages/notes.scss b/app/assets/stylesheets/pages/notes.scss index f4928627748..21a9f143039 100644 --- a/app/assets/stylesheets/pages/notes.scss +++ b/app/assets/stylesheets/pages/notes.scss @@ -355,10 +355,13 @@ $note-form-margin-left: 72px; } } + .timeline-icon { + float: left; + } + .system-note, .discussion-filter-note { .timeline-icon { - float: left; display: flex; align-items: center; background-color: $white-light; diff --git a/app/controllers/concerns/metrics_dashboard.rb b/app/controllers/concerns/metrics_dashboard.rb new file mode 100644 index 00000000000..62efdacb710 --- /dev/null +++ b/app/controllers/concerns/metrics_dashboard.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +# Provides an action which fetches a metrics dashboard according +# to the parameters specified by the controller. +module MetricsDashboard + extend ActiveSupport::Concern + + def metrics_dashboard + result = dashboard_finder.find( + project_for_dashboard, + current_user, + metrics_dashboard_params + ) + + if include_all_dashboards? + result[:all_dashboards] = dashboard_finder.find_all_paths(project_for_dashboard) + end + + respond_to do |format| + if result[:status] == :success + format.json { render dashboard_success_response(result) } + else + format.json { render dashboard_error_response(result) } + end + end + end + + private + + # Override in class to provide arguments to the finder. + def metrics_dashboard_params + {} + end + + # Override in class if response requires complete list of + # dashboards in addition to requested dashboard body. + def include_all_dashboards? + false + end + + def dashboard_finder + ::Gitlab::Metrics::Dashboard::Finder + end + + # Project is not defined for group and admin level clusters. + def project_for_dashboard + defined?(project) ? project : nil + end + + def dashboard_success_response(result) + { + status: :ok, + json: result.slice(:all_dashboards, :dashboard, :status) + } + end + + def dashboard_error_response(result) + { + status: result[:http_status], + json: result.slice(:all_dashboards, :message, :status) + } + end +end diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 841fc343b30..c053ca19a94 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Projects::EnvironmentsController < Projects::ApplicationController + include MetricsDashboard + layout 'project' before_action :authorize_read_environment! before_action :authorize_create_environment!, only: [:new, :create] @@ -158,42 +160,6 @@ class Projects::EnvironmentsController < Projects::ApplicationController end end - def metrics_dashboard - if params[:embedded] - result = dashboard_finder.find( - project, - current_user, - environment: environment, - dashboard_path: params[:dashboard], - **dashboard_params.to_h.symbolize_keys - ) - else - result = dashboard_finder.find( - project, - current_user, - environment: environment, - dashboard_path: params[:dashboard] - ) - - result[:all_dashboards] = dashboard_finder.find_all_paths(project) - end - - respond_to do |format| - if result[:status] == :success - format.json do - render status: :ok, json: result.slice(:all_dashboards, :dashboard, :status) - end - else - format.json do - render( - status: result[:http_status], - json: result.slice(:all_dashboards, :message, :status) - ) - end - end - end - end - def search respond_to do |format| format.json do @@ -231,12 +197,15 @@ class Projects::EnvironmentsController < Projects::ApplicationController params.require([:start, :end]) end - def dashboard_params - params.permit(:embedded, :group, :title, :y_label) + def metrics_dashboard_params + params + .permit(:embedded, :group, :title, :y_label) + .to_h.symbolize_keys + .merge(dashboard_path: params[:dashboard], environment: environment) end - def dashboard_finder - Gitlab::Metrics::Dashboard::Finder + def include_all_dashboards? + !params[:embedded] end def search_environment_names diff --git a/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml b/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml new file mode 100644 index 00000000000..5ff7f31d86b --- /dev/null +++ b/changelogs/unreleased/31030-when-viewing-comments-occasionally-the-users-profile-picture-will-b.yml @@ -0,0 +1,5 @@ +--- +title: Fix broken notes avatar rendering in Chrome 77 +merge_request: 18110 +author: +type: fixed diff --git a/danger/specs/Dangerfile b/danger/specs/Dangerfile index a526bb8adaa..50887c44b3e 100644 --- a/danger/specs/Dangerfile +++ b/danger/specs/Dangerfile @@ -1,6 +1,6 @@ # frozen_string_literal: true -NO_SPECS_LABELS = %w[backstage Documentation QA].freeze +NO_SPECS_LABELS = %w[backstage documentation QA].freeze NO_NEW_SPEC_MESSAGE = <<~MSG.freeze You've made some app changes, but didn't add any tests. That's OK as long as you're refactoring existing code, diff --git a/doc/topics/git/troubleshooting_git.md b/doc/topics/git/troubleshooting_git.md index 14dff7d38b1..5391f6e5ad6 100644 --- a/doc/topics/git/troubleshooting_git.md +++ b/doc/topics/git/troubleshooting_git.md @@ -22,8 +22,13 @@ To fix this issue, here are some possible solutions. ### Increase the POST buffer size in Git -**If pushing over HTTP**, you can try increasing the POST buffer size in Git's -configuration. Open a terminal and enter: +**If you're using Git over HTTP instead of SSH**, you can try increasing the POST buffer size in Git's +configuration. + +Example of an error during a clone: +`fatal: pack has bad object at offset XXXXXXXXX: inflate returned -5` + +Open a terminal and enter: ```sh git config http.postBuffer 52428800 diff --git a/lib/gitlab/metrics/dashboard/finder.rb b/lib/gitlab/metrics/dashboard/finder.rb index c3169418371..297f109ff81 100644 --- a/lib/gitlab/metrics/dashboard/finder.rb +++ b/lib/gitlab/metrics/dashboard/finder.rb @@ -20,13 +20,17 @@ module Gitlab # @param options - dashboard_path [String] Path at which the # dashboard can be found. Nil values will # default to the system dashboard. - # @param options - group [String] Title of the group + # @param options - group [String, Group] Title of the group # to which a panel might belong. Used by - # embedded dashboards. + # embedded dashboards. If cluster dashboard, + # refers to the Group corresponding to the cluster. # @param options - title [String] Title of the panel. # Used by embedded dashboards. # @param options - y_label [String] Y-Axis label of # a panel. Used by embedded dashboards. + # @param options - cluster [Cluster] + # @param options - cluster_type [Symbol] The level of + # cluster, one of [:admin, :project, :group] # @return [Hash] def find(project, user, options = {}) service_for(options) diff --git a/locale/gitlab.pot b/locale/gitlab.pot index a17d0460967..e94cde289b0 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -14063,15 +14063,30 @@ msgstr "" msgid "SecurityDashboard|%{firstProject}, %{secondProject}, and %{rest}" msgstr "" +msgid "SecurityDashboard|Add a project to your dashboard" +msgstr "" + +msgid "SecurityDashboard|Add or remove projects from your dashboard" +msgstr "" + +msgid "SecurityDashboard|Add projects" +msgstr "" + msgid "SecurityDashboard|Confidence" msgstr "" +msgid "SecurityDashboard|Edit dashboard" +msgstr "" + msgid "SecurityDashboard|Hide dismissed" msgstr "" msgid "SecurityDashboard|Monitor vulnerabilities in your code" msgstr "" +msgid "SecurityDashboard|More information" +msgstr "" + msgid "SecurityDashboard|Pipeline %{pipelineLink} triggered" msgstr "" @@ -14081,9 +14096,18 @@ msgstr "" msgid "SecurityDashboard|Report type" msgstr "" +msgid "SecurityDashboard|Return to dashboard" +msgstr "" + +msgid "SecurityDashboard|Security Dashboard" +msgstr "" + msgid "SecurityDashboard|Severity" msgstr "" +msgid "SecurityDashboard|The security dashboard displays the latest security findings for projects you wish to monitor. Select \"Edit dashboard\" to add and remove projects." +msgstr "" + msgid "SecurityDashboard|Unable to add %{invalidProjects}" msgstr "" diff --git a/spec/controllers/concerns/metrics_dashboard_spec.rb b/spec/controllers/concerns/metrics_dashboard_spec.rb new file mode 100644 index 00000000000..a71e34fd1ca --- /dev/null +++ b/spec/controllers/concerns/metrics_dashboard_spec.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe MetricsDashboard do + describe 'GET #metrics_dashboard' do + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, :repository) } + let_it_be(:environment) { create(:environment, project: project) } + + before do + sign_in(user) + project.add_maintainer(user) + end + + controller(::ApplicationController) do + include MetricsDashboard # rubocop:disable RSpec/DescribedClass + end + + let(:json_response) do + routes.draw { get "metrics_dashboard" => "anonymous#metrics_dashboard" } + response = get :metrics_dashboard, format: :json + + JSON.parse(response.parsed_body) + end + + context 'when no parameters are provided' do + it 'returns an error json_response' do + expect(json_response['status']).to eq('error') + end + end + + context 'when params are provided' do + before do + allow(controller).to receive(:project).and_return(project) + allow(controller) + .to receive(:metrics_dashboard_params) + .and_return(environment: environment) + end + + it 'returns the specified dashboard' do + expect(json_response['dashboard']['dashboard']).to eq('Environment metrics') + expect(json_response).not_to have_key('all_dashboards') + end + + context 'when parameters are provided and the list of all dashboards is required' do + before do + allow(controller).to receive(:include_all_dashboards?).and_return(true) + end + + it 'returns a dashboard in addition to the list of dashboards' do + expect(json_response['dashboard']['dashboard']).to eq('Environment metrics') + expect(json_response).to have_key('all_dashboards') + end + end + end + end +end |