From aabf412bc1f30cb12d97a077458d002c57cad8e9 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 25 Sep 2019 12:06:15 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .rubocop.yml | 6 +++++ app/assets/stylesheets/framework/typography.scss | 4 ---- app/helpers/nav_helper.rb | 1 - app/models/clusters/platforms/kubernetes.rb | 7 +++++- app/models/project_services/jira_service.rb | 8 +++---- app/services/issues/close_service.rb | 2 +- .../31728-nullify-cluster-namespace-if-blank.yml | 5 ++++ ...2396-collapsible-markdown-formatted-weirdly.yml | 5 ++++ .../unreleased/pages-per-project-size-limit-db.yml | 5 ++++ .../20190911115056_add_projects_max_pages_size.rb | 9 +++++++ ...20190911115109_add_namespaces_max_pages_size.rb | 9 +++++++ ...190911115207_add_projects_max_artifacts_size.rb | 9 +++++++ ...0911115222_add_namespaces_max_artifacts_size.rb | 9 +++++++ db/schema.rb | 4 ++++ lib/api/helpers/services_helpers.rb | 2 ++ lib/gitlab/import_export/import_export.yml | 2 ++ lib/gitlab/jira/http_client.rb | 4 ++-- locale/gitlab.pot | 6 +++++ spec/lib/gitlab/import_export/all_models.yml | 1 + spec/models/clusters/platforms/kubernetes_spec.rb | 15 +++++++++--- .../shared_contexts/services_shared_context.rb | 28 ++++++++++++++++++---- 21 files changed, 119 insertions(+), 22 deletions(-) create mode 100644 changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml create mode 100644 changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml create mode 100644 changelogs/unreleased/pages-per-project-size-limit-db.yml create mode 100644 db/migrate/20190911115056_add_projects_max_pages_size.rb create mode 100644 db/migrate/20190911115109_add_namespaces_max_pages_size.rb create mode 100644 db/migrate/20190911115207_add_projects_max_artifacts_size.rb create mode 100644 db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb diff --git a/.rubocop.yml b/.rubocop.yml index 693ee0ae847..45464ca3318 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -218,6 +218,12 @@ ActiveRecordAssociationReload: - 'spec/**/*' - 'ee/spec/**/*' +Naming/PredicateName: + Enabled: true + Exclude: + - 'spec/**/*' + - 'ee/spec/**/*' + RSpec/FactoriesInMigrationSpecs: Enabled: true Include: diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss index ba123ff9a67..03ddbfd9194 100644 --- a/app/assets/stylesheets/framework/typography.scss +++ b/app/assets/stylesheets/framework/typography.scss @@ -73,10 +73,6 @@ summary { margin-bottom: $gl-padding; } - - *:first-child:not(summary) { - margin-top: $gl-padding; - } } // Single code lines should wrap diff --git a/app/helpers/nav_helper.rb b/app/helpers/nav_helper.rb index 6aa910e6c3f..c6e9a20c5b2 100644 --- a/app/helpers/nav_helper.rb +++ b/app/helpers/nav_helper.rb @@ -20,7 +20,6 @@ module NavHelper def page_gutter_class if page_has_markdown? - if cookies[:collapsed_gutter] == 'true' %w[page-gutter right-sidebar-collapsed] else diff --git a/app/models/clusters/platforms/kubernetes.rb b/app/models/clusters/platforms/kubernetes.rb index aa2a7f3d7f1..d00a2984a60 100644 --- a/app/models/clusters/platforms/kubernetes.rb +++ b/app/models/clusters/platforms/kubernetes.rb @@ -23,11 +23,12 @@ module Clusters key: Settings.attr_encrypted_db_key_base_truncated, algorithm: 'aes-256-cbc' + before_validation :nullify_blank_namespace before_validation :enforce_namespace_to_lower_case before_validation :enforce_ca_whitespace_trimming validates :namespace, - allow_blank: true, + allow_nil: true, length: 1..63, format: { with: Gitlab::Regex.kubernetes_namespace_regex, @@ -190,6 +191,10 @@ module Clusters true end + + def nullify_blank_namespace + self.namespace = nil if namespace.blank? + end end end end diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index 86139c62f68..4a02da975f2 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -137,10 +137,9 @@ class JiraService < IssueTrackerService return if issue.nil? || has_resolution?(issue) || !jira_issue_transition_id.present? - commit_id = if entity.is_a?(Commit) - entity.id - elsif entity.is_a?(MergeRequest) - entity.diff_head_sha + commit_id = case entity + when Commit then entity.id + when MergeRequest then entity.diff_head_sha end commit_url = build_entity_url(:commit, commit_id) @@ -331,7 +330,6 @@ class JiraService < IssueTrackerService # Handle errors when doing Jira API calls def jira_request yield - rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, Errno::ECONNREFUSED, URI::InvalidURIError, JIRA::HTTPError, OpenSSL::SSL::SSLError => e @error = e.message log_error("Error sending message", client_url: client_url, error: @error) diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index 805721212ba..965351b5b6c 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -18,7 +18,7 @@ module Issues # The code calling this method is responsible for ensuring that a user is # allowed to close the given issue. def close_issue(issue, closed_via: nil, notifications: true, system_note: true) - if project.jira_tracker? && project.jira_service.active && issue.is_a?(ExternalIssue) + if project.jira_tracker_active? && issue.is_a?(ExternalIssue) project.jira_service.close_issue(closed_via, issue) todo_service.close_issue(issue, current_user) return issue diff --git a/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml b/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml new file mode 100644 index 00000000000..362d0c88eea --- /dev/null +++ b/changelogs/unreleased/31728-nullify-cluster-namespace-if-blank.yml @@ -0,0 +1,5 @@ +--- +title: Nullify platform Kubernetes namespace if blank +merge_request: 17657 +author: +type: fixed diff --git a/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml b/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml new file mode 100644 index 00000000000..49ee7ea6c0a --- /dev/null +++ b/changelogs/unreleased/32396-collapsible-markdown-formatted-weirdly.yml @@ -0,0 +1,5 @@ +--- +title: Fix css selector for details in issue description +merge_request: 17557 +author: +type: fixed diff --git a/changelogs/unreleased/pages-per-project-size-limit-db.yml b/changelogs/unreleased/pages-per-project-size-limit-db.yml new file mode 100644 index 00000000000..97a24b356e6 --- /dev/null +++ b/changelogs/unreleased/pages-per-project-size-limit-db.yml @@ -0,0 +1,5 @@ +--- +title: Add columns for per project/group max pages/artifacts sizes +merge_request: 17231 +author: +type: added diff --git a/db/migrate/20190911115056_add_projects_max_pages_size.rb b/db/migrate/20190911115056_add_projects_max_pages_size.rb new file mode 100644 index 00000000000..175c66953ed --- /dev/null +++ b/db/migrate/20190911115056_add_projects_max_pages_size.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddProjectsMaxPagesSize < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :projects, :max_pages_size, :integer + end +end diff --git a/db/migrate/20190911115109_add_namespaces_max_pages_size.rb b/db/migrate/20190911115109_add_namespaces_max_pages_size.rb new file mode 100644 index 00000000000..c14dfa74a5a --- /dev/null +++ b/db/migrate/20190911115109_add_namespaces_max_pages_size.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddNamespacesMaxPagesSize < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :namespaces, :max_pages_size, :integer + end +end diff --git a/db/migrate/20190911115207_add_projects_max_artifacts_size.rb b/db/migrate/20190911115207_add_projects_max_artifacts_size.rb new file mode 100644 index 00000000000..41cab7e5282 --- /dev/null +++ b/db/migrate/20190911115207_add_projects_max_artifacts_size.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddProjectsMaxArtifactsSize < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :projects, :max_artifacts_size, :integer + end +end diff --git a/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb b/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb new file mode 100644 index 00000000000..60c594c47a6 --- /dev/null +++ b/db/migrate/20190911115222_add_namespaces_max_artifacts_size.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +class AddNamespacesMaxArtifactsSize < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def change + add_column :namespaces, :max_artifacts_size, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 7703628d433..a4d244e556f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -2317,6 +2317,8 @@ ActiveRecord::Schema.define(version: 2019_09_19_162036) do t.integer "last_ci_minutes_usage_notification_level" t.integer "subgroup_creation_level", default: 1 t.boolean "emails_disabled" + t.integer "max_pages_size" + t.integer "max_artifacts_size" t.index ["created_at"], name: "index_namespaces_on_created_at" t.index ["custom_project_templates_group_id", "type"], name: "index_namespaces_on_custom_project_templates_group_id_and_type", where: "(custom_project_templates_group_id IS NOT NULL)" t.index ["file_template_project_id"], name: "index_namespaces_on_file_template_project_id" @@ -2909,6 +2911,8 @@ ActiveRecord::Schema.define(version: 2019_09_19_162036) do t.boolean "merge_requests_disable_committers_approval" t.boolean "require_password_to_approve" t.boolean "emails_disabled" + t.integer "max_pages_size" + t.integer "max_artifacts_size" t.index ["archived", "pending_delete", "merge_requests_require_code_owner_approval"], name: "projects_requiring_code_owner_approval", where: "((pending_delete = false) AND (archived = false) AND (merge_requests_require_code_owner_approval = true))" t.index ["created_at"], name: "index_projects_on_created_at" t.index ["creator_id"], name: "index_projects_on_creator_id" diff --git a/lib/api/helpers/services_helpers.rb b/lib/api/helpers/services_helpers.rb index eba4ebb4b6e..2475e384a50 100644 --- a/lib/api/helpers/services_helpers.rb +++ b/lib/api/helpers/services_helpers.rb @@ -155,6 +155,7 @@ module API def self.services { + 'alerts' => [], 'asana' => [ { required: true, @@ -696,6 +697,7 @@ module API def self.service_classes [ + ::AlertsService, ::AsanaService, ::AssemblaService, ::BambooService, diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml index 511b702553e..994aa95dc5e 100644 --- a/lib/gitlab/import_export/import_export.yml +++ b/lib/gitlab/import_export/import_export.yml @@ -143,6 +143,8 @@ excluded_attributes: - :mirror_last_update_at - :mirror_last_successful_update_at - :emails_disabled + - :max_pages_size + - :max_artifacts_size namespaces: - :runners_token - :runners_token_encrypted diff --git a/lib/gitlab/jira/http_client.rb b/lib/gitlab/jira/http_client.rb index 11a33a7b358..0c8b509740c 100644 --- a/lib/gitlab/jira/http_client.rb +++ b/lib/gitlab/jira/http_client.rb @@ -4,7 +4,7 @@ module Gitlab module Jira # Gitlab JIRA HTTP client to be used with jira-ruby gem, this subclasses JIRA::HTTPClient. # Uses Gitlab::HTTP to make requests to JIRA REST API. - # The parent class implementation can be found at: https://github.com/sumoheavy/jira-ruby/blob/v1.4.0/lib/jira/http_client.rb + # The parent class implementation can be found at: https://github.com/sumoheavy/jira-ruby/blob/v1.7.0/lib/jira/http_client.rb class HttpClient < JIRA::HttpClient extend ::Gitlab::Utils::Override @@ -24,7 +24,7 @@ module Gitlab password: @options.delete(:password) }.to_json - make_request(:post, @options[:context_path] + '/rest/auth/1/session', body, { 'Content-Type' => 'application/json' }) + make_request(:post, @options[:context_path] + '/rest/auth/1/session', body, 'Content-Type' => 'application/json') end override :make_request diff --git a/locale/gitlab.pot b/locale/gitlab.pot index 5ac4a2f1e32..ca62f137ac3 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -1234,6 +1234,9 @@ msgstr "" msgid "Alerts" msgstr "" +msgid "Alerts endpoint" +msgstr "" + msgid "All" msgstr "" @@ -12760,6 +12763,9 @@ msgstr "" msgid "Receive alerts from manually configured Prometheus servers." msgstr "" +msgid "Receive alerts on GitLab from any source" +msgstr "" + msgid "Receive notifications about your own activity" msgstr "" diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index 3315dd3b974..d9272afadf2 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -411,6 +411,7 @@ project: - project_aliases - external_pull_requests - pages_metadatum +- alerts_service award_emoji: - awardable - user diff --git a/spec/models/clusters/platforms/kubernetes_spec.rb b/spec/models/clusters/platforms/kubernetes_spec.rb index 64de6a8ab9b..40ea248c448 100644 --- a/spec/models/clusters/platforms/kubernetes_spec.rb +++ b/spec/models/clusters/platforms/kubernetes_spec.rb @@ -19,14 +19,23 @@ describe Clusters::Platforms::Kubernetes do it_behaves_like 'having unique enum values' describe 'before_validation' do + let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) } + context 'when namespace includes upper case' do - let(:kubernetes) { create(:cluster_platform_kubernetes, :configured, namespace: namespace) } let(:namespace) { 'ABC' } it 'converts to lower case' do expect(kubernetes.namespace).to eq('abc') end end + + context 'when namespace is blank' do + let(:namespace) { '' } + + it 'nullifies the namespace' do + expect(kubernetes.namespace).to be_nil + end + end end describe 'validation' do @@ -35,8 +44,8 @@ describe Clusters::Platforms::Kubernetes do context 'when validates namespace' do let(:kubernetes) { build(:cluster_platform_kubernetes, :configured, namespace: namespace) } - context 'when namespace is blank' do - let(:namespace) { '' } + context 'when namespace is nil' do + let(:namespace) { nil } it { is_expected.to be_truthy } end diff --git a/spec/support/shared_contexts/services_shared_context.rb b/spec/support/shared_contexts/services_shared_context.rb index 4d176ab5fca..113bcc2af9c 100644 --- a/spec/support/shared_contexts/services_shared_context.rb +++ b/spec/support/shared_contexts/services_shared_context.rb @@ -28,12 +28,17 @@ Service.available_services_names.each do |service| end end + let(:licensed_features) do + { + 'github' => :github_project_service_integration, + 'jenkins' => :jenkins_integration, + 'jenkins_deprecated' => :jenkins_integration, + 'alerts' => :incident_management + } + end + before do - if service == 'github' && respond_to?(:stub_licensed_features) - stub_licensed_features(github_project_service_integration: true) - project.clear_memoization(:disabled_services) - project.clear_memoization(:licensed_feature_available) - end + enable_license_for_service(service) end def initialize_service(service) @@ -42,5 +47,18 @@ Service.available_services_names.each do |service| service_item.save! service_item end + + private + + def enable_license_for_service(service) + return unless respond_to?(:stub_licensed_features) + + licensed_feature = licensed_features[service] + return unless licensed_feature + + stub_licensed_features(licensed_feature => true) + project.clear_memoization(:disabled_services) + project.clear_memoization(:licensed_feature_available) + end end end -- cgit v1.2.3