From bffcdf9bca11a4d43cc40e3f382f03088d36f7c6 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Mon, 2 Dec 2019 12:06:45 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../monitoring/components/dashboard.vue | 12 +- app/assets/javascripts/monitoring/utils.js | 13 ++ app/assets/stylesheets/pages/tree.scss | 1 - .../projects/error_tracking_controller.rb | 3 +- app/helpers/application_settings_helper.rb | 3 +- app/models/application_setting.rb | 2 + .../application_setting_implementation.rb | 6 +- .../project_error_tracking_setting.rb | 2 +- app/models/project.rb | 1 + .../project_services/unify_circuit_service.rb | 60 ++++++ app/models/service.rb | 1 + app/models/snippet.rb | 12 ++ .../error_tracking/list_issues_service.rb | 47 ++--- app/views/projects/artifacts/browse.html.haml | 2 +- app/views/projects/blob/_breadcrumb.html.haml | 28 ++- .../projects/buttons/_dropdown.html.haml | 2 +- app/views/projects/commits/show.html.haml | 2 +- .../projects/tree/_tree_header.html.haml | 21 +- ...s-for-monitor-apm-add-metric-button-fe.yml | 5 + ...l-buttons-misbehave-on-small-viewports.yml | 5 + ...de-rack-attack-default-paths-migration.yml | 5 + .../feat-circuit-project-service.yml | 5 + ...ter-for-project-and-group-audit-events.yml | 5 + .../fj-31133-snippet-content-size-limit.yml | 5 + changelogs/unreleased/helm_values_default.yml | 5 + ...ppet_size_limit_to_application_settings.rb | 13 ++ ...125114345_add_admin_mode_protected_path.rb | 54 +++++ db/schema.rb | 3 +- doc/administration/index.md | 4 + doc/administration/snippets/index.md | 71 +++++++ doc/api/services.md | 48 +++++ doc/api/settings.md | 1 + doc/ci/jenkins/index.md | 2 +- doc/ci/merge_request_pipelines/index.md | 6 +- doc/ci/yaml/README.md | 4 +- doc/development/documentation/styleguide.md | 2 +- .../merge_request_performance_guidelines.md | 48 +++++ doc/security/rack_attack.md | 3 +- doc/topics/autodevops/index.md | 20 +- .../admin_area/settings/protected_paths.md | 3 +- .../img/unify_circuit_configuration.png | Bin 0 -> 274416 bytes .../project/integrations/project_services.md | 1 + .../project/integrations/unify_circuit.md | 27 +++ .../merge_when_pipeline_succeeds.md | 2 +- lib/api/helpers/services_helpers.rb | 17 +- lib/gitaly/server.rb | 14 +- .../ci/templates/Jobs/Deploy.gitlab-ci.yml | 2 +- lib/gitlab/database/migration_helpers.rb | 53 +++-- lib/sentry/client.rb | 36 ++-- lib/sentry/pagination_parser.rb | 23 +++ locale/gitlab.pot | 6 + qa/Gemfile | 4 +- qa/Gemfile.lock | 38 ++-- qa/qa/page/base.rb | 4 + qa/qa/page/project/pipeline/index.rb | 6 +- qa/qa/runtime/browser.rb | 4 + .../repository/add_file_template_spec.rb | 18 +- .../web_ide/add_file_template_spec.rb | 16 +- .../error_tracking_controller_spec.rb | 32 +-- .../api/schemas/error_tracking/index.json | 4 + .../pipelines/graph/action_component_spec.js | 1 + .../pipelines/pipeline_triggerer_spec.js | 28 +-- spec/lib/gitaly/server_spec.rb | 22 +++ .../gitlab/database/migration_helpers_spec.rb | 186 ++++++++++++++---- spec/lib/gitlab/import_export/all_models.yml | 1 + spec/lib/sentry/client_spec.rb | 58 +++++- spec/lib/sentry/pagination_parser_spec.rb | 63 ++++++ ...4345_add_admin_mode_protected_path_spec.rb | 50 +++++ spec/models/application_setting_spec.rb | 2 + .../project_error_tracking_setting_spec.rb | 4 +- .../unify_circuit_service_spec.rb | 10 + spec/models/project_spec.rb | 1 + spec/models/snippet_spec.rb | 56 ++++++ spec/requests/api/settings_spec.rb | 5 +- .../list_issues_service_spec.rb | 11 +- .../models/chat_service_shared_examples.rb | 2 +- 76 files changed, 1095 insertions(+), 247 deletions(-) create mode 100644 app/models/project_services/unify_circuit_service.rb create mode 100644 changelogs/unreleased/36955-snowplow-custom-events-for-monitor-apm-add-metric-button-fe.yml create mode 100644 changelogs/unreleased/37680-tree-control-buttons-misbehave-on-small-viewports.yml create mode 100644 changelogs/unreleased/chore-admin-mode-rack-attack-default-paths-migration.yml create mode 100644 changelogs/unreleased/feat-circuit-project-service.yml create mode 100644 changelogs/unreleased/filter-for-project-and-group-audit-events.yml create mode 100644 changelogs/unreleased/fj-31133-snippet-content-size-limit.yml create mode 100644 changelogs/unreleased/helm_values_default.yml create mode 100644 db/migrate/20191118173522_add_snippet_size_limit_to_application_settings.rb create mode 100644 db/migrate/20191125114345_add_admin_mode_protected_path.rb create mode 100644 doc/administration/snippets/index.md create mode 100644 doc/user/project/integrations/img/unify_circuit_configuration.png create mode 100644 doc/user/project/integrations/unify_circuit.md create mode 100644 lib/sentry/pagination_parser.rb create mode 100644 spec/lib/sentry/pagination_parser_spec.rb create mode 100644 spec/migrations/20191125114345_add_admin_mode_protected_path_spec.rb create mode 100644 spec/models/project_services/unify_circuit_service_spec.rb diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue index 823ea9e1641..c08b471bd51 100644 --- a/app/assets/javascripts/monitoring/components/dashboard.vue +++ b/app/assets/javascripts/monitoring/components/dashboard.vue @@ -11,18 +11,19 @@ import { GlModalDirective, GlTooltipDirective, } from '@gitlab/ui'; +import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue'; import { s__ } from '~/locale'; import createFlash from '~/flash'; import Icon from '~/vue_shared/components/icon.vue'; import { getParameterValues, mergeUrlParams, redirectTo } from '~/lib/utils/url_utility'; import invalidUrl from '~/lib/utils/invalid_url'; -import PanelType from 'ee_else_ce/monitoring/components/panel_type.vue'; import DateTimePicker from './date_time_picker/date_time_picker.vue'; import MonitorTimeSeriesChart from './charts/time_series.vue'; import MonitorSingleStatChart from './charts/single_stat.vue'; import GraphGroup from './graph_group.vue'; import EmptyState from './empty_state.vue'; -import { getTimeDiff, isValidDate } from '../utils'; +import TrackEventDirective from '~/vue_shared/directives/track_event'; +import { getTimeDiff, isValidDate, getAddMetricTrackingOptions } from '../utils'; export default { components: { @@ -43,6 +44,7 @@ export default { directives: { GlModal: GlModalDirective, GlTooltip: GlTooltipDirective, + TrackEvent: TrackEventDirective, }, props: { externalDashboardUrl: { @@ -298,6 +300,7 @@ export default { onDateTimePickerApply(timeWindowUrlParams) { return redirectTo(mergeUrlParams(timeWindowUrlParams, window.location.href)); }, + getAddMetricTrackingOptions, }, addMetric: { title: s__('Metrics|Add metric'), @@ -389,9 +392,10 @@ export default { {{ $options.addMetric.title }} @@ -411,6 +415,8 @@ export default {
{{ __('Cancel') }} { /** * Tracks snowplow event when user downloads CSV of cluster metric * @param {String} chart title that will be sent as a property for the event + * @return {Object} config object for event tracking */ export const downloadCSVOptions = title => { const isCLusterHealthBoard = isClusterHealthBoard(); @@ -129,6 +130,18 @@ export const downloadCSVOptions = title => { return { category, action, label: 'Chart title', property: title }; }; +/** + * Generate options for snowplow to track adding a new metric via the dashboard + * custom metric modal + * @return {Object} config object for event tracking + */ +export const getAddMetricTrackingOptions = () => ({ + category: document.body.dataset.page, + action: 'click_button', + label: 'add_new_metric', + property: 'modal', +}); + /** * This function validates the graph data contains exactly 3 metrics plus * value validations from graphDataValidatorForValues. diff --git a/app/assets/stylesheets/pages/tree.scss b/app/assets/stylesheets/pages/tree.scss index 6e7081aa4ec..79ad0bd7735 100644 --- a/app/assets/stylesheets/pages/tree.scss +++ b/app/assets/stylesheets/pages/tree.scss @@ -15,7 +15,6 @@ } .tree-controls { - display: flex; text-align: right; .btn { diff --git a/app/controllers/projects/error_tracking_controller.rb b/app/controllers/projects/error_tracking_controller.rb index 78d3854e72d..56a66dd38db 100644 --- a/app/controllers/projects/error_tracking_controller.rb +++ b/app/controllers/projects/error_tracking_controller.rb @@ -55,6 +55,7 @@ class Projects::ErrorTrackingController < Projects::ApplicationController render json: { errors: serialize_errors(result[:issues]), + pagination: result[:pagination], external_url: service.external_url } end @@ -111,7 +112,7 @@ class Projects::ErrorTrackingController < Projects::ApplicationController end def list_issues_params - params.permit([:search_term, :sort]) + params.permit(:search_term, :sort, :cursor) end def list_projects_params diff --git a/app/helpers/application_settings_helper.rb b/app/helpers/application_settings_helper.rb index a011209375e..d9416cb10c4 100644 --- a/app/helpers/application_settings_helper.rb +++ b/app/helpers/application_settings_helper.rb @@ -301,7 +301,8 @@ module ApplicationSettingsHelper :snowplow_iglu_registry_url, :push_event_hooks_limit, :push_event_activities_limit, - :custom_http_clone_url_root + :custom_http_clone_url_root, + :snippet_size_limit ] end diff --git a/app/models/application_setting.rb b/app/models/application_setting.rb index c681d941e35..4ba0317b580 100644 --- a/app/models/application_setting.rb +++ b/app/models/application_setting.rb @@ -226,6 +226,8 @@ class ApplicationSetting < ApplicationRecord validates :push_event_activities_limit, numericality: { greater_than_or_equal_to: 0 } + validates :snippet_size_limit, numericality: { only_integer: true, greater_than: 0 } + SUPPORTED_KEY_TYPES.each do |type| validates :"#{type}_key_restriction", presence: true, key_restriction: { type: type } end diff --git a/app/models/application_setting_implementation.rb b/app/models/application_setting_implementation.rb index 7bb89f0d1e2..e1eb8d429bb 100644 --- a/app/models/application_setting_implementation.rb +++ b/app/models/application_setting_implementation.rb @@ -26,7 +26,8 @@ module ApplicationSettingImplementation '/users', '/users/confirmation', '/unsubscribes/', - '/import/github/personal_access_token' + '/import/github/personal_access_token', + '/admin/session' ].freeze class_methods do @@ -139,7 +140,8 @@ module ApplicationSettingImplementation snowplow_app_id: nil, snowplow_iglu_registry_url: nil, custom_http_clone_url_root: nil, - productivity_analytics_start_date: Time.now + productivity_analytics_start_date: Time.now, + snippet_size_limit: 50.megabytes } end diff --git a/app/models/error_tracking/project_error_tracking_setting.rb b/app/models/error_tracking/project_error_tracking_setting.rb index 5b5c1b1b56b..3af14d7eef2 100644 --- a/app/models/error_tracking/project_error_tracking_setting.rb +++ b/app/models/error_tracking/project_error_tracking_setting.rb @@ -104,7 +104,7 @@ module ErrorTracking def calculate_reactive_cache(request, opts) case request when 'list_issues' - { issues: sentry_client.list_issues(**opts.symbolize_keys) } + sentry_client.list_issues(**opts.symbolize_keys) when 'issue_details' { issue: sentry_client.issue_details(**opts.symbolize_keys) diff --git a/app/models/project.rb b/app/models/project.rb index b452f05c590..e3e10d17cc0 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -170,6 +170,7 @@ class Project < ApplicationRecord has_one :microsoft_teams_service has_one :packagist_service has_one :hangouts_chat_service + has_one :unify_circuit_service has_one :root_of_fork_network, foreign_key: 'root_project_id', diff --git a/app/models/project_services/unify_circuit_service.rb b/app/models/project_services/unify_circuit_service.rb new file mode 100644 index 00000000000..06f2d10f83b --- /dev/null +++ b/app/models/project_services/unify_circuit_service.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true + +class UnifyCircuitService < ChatNotificationService + def title + 'Unify Circuit' + end + + def description + 'Receive event notifications in Unify Circuit' + end + + def self.to_param + 'unify_circuit' + end + + def help + 'This service sends notifications about projects events to a Unify Circuit conversation.
+ To set up this service: +
    +
  1. Set up an incoming webhook for your conversation. All notifications will come to this conversation.
  2. +
  3. Paste the Webhook URL into the field below.
  4. +
  5. Select events below to enable notifications.
  6. +
' + end + + def event_field(event) + end + + def default_channel_placeholder + end + + def self.supported_events + %w[push issue confidential_issue merge_request note confidential_note tag_push + pipeline wiki_page] + end + + def default_fields + [ + { type: 'text', name: 'webhook', placeholder: "e.g. https://circuit.com/rest/v2/webhooks/incoming/…", required: true }, + { type: 'checkbox', name: 'notify_only_broken_pipelines' }, + { type: 'select', name: 'branches_to_be_notified', choices: BRANCH_CHOICES } + ] + end + + private + + def notify(message, opts) + response = Gitlab::HTTP.post(webhook, body: { + subject: message.project_name, + text: message.pretext, + markdown: true + }.to_json) + + response if response.success? + end + + def custom_data(data) + super(data).merge(markdown: true) + end +end diff --git a/app/models/service.rb b/app/models/service.rb index 08936f7fcbd..95b7c6927cf 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -289,6 +289,7 @@ class Service < ApplicationRecord slack teamcity microsoft_teams + unify_circuit ] if Rails.env.development? diff --git a/app/models/snippet.rb b/app/models/snippet.rb index 51ab94e6f4a..b802ea2fd59 100644 --- a/app/models/snippet.rb +++ b/app/models/snippet.rb @@ -46,6 +46,18 @@ class Snippet < ApplicationRecord length: { maximum: 255 } validates :content, presence: true + validates :content, + length: { + maximum: ->(_) { Gitlab::CurrentSettings.snippet_size_limit }, + message: -> (_, data) do + current_value = ActiveSupport::NumberHelper.number_to_human_size(data[:value].size) + max_size = ActiveSupport::NumberHelper.number_to_human_size(Gitlab::CurrentSettings.snippet_size_limit) + + _("is too long (%{current_value}). The maximum size is %{max_size}.") % { current_value: current_value, max_size: max_size } + end + }, + if: :content_changed? + validates :visibility_level, inclusion: { in: Gitlab::VisibilityLevel.values } # Scopes diff --git a/app/services/error_tracking/list_issues_service.rb b/app/services/error_tracking/list_issues_service.rb index a2c8e6e6619..132e9dfa7bd 100644 --- a/app/services/error_tracking/list_issues_service.rb +++ b/app/services/error_tracking/list_issues_service.rb @@ -6,37 +6,24 @@ module ErrorTracking DEFAULT_LIMIT = 20 DEFAULT_SORT = 'last_seen' - def execute - return error('Error Tracking is not enabled') unless enabled? - return error('Access denied', :unauthorized) unless can_read? - - result = project_error_tracking_setting.list_sentry_issues( - issue_status: issue_status, - limit: limit, - search_term: search_term, - sort: sort - ) - - # our results are not yet ready - unless result - return error('Not ready. Try again later', :no_content) - end - - if result[:error].present? - return error(result[:error], http_status_for(result[:error_type])) - end - - success(issues: result[:issues]) - end - def external_url project_error_tracking_setting&.sentry_external_url end private + def fetch + project_error_tracking_setting.list_sentry_issues( + issue_status: issue_status, + limit: limit, + search_term: params[:search_term].presence, + sort: sort, + cursor: params[:cursor].presence + ) + end + def parse_response(response) - { issues: response[:issues] } + response.slice(:issues, :pagination) end def issue_status @@ -47,18 +34,6 @@ module ErrorTracking params[:limit] || DEFAULT_LIMIT end - def search_term - params[:search_term].presence - end - - def enabled? - project_error_tracking_setting&.enabled? - end - - def can_read? - can?(current_user, :read_sentry_issue, project) - end - def sort params[:sort] || DEFAULT_SORT end diff --git a/app/views/projects/artifacts/browse.html.haml b/app/views/projects/artifacts/browse.html.haml index 6a7cb1499c5..7abac2d14e4 100644 --- a/app/views/projects/artifacts/browse.html.haml +++ b/app/views/projects/artifacts/browse.html.haml @@ -15,7 +15,7 @@ %li.breadcrumb-item = link_to truncate(title, length: 40), browse_project_job_artifacts_path(@project, @build, path) - .tree-controls + .tree-controls< = link_to download_project_job_artifacts_path(@project, @build), rel: 'nofollow', download: '', class: 'btn btn-default download' do = sprite_icon('download') diff --git a/app/views/projects/blob/_breadcrumb.html.haml b/app/views/projects/blob/_breadcrumb.html.haml index a4fb5f6ba88..e611df8df2a 100644 --- a/app/views/projects/blob/_breadcrumb.html.haml +++ b/app/views/projects/blob/_breadcrumb.html.haml @@ -17,21 +17,19 @@ - else = link_to title, project_tree_path(@project, tree_join(@ref, path)) - .tree-controls + .tree-controls< = render 'projects/find_file_link' + -# only show normal/blame view links for text files + - if blob.readable_text? + - if blame + = link_to 'Normal view', project_blob_path(@project, @id), + class: 'btn' + - else + = link_to 'Blame', project_blame_path(@project, @id), + class: 'btn js-blob-blame-link' unless blob.empty? - .btn-group{ role: "group" }< - -# only show normal/blame view links for text files - - if blob.readable_text? - - if blame - = link_to 'Normal view', project_blob_path(@project, @id), - class: 'btn' - - else - = link_to 'Blame', project_blame_path(@project, @id), - class: 'btn js-blob-blame-link' unless blob.empty? + = link_to 'History', project_commits_path(@project, @id), + class: 'btn' - = link_to 'History', project_commits_path(@project, @id), - class: 'btn' - - = link_to 'Permalink', project_blob_path(@project, - tree_join(@commit.sha, @path)), class: 'btn js-data-file-blob-permalink-url' + = link_to 'Permalink', project_blob_path(@project, + tree_join(@commit.sha, @path)), class: 'btn js-data-file-blob-permalink-url' diff --git a/app/views/projects/buttons/_dropdown.html.haml b/app/views/projects/buttons/_dropdown.html.haml index bbe0a2c97fd..f1a7528065a 100644 --- a/app/views/projects/buttons/_dropdown.html.haml +++ b/app/views/projects/buttons/_dropdown.html.haml @@ -7,7 +7,7 @@ - show_menu = can_create_issue || can_create_project_snippet || can_push_code || create_mr_from_new_fork || merge_project - if show_menu - .project-action-button.dropdown.inline + .project-action-button.dropdown.inline< %a.btn.dropdown-toggle.has-tooltip.qa-create-new-dropdown{ href: '#', title: _('Create new...'), 'data-toggle' => 'dropdown', 'data-container' => 'body', 'aria-label' => _('Create new...'), 'data-display' => 'static' } = icon('plus') = icon("caret-down") diff --git a/app/views/projects/commits/show.html.haml b/app/views/projects/commits/show.html.haml index e155e3758fb..3f1d44a488a 100644 --- a/app/views/projects/commits/show.html.haml +++ b/app/views/projects/commits/show.html.haml @@ -13,7 +13,7 @@ %ul.breadcrumb.repo-breadcrumb = commits_breadcrumbs - .tree-controls.d-none.d-sm-none.d-md-block + .tree-controls.d-none.d-sm-none.d-md-block< - if @merge_request.present? .control = link_to _("View open merge request"), project_merge_request_path(@project, @merge_request), class: 'btn' diff --git a/app/views/projects/tree/_tree_header.html.haml b/app/views/projects/tree/_tree_header.html.haml index 127734ddfd7..2d987744dfd 100644 --- a/app/views/projects/tree/_tree_header.html.haml +++ b/app/views/projects/tree/_tree_header.html.haml @@ -75,7 +75,7 @@ = link_to new_project_tag_path(@project) do #{ _('New tag') } -.tree-controls +.tree-controls< = render_if_exists 'projects/tree/lock_link' - if vue_file_list_enabled? #js-tree-history-link.d-inline-block{ data: { history_link: project_commits_path(@project, @ref) } } @@ -85,20 +85,19 @@ = render 'projects/find_file_link' - if can_create_mr_from_fork - = succeed " " do - - if can_collaborate || current_user&.already_forked?(@project) - - if vue_file_list_enabled? - #js-tree-web-ide-link.d-inline-block - - else - = link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do - = _('Web IDE') + - if can_collaborate || current_user&.already_forked?(@project) + - if vue_file_list_enabled? + #js-tree-web-ide-link.d-inline-block - else - = link_to '#modal-confirm-fork', class: 'btn btn-default qa-web-ide-button', data: { target: '#modal-confirm-fork', toggle: 'modal'} do + = link_to ide_edit_path(@project, @ref, @path), class: 'btn btn-default qa-web-ide-button' do = _('Web IDE') - = render 'shared/confirm_fork_modal', fork_path: ide_fork_and_edit_path(@project, @ref, @path) + - else + = link_to '#modal-confirm-fork', class: 'btn btn-default qa-web-ide-button', data: { target: '#modal-confirm-fork', toggle: 'modal'} do + = _('Web IDE') + = render 'shared/confirm_fork_modal', fork_path: ide_fork_and_edit_path(@project, @ref, @path) - if show_xcode_link?(@project) - .project-action-button.project-xcode.inline + .project-action-button.project-xcode.inline< = render "projects/buttons/xcode_link" = render 'projects/buttons/download', project: @project, ref: @ref diff --git a/changelogs/unreleased/36955-snowplow-custom-events-for-monitor-apm-add-metric-button-fe.yml b/changelogs/unreleased/36955-snowplow-custom-events-for-monitor-apm-add-metric-button-fe.yml new file mode 100644 index 00000000000..738f3007214 --- /dev/null +++ b/changelogs/unreleased/36955-snowplow-custom-events-for-monitor-apm-add-metric-button-fe.yml @@ -0,0 +1,5 @@ +--- +title: Track adding metric via monitoring dashboard +merge_request: 20818 +author: +type: added diff --git a/changelogs/unreleased/37680-tree-control-buttons-misbehave-on-small-viewports.yml b/changelogs/unreleased/37680-tree-control-buttons-misbehave-on-small-viewports.yml new file mode 100644 index 00000000000..58e63e127f9 --- /dev/null +++ b/changelogs/unreleased/37680-tree-control-buttons-misbehave-on-small-viewports.yml @@ -0,0 +1,5 @@ +--- +title: Remove whitespaces between tree-controls elements +merge_request: 20952 +author: +type: other diff --git a/changelogs/unreleased/chore-admin-mode-rack-attack-default-paths-migration.yml b/changelogs/unreleased/chore-admin-mode-rack-attack-default-paths-migration.yml new file mode 100644 index 00000000000..20486c3bfa4 --- /dev/null +++ b/changelogs/unreleased/chore-admin-mode-rack-attack-default-paths-migration.yml @@ -0,0 +1,5 @@ +--- +title: Add admin mode controller path to Rack::Attack defaults +merge_request: 20735 +author: Diego Louzán +type: changed diff --git a/changelogs/unreleased/feat-circuit-project-service.yml b/changelogs/unreleased/feat-circuit-project-service.yml new file mode 100644 index 00000000000..ec073ede9ee --- /dev/null +++ b/changelogs/unreleased/feat-circuit-project-service.yml @@ -0,0 +1,5 @@ +--- +title: Add Unify Circuit project integration service +merge_request: 19849 +author: Fabio Huser +type: added diff --git a/changelogs/unreleased/filter-for-project-and-group-audit-events.yml b/changelogs/unreleased/filter-for-project-and-group-audit-events.yml new file mode 100644 index 00000000000..4fe4ea0beb5 --- /dev/null +++ b/changelogs/unreleased/filter-for-project-and-group-audit-events.yml @@ -0,0 +1,5 @@ +--- +title: Add created_before/after filter to group/project audit events +merge_request: 20641 +author: +type: added diff --git a/changelogs/unreleased/fj-31133-snippet-content-size-limit.yml b/changelogs/unreleased/fj-31133-snippet-content-size-limit.yml new file mode 100644 index 00000000000..acc8e4efb04 --- /dev/null +++ b/changelogs/unreleased/fj-31133-snippet-content-size-limit.yml @@ -0,0 +1,5 @@ +--- +title: Add limit for snippet content size +merge_request: 20346 +author: +type: performance diff --git a/changelogs/unreleased/helm_values_default.yml b/changelogs/unreleased/helm_values_default.yml new file mode 100644 index 00000000000..c731ef85e26 --- /dev/null +++ b/changelogs/unreleased/helm_values_default.yml @@ -0,0 +1,5 @@ +--- +title: Upgrade auto-deploy-image for helm default values file +merge_request: 20588 +author: +type: changed diff --git a/db/migrate/20191118173522_add_snippet_size_limit_to_application_settings.rb b/db/migrate/20191118173522_add_snippet_size_limit_to_application_settings.rb new file mode 100644 index 00000000000..b6b30febbd6 --- /dev/null +++ b/db/migrate/20191118173522_add_snippet_size_limit_to_application_settings.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +class AddSnippetSizeLimitToApplicationSettings < ActiveRecord::Migration[5.2] + DOWNTIME = false + + def up + add_column :application_settings, :snippet_size_limit, :bigint, default: 50.megabytes, null: false + end + + def down + remove_column :application_settings, :snippet_size_limit + end +end diff --git a/db/migrate/20191125114345_add_admin_mode_protected_path.rb b/db/migrate/20191125114345_add_admin_mode_protected_path.rb new file mode 100644 index 00000000000..7e9b0d5a285 --- /dev/null +++ b/db/migrate/20191125114345_add_admin_mode_protected_path.rb @@ -0,0 +1,54 @@ +# frozen_string_literal: true + +class AddAdminModeProtectedPath < ActiveRecord::Migration[5.2] + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + ADMIN_MODE_ENDPOINT = '/admin/session' + + OLD_DEFAULT_PROTECTED_PATHS = [ + '/users/password', + '/users/sign_in', + '/api/v3/session.json', + '/api/v3/session', + '/api/v4/session.json', + '/api/v4/session', + '/users', + '/users/confirmation', + '/unsubscribes/', + '/import/github/personal_access_token' + ] + + NEW_DEFAULT_PROTECTED_PATHS = OLD_DEFAULT_PROTECTED_PATHS.dup << ADMIN_MODE_ENDPOINT + + class ApplicationSetting < ActiveRecord::Base + self.table_name = 'application_settings' + end + + def up + change_column_default :application_settings, :protected_paths, NEW_DEFAULT_PROTECTED_PATHS + + # schema allows nulls for protected_paths + ApplicationSetting.where.not(protected_paths: nil).each do |application_setting| + unless application_setting.protected_paths.include?(ADMIN_MODE_ENDPOINT) + updated_protected_paths = application_setting.protected_paths << ADMIN_MODE_ENDPOINT + + application_setting.update(protected_paths: updated_protected_paths) + end + end + end + + def down + change_column_default :application_settings, :protected_paths, OLD_DEFAULT_PROTECTED_PATHS + + # schema allows nulls for protected_paths + ApplicationSetting.where.not(protected_paths: nil).each do |application_setting| + if application_setting.protected_paths.include?(ADMIN_MODE_ENDPOINT) + updated_protected_paths = application_setting.protected_paths - [ADMIN_MODE_ENDPOINT] + + application_setting.update(protected_paths: updated_protected_paths) + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 782610b62f5..725bcec3767 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -328,7 +328,7 @@ ActiveRecord::Schema.define(version: 2019_11_25_140458) do t.boolean "throttle_protected_paths_enabled", default: false, null: false t.integer "throttle_protected_paths_requests_per_period", default: 10, null: false t.integer "throttle_protected_paths_period_in_seconds", default: 60, null: false - t.string "protected_paths", limit: 255, default: ["/users/password", "/users/sign_in", "/api/v3/session.json", "/api/v3/session", "/api/v4/session.json", "/api/v4/session", "/users", "/users/confirmation", "/unsubscribes/", "/import/github/personal_access_token"], array: true + t.string "protected_paths", limit: 255, default: ["/users/password", "/users/sign_in", "/api/v3/session.json", "/api/v3/session", "/api/v4/session.json", "/api/v4/session", "/users", "/users/confirmation", "/unsubscribes/", "/import/github/personal_access_token", "/admin/session"], array: true t.boolean "throttle_incident_management_notification_enabled", default: false, null: false t.integer "throttle_incident_management_notification_period_in_seconds", default: 3600 t.integer "throttle_incident_management_notification_per_period", default: 3600 @@ -361,6 +361,7 @@ ActiveRecord::Schema.define(version: 2019_11_25_140458) do t.string "encrypted_slack_app_secret_iv", limit: 255 t.text "encrypted_slack_app_verification_token" t.string "encrypted_slack_app_verification_token_iv", limit: 255 + t.bigint "snippet_size_limit", default: 52428800, null: false t.index ["custom_project_templates_group_id"], name: "index_application_settings_on_custom_project_templates_group_id" t.index ["file_template_project_id"], name: "index_application_settings_on_file_template_project_id" t.index ["instance_administration_project_id"], name: "index_applicationsettings_on_instance_administration_project_id" diff --git a/doc/administration/index.md b/doc/administration/index.md index 3d70083892f..40ec9b85455 100644 --- a/doc/administration/index.md +++ b/doc/administration/index.md @@ -158,6 +158,10 @@ Learn how to install, configure, update, and maintain your GitLab instance. - [Shared Runners pipelines quota](../user/admin_area/settings/continuous_integration.md#shared-runners-pipeline-minutes-quota-starter-only): Limit the usage of pipeline minutes for Shared Runners. **(STARTER ONLY)** - [Enable/disable Auto DevOps](../topics/autodevops/index.md#enablingdisabling-auto-devops): Enable or disable Auto DevOps for your instance. +## Snippet settings + +- [Setting snippet content size limit](snippets/index.md): Set a maximum size limit for snippets' content. + ## Git configuration options - [Custom Git hooks](custom_hooks.md): Custom Git hooks (on the filesystem) for when webhooks aren't enough. diff --git a/doc/administration/snippets/index.md b/doc/administration/snippets/index.md new file mode 100644 index 00000000000..2e17db7b1f6 --- /dev/null +++ b/doc/administration/snippets/index.md @@ -0,0 +1,71 @@ +--- +type: reference, howto +--- + +# Snippets settings **(CORE ONLY)** + +Adjust the snippets' settings of your GitLab instance. + +## Snippets content size limit + +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/31133) in GitLab 12.6. + +You can set a content size max limit in snippets. This limit can prevent +abuses of the feature. The default content size limit is **52428800 Bytes** (50MB). + +### How does it work? + +The content size limit will be applied when a snippet is created or +updated. Nevertheless, in order not to break any existing snippet, +the limit will only be enforced in stored snippets when the content +is updated. + +### Snippets size limit configuration + +This setting is not available through the [Admin Area settings](../../user/admin_area/settings/index.md). +In order to configure this setting, use either the Rails console +or the [Application settings API](../../api/settings.md). + +NOTE: **IMPORTANT:** +The value of the limit **must** be in Bytes. + +#### Through the Rails console + +The steps to configure this setting through the Rails console are: + +1. Start the Rails console: + + ```bash + # For Omnibus installations + sudo gitlab-rails console + + # For installations from source + sudo -u git -H bundle exec rails console production + ``` + +1. Update the snippets maximum file size: + + ```ruby + ApplicationSetting.first.update!(snippet_size_limit: 50.megabytes) + ``` + +To retrieve the current value, start the Rails console and run: + + ```ruby + Gitlab::CurrentSettings.snippet_size_limit + ``` + +#### Through the API + +The process to set the snippets size limit through the Application Settings API is +exactly the same as you would do to [update any other setting](../../api/settings.md#change-application-settings). + +```bash +curl --request PUT --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/application/settings?snippet_size_limit=52428800 +``` + +You can also use the API to [retrieve the current value](../../api/settings.md#get-current-application-settings). + +```bash +curl --header "PRIVATE-TOKEN: " https://gitlab.example.com/api/v4/application/settings +``` diff --git a/doc/api/services.md b/doc/api/services.md index 609c7e62e36..02a31ba9d38 100644 --- a/doc/api/services.md +++ b/doc/api/services.md @@ -229,6 +229,51 @@ Get Campfire service settings for a project. GET /projects/:id/services/campfire ``` +## Unify Circuit + +Unify Circuit RTC and collaboration tool. + +### Create/Edit Unify Circuit service + +Set Unify Circuit service for a project. + +``` +PUT /projects/:id/services/unify-circuit +``` + +Parameters: + +| Parameter | Type | Required | Description | +| --------- | ---- | -------- | ----------- | +| `webhook` | string | true | The Unify Circuit webhook. For example, `https://circuit.com/rest/v2/webhooks/incoming/...`. | +| `notify_only_broken_pipelines` | boolean | false | Send notifications for broken pipelines | +| `branches_to_be_notified` | string | all | Branches to send notifications for. Valid options are "all", "default", "protected", and "default_and_protected" | +| `push_events` | boolean | false | Enable notifications for push events | +| `issues_events` | boolean | false | Enable notifications for issue events | +| `confidential_issues_events` | boolean | false | Enable notifications for confidential issue events | +| `merge_requests_events` | boolean | false | Enable notifications for merge request events | +| `tag_push_events` | boolean | false | Enable notifications for tag push events | +| `note_events` | boolean | false | Enable notifications for note events | +| `confidential_note_events` | boolean | false | Enable notifications for confidential note events | +| `pipeline_events` | boolean | false | Enable notifications for pipeline events | +| `wiki_page_events` | boolean | false | Enable notifications for wiki page events | + +### Delete Unify Circuit service + +Delete Unify Circuit service for a project. + +``` +DELETE /projects/:id/services/unify-circuit +``` + +### Get Unify Circuit service settings + +Get Unify Circuit service settings for a project. + +``` +GET /projects/:id/services/unify-circuit +``` + ## Custom Issue Tracker Custom issue tracker @@ -480,6 +525,7 @@ Parameters: | `merge_requests_events` | boolean | false | Enable notifications for merge request events | | `tag_push_events` | boolean | false | Enable notifications for tag push events | | `note_events` | boolean | false | Enable notifications for note events | +| `confidential_note_events` | boolean | false | Enable notifications for confidential note events | | `pipeline_events` | boolean | false | Enable notifications for pipeline events | | `wiki_page_events` | boolean | false | Enable notifications for wiki page events | @@ -1088,6 +1134,7 @@ Parameters: | `merge_requests_events` | boolean | false | Enable notifications for merge request events | | `tag_push_events` | boolean | false | Enable notifications for tag push events | | `note_events` | boolean | false | Enable notifications for note events | +| `confidential_note_events` | boolean | false | Enable notifications for confidential note events | | `pipeline_events` | boolean | false | Enable notifications for pipeline events | | `wiki_page_events` | boolean | false | Enable notifications for wiki page events | | `push_channel` | string | false | The name of the channel to receive push events notifications | @@ -1095,6 +1142,7 @@ Parameters: | `confidential_issue_channel` | string | false | The name of the channel to receive confidential issues events notifications | | `merge_request_channel` | string | false | The name of the channel to receive merge request events notifications | | `note_channel` | string | false | The name of the channel to receive note events notifications | +| `confidential_note_channel` | boolean | The name of the channel to receive confidential note events notifications | | `tag_push_channel` | string | false | The name of the channel to receive tag push events notifications | | `pipeline_channel` | string | false | The name of the channel to receive pipeline events notifications | | `wiki_page_channel` | string | false | The name of the channel to receive wiki page events notifications | diff --git a/doc/api/settings.md b/doc/api/settings.md index 9f9e90e4d11..ad9ffcbf872 100644 --- a/doc/api/settings.md +++ b/doc/api/settings.md @@ -350,3 +350,4 @@ are listed in the descriptions of the relevant settings. | `user_show_add_ssh_key_message` | boolean | no | When set to `false` disable the "You won't be able to pull or push project code via SSH" warning shown to users with no uploaded SSH key. | | `version_check_enabled` | boolean | no | Let GitLab inform you when an update is available. | | `web_ide_clientside_preview_enabled` | boolean | no | Client side evaluation (allow live previews of JavaScript projects in the Web IDE using CodeSandbox client side evaluation). | +| `snippet_size_limit` | integer | no | Max snippet content size in **bytes**. Default: 52428800 Bytes (50MB).| diff --git a/doc/ci/jenkins/index.md b/doc/ci/jenkins/index.md index 321d0d2778f..6e9e723feb5 100644 --- a/doc/ci/jenkins/index.md +++ b/doc/ci/jenkins/index.md @@ -228,5 +228,5 @@ our very powerful [`only/except` rules system](../yaml/README.md#onlyexcept-basi ```yaml my_job: - only: branches + only: [branches] ``` diff --git a/doc/ci/merge_request_pipelines/index.md b/doc/ci/merge_request_pipelines/index.md index a49279f1932..7a7fa08fac1 100644 --- a/doc/ci/merge_request_pipelines/index.md +++ b/doc/ci/merge_request_pipelines/index.md @@ -30,7 +30,7 @@ Pipelines for merge requests have the following requirements and limitations: ## Configuring pipelines for merge requests -To configure pipelines for merge requests, add the `only: merge_requests` parameter to +To configure pipelines for merge requests, add the `only: [merge_requests]` parameter to the jobs that you want to run only for merge requests. Then, when developers create or update merge requests, a pipeline runs @@ -68,7 +68,7 @@ After the merge request is updated with new commits: - The pipeline fetches the latest code from the source branch and run tests against it. In the above example, the pipeline contains only a `test` job. -Since the `build` and `deploy` jobs don't have the `only: merge_requests` parameter, +Since the `build` and `deploy` jobs don't have the `only: [merge_requests]` parameter, they will not run in the merge request. Pipelines tagged with the **detached** badge indicate that they were triggered @@ -86,7 +86,7 @@ Read the [documentation on Merge Trains](pipelines_for_merged_results/merge_trai ## Excluding certain jobs -The behavior of the `only: merge_requests` parameter is such that _only_ jobs with +The behavior of the `only: [merge_requests]` parameter is such that _only_ jobs with that parameter are run in the context of a merge request; no other jobs will be run. However, you may want to reverse this behavior, having all of your jobs to run _except_ diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index a92c95ce7d8..4a06f99f99e 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -780,7 +780,7 @@ it is possible to define a job to be created based on files modified in a merge request. In order to deduce the correct base SHA of the source branch, we recommend combining -this keyword with `only: merge_requests`. This way, file differences are correctly +this keyword with `only: [merge_requests]`. This way, file differences are correctly calculated from any further commits, thus all changes in the merge requests are properly tested in pipelines. @@ -802,7 +802,7 @@ either files in `service-one` directory or the `Dockerfile`, GitLab creates and triggers the `docker build service one` job. Note that if [pipelines for merge requests](../merge_request_pipelines/index.md) is -combined with `only: change`, but `only: merge_requests` is omitted, there could be +combined with `only: [change]`, but `only: [merge_requests]` is omitted, there could be unwanted behavior. For example: diff --git a/doc/development/documentation/styleguide.md b/doc/development/documentation/styleguide.md index 359bac75e0d..fac0a581957 100644 --- a/doc/development/documentation/styleguide.md +++ b/doc/development/documentation/styleguide.md @@ -699,7 +699,7 @@ nicely on different mobile devices. ## Code blocks - Always wrap code added to a sentence in inline code blocks (`` ` ``). - E.g., `.gitlab-ci.yml`, `git add .`, `CODEOWNERS`, `only: master`. + E.g., `.gitlab-ci.yml`, `git add .`, `CODEOWNERS`, `only: [master]`. File names, commands, entries, and anything that refers to code should be added to code blocks. To make things easier for the user, always add a full code block for things that can be useful to copy and paste, as they can easily do it with the button on code blocks. diff --git a/doc/development/merge_request_performance_guidelines.md b/doc/development/merge_request_performance_guidelines.md index 43059d23c79..ec50b1557d4 100644 --- a/doc/development/merge_request_performance_guidelines.md +++ b/doc/development/merge_request_performance_guidelines.md @@ -165,6 +165,54 @@ can quickly spiral out of control. There are some cases where this may be needed. If this is the case this should be clearly mentioned in the merge request description. +## Batch process + +**Summary:** Iterating a single process to external services (e.g. PostgreSQL, Redis, Object Storage, etc) +should be executed in a **batch-style** in order to reduce connection overheads. + +For fetching rows from various tables in a batch-style, please see [Eager Loading](#eager-loading) section. + +### Example: Delete multiple files from Object Storage + +When you delete multiple files from object storage (e.g. GCS), +executing a single REST API call multiple times is a quite expensive +process. Ideally, this should be done in a batch-style, for example, S3 provides +[batch deletion API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html), +so it'd be a good idea to consider such an approach. + +The `FastDestroyAll` module might help this situation. It's a +small framework when you remove a bunch of database rows and its associated data +in a batch style. + +## Timeout + +**Summary:** You should set a reasonable timeout when the system invokes HTTP calls +to external services (e.g. Kubernetes), and it should be executed in Sidekiq, not +in Puma/Unicorn threads. + +Often, GitLab needs to communicate with an external service such as Kubernetes +clusters. In this case, it's hard to estimate when the external service finishes +the requested process, for example, if it's a user-owned cluster that is inactive for some reason, +GitLab might wait for the response forever ([Example](https://gitlab.com/gitlab-org/gitlab/issues/31475)). +This could result in Puma/Unicorn timeout and should be avoided at all cost. + +You should set a reasonable timeout, gracefully handle exceptions and surface the +errors in UI or logging internally. + +Using [`ReactiveCaching`](https://docs.gitlab.com/ee/development/utilities.html#reactivecaching) is one of the best solutions to fetch external data. + +## Keep database transaction minimal + +**Summary:** You should avoid accessing to external services (e.g. Gitaly) during database +transactions, otherwise it leads to severe contention problems +as an open transaction basically blocks the release of a Postgres backend connection. + +For keeping transaction as minimal as possible, please consider using `AfterCommitQueue` +module or `after_commit` AR hook. + +Here is [an example](https://gitlab.com/gitlab-org/gitlab/issues/36154#note_247228859) +that one request to Gitaly instance during transaction triggered a P1 issue. + ## Eager Loading **Summary:** always eager load associations when retrieving more than one row. diff --git a/doc/security/rack_attack.md b/doc/security/rack_attack.md index 51b7d7db3e4..9cbb296338a 100644 --- a/doc/security/rack_attack.md +++ b/doc/security/rack_attack.md @@ -53,7 +53,8 @@ default['gitlab']['gitlab-rails']['rack_attack_protected_paths'] = [ '/users', '/users/confirmation', '/unsubscribes/', - '/import/github/personal_access_token' + '/import/github/personal_access_token', + '/admin/session' ] ``` diff --git a/doc/topics/autodevops/index.md b/doc/topics/autodevops/index.md index f386c5ae42a..674e1193a02 100644 --- a/doc/topics/autodevops/index.md +++ b/doc/topics/autodevops/index.md @@ -651,6 +651,8 @@ procfile exec` to replicate the environment where your application will run. #### Workers +> [Introduced](https://gitlab.com/gitlab-org/gitlab/issues/30628) in GitLab 12.6, `.gitlab/auto-deploy-values.yaml` will be used by default for Helm upgrades. + Some web applications need to run extra deployments for "worker processes". For example, it is common in a Rails application to have a separate worker process to run background tasks like sending emails. @@ -672,13 +674,18 @@ need to: - Set a CI variable `K8S_SECRET_REDIS_URL`, which the URL of this instance to ensure it's passed into your deployments. -Once you have configured your worker to respond to health checks, you will -need to configure a CI variable `HELM_UPGRADE_EXTRA_ARGS` with the value -`--values helm-values.yaml`. +Once you have configured your worker to respond to health checks, run a Sidekiq +worker for your Rails application. For: -Then you can, for example, run a Sidekiq worker for your Rails application -by adding a file named `helm-values.yaml` to your repository with the following -content: +- GitLab 12.6 and later, either: + - Add a file named `.gitlab/auto-deploy-values.yaml` to your repository. It will + be automatically used if found. + - Add a file with a different name or path to the repository, and override the value of the + `HELM_UPGRADE_VALUES_FILE` variable with the path and name. +- GitLab 12.5 and earlier, run the worker with the `--values` parameter that specifies + a file in the repository. + +In any case, the file must contain the following: ```yml workers: @@ -983,6 +990,7 @@ applications. | `CANARY_PRODUCTION_REPLICAS` | Number of canary replicas to deploy for [Canary Deployments](../../user/project/canary_deployments.md) in the production environment. Takes precedence over `CANARY_REPLICAS`. Defaults to 1. | | `CANARY_REPLICAS` | Number of canary replicas to deploy for [Canary Deployments](../../user/project/canary_deployments.md). Defaults to 1. | | `HELM_RELEASE_NAME` | From GitLab 12.1, allows the `helm` release name to be overridden. Can be used to assign unique release names when deploying multiple projects to a single namespace. | +| `HELM_UPGRADE_VALUES_FILE` | From GitLab 12.6, allows the `helm upgrade` values file to be overridden. Defaults to `.gitlab/auto-deploy-values.yaml`. | | `HELM_UPGRADE_EXTRA_ARGS` | From GitLab 11.11, allows extra arguments in `helm` commands when deploying the application. Note that using quotes will not prevent word splitting. **Tip:** you can use this variable to [customize the Auto Deploy Helm chart](#custom-helm-chart) by applying custom override values with `--values my-values.yaml`. | | `INCREMENTAL_ROLLOUT_MODE` | From GitLab 11.4, if present, can be used to enable an [incremental rollout](#incremental-rollout-to-production-premium) of your application for the production environment. Set to `manual` for manual deployment jobs or `timed` for automatic rollout deployments with a 5 minute delay each one. | | `K8S_SECRET_*` | From GitLab 11.7, any variable prefixed with [`K8S_SECRET_`](#application-secret-variables) will be made available by Auto DevOps as environment variables to the deployed application. | diff --git a/doc/user/admin_area/settings/protected_paths.md b/doc/user/admin_area/settings/protected_paths.md index 21c8d79b138..548352f7bfe 100644 --- a/doc/user/admin_area/settings/protected_paths.md +++ b/doc/user/admin_area/settings/protected_paths.md @@ -14,7 +14,8 @@ GitLab protects the following paths with Rack Attack by default: '/users', '/users/confirmation', '/unsubscribes/', -'/import/github/personal_access_token' +'/import/github/personal_access_token', +'/admin/session' ``` GitLab responds with HTTP status code `429` to POST requests at protected paths diff --git a/doc/user/project/integrations/img/unify_circuit_configuration.png b/doc/user/project/integrations/img/unify_circuit_configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..285d4f92030ea25fa2609ad22d90a6c696159310 GIT binary patch literal 274416 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 V*E$k1djZDjo_DQmw-= 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 s3;ERHq^^y<+y}Rr$=l*?W|dM)@tsw^ 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

L@sH^^a)0H?1T!fa}^H0^(&dsb%P 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 q^u|5vANL+HR76rn7g_ Settings > Integrations**. +1. Select the **Unify Circuit** project service to configure it. +1. Check the **Active** checkbox to turn on the service. +1. Check the checkboxes corresponding to the GitLab events you want to receive in Unify Circuit. +1. Paste the **Webhook URL** that you copied from the Unify Circuit configuration step. +1. Configure the remaining options and click `Save changes`. + +Your Unify Circuit conversation will now start receiving GitLab event notifications as configured. + +![Unify Circuit configuration](img/unify_circuit_configuration.png) diff --git a/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md b/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md index 6630179ea47..e1ac8b2183c 100644 --- a/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md +++ b/doc/user/project/merge_requests/merge_when_pipeline_succeeds.md @@ -69,7 +69,7 @@ For example, to that on merge requests there is always a passing job even though ```yaml enable_merge: - only: merge_requests + only: [merge_requests] script: - echo true ``` diff --git a/lib/api/helpers/services_helpers.rb b/lib/api/helpers/services_helpers.rb index 74051f2d69f..b77be6edcf7 100644 --- a/lib/api/helpers/services_helpers.rb +++ b/lib/api/helpers/services_helpers.rb @@ -132,6 +132,12 @@ module API type: Boolean, desc: 'Enable notifications for note_events' }, + { + required: false, + name: :confidential_note_events, + type: Boolean, + desc: 'Enable notifications for confidential_note_events' + }, { required: false, name: :tag_push_events, @@ -696,7 +702,16 @@ module API type: String, desc: 'The password of the user' } - ] + ], + 'unify-circuit' => [ + { + required: true, + name: :webhook, + type: String, + desc: 'The Unify Circuit webhook. e.g. https://circuit.com/rest/v2/webhooks/incoming/…' + }, + chat_notification_events + ].flatten } end diff --git a/lib/gitaly/server.rb b/lib/gitaly/server.rb index 907c6e1b605..64ab5db4fcd 100644 --- a/lib/gitaly/server.rb +++ b/lib/gitaly/server.rb @@ -2,6 +2,8 @@ module Gitaly class Server + SHA_VERSION_REGEX = /\A\d+\.\d+\.\d+-\d+-g([a-f0-9]{8})\z/.freeze + class << self def all Gitlab.config.repositories.storages.keys.map { |s| Gitaly::Server.new(s) } @@ -30,9 +32,10 @@ module Gitaly info.git_version end - def up_to_date? - server_version == Gitlab::GitalyClient.expected_server_version + def expected_version? + server_version == Gitlab::GitalyClient.expected_server_version || matches_sha? end + alias_method :up_to_date?, :expected_version? def read_writeable? readable? && writeable? @@ -62,6 +65,13 @@ module Gitaly @storage_status ||= info.storage_statuses.find { |s| s.storage_name == storage } end + def matches_sha? + match = server_version.match(SHA_VERSION_REGEX) + return false unless match + + Gitlab::GitalyClient.expected_server_version.start_with?(match[1]) + end + def info @info ||= begin diff --git a/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml b/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml index 738be44d5f4..cb45c12c2b0 100644 --- a/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml +++ b/lib/gitlab/ci/templates/Jobs/Deploy.gitlab-ci.yml @@ -1,5 +1,5 @@ .auto-deploy: - image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-deploy-image:v0.7.0" + image: "registry.gitlab.com/gitlab-org/cluster-integration/auto-deploy-image:v0.8.0" review: extends: .auto-deploy diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb index 7ea7565f758..03bde611451 100644 --- a/lib/gitlab/database/migration_helpers.rb +++ b/lib/gitlab/database/migration_helpers.rb @@ -155,6 +155,7 @@ module Gitlab # column - The name of the column to create the foreign key on. # on_delete - The action to perform when associated data is removed, # defaults to "CASCADE". + # name - The name of the foreign key. # # rubocop:disable Gitlab/RailsLogger def add_concurrent_foreign_key(source, target, column:, on_delete: :cascade, name: nil) @@ -164,25 +165,31 @@ module Gitlab raise 'add_concurrent_foreign_key can not be run inside a transaction' end - on_delete = 'SET NULL' if on_delete == :nullify + options = { + column: column, + on_delete: on_delete, + name: name.presence || concurrent_foreign_key_name(source, column) + } - key_name = name || concurrent_foreign_key_name(source, column) - - unless foreign_key_exists?(source, target, column: column) - Rails.logger.warn "Foreign key not created because it exists already " \ + if foreign_key_exists?(source, target, options) + warning_message = "Foreign key not created because it exists already " \ "(this may be due to an aborted migration or similar): " \ - "source: #{source}, target: #{target}, column: #{column}" + "source: #{source}, target: #{target}, column: #{options[:column]}, "\ + "name: #{options[:name]}, on_delete: #{options[:on_delete]}" + Rails.logger.warn warning_message + else # Using NOT VALID allows us to create a key without immediately # validating it. This means we keep the ALTER TABLE lock only for a # short period of time. The key _is_ enforced for any newly created # data. + execute <<-EOF.strip_heredoc ALTER TABLE #{source} - ADD CONSTRAINT #{key_name} - FOREIGN KEY (#{column}) + ADD CONSTRAINT #{options[:name]} + FOREIGN KEY (#{options[:column]}) REFERENCES #{target} (id) - #{on_delete ? "ON DELETE #{on_delete.upcase}" : ''} + #{on_delete_statement(options[:on_delete])} NOT VALID; EOF end @@ -193,18 +200,15 @@ module Gitlab # # Note this is a no-op in case the constraint is VALID already disable_statement_timeout do - execute("ALTER TABLE #{source} VALIDATE CONSTRAINT #{key_name};") + execute("ALTER TABLE #{source} VALIDATE CONSTRAINT #{options[:name]};") end end # rubocop:enable Gitlab/RailsLogger - def foreign_key_exists?(source, target = nil, column: nil) - foreign_keys(source).any? do |key| - if column - key.options[:column].to_s == column.to_s - else - key.to_table.to_s == target.to_s - end + def foreign_key_exists?(source, target = nil, **options) + foreign_keys(source).any? do |foreign_key| + tables_match?(target.to_s, foreign_key.to_table.to_s) && + options_match?(foreign_key.options, options) end end @@ -1050,6 +1054,21 @@ into similar problems in the future (e.g. when new tables are created). private + def tables_match?(target_table, foreign_key_table) + target_table.blank? || foreign_key_table == target_table + end + + def options_match?(foreign_key_options, options) + options.all? { |k, v| foreign_key_options[k].to_s == v.to_s } + end + + def on_delete_statement(on_delete) + return '' if on_delete.blank? + return 'ON DELETE SET NULL' if on_delete == :nullify + + "ON DELETE #{on_delete.upcase}" + end + def create_column_from(table, old, new, type: nil) old_col = column_for(table, old) new_type = type || old_col.type diff --git a/lib/sentry/client.rb b/lib/sentry/client.rb index 3aa3eb45d85..708ace53f5b 100644 --- a/lib/sentry/client.rb +++ b/lib/sentry/client.rb @@ -34,12 +34,18 @@ module Sentry end def list_issues(**keyword_args) - issues = get_issues(keyword_args) + response = get_issues(keyword_args) + + issues = response[:issues] + pagination = response[:pagination] validate_size(issues) handle_mapping_exceptions do - map_to_errors(issues) + { + issues: map_to_errors(issues), + pagination: pagination + } end end @@ -83,36 +89,40 @@ module Sentry end def get_issues(**keyword_args) - http_get( + response = http_get( issues_api_url, query: list_issue_sentry_query(keyword_args) ) + + { + issues: response[:body], + pagination: Sentry::PaginationParser.parse(response[:headers]) + } end - def list_issue_sentry_query(issue_status:, limit:, sort: nil, search_term: '') + def list_issue_sentry_query(issue_status:, limit:, sort: nil, search_term: '', cursor: nil) unless SENTRY_API_SORT_VALUE_MAP.key?(sort) raise BadRequestError, 'Invalid value for sort param' end - query_params = { + { query: "is:#{issue_status} #{search_term}".strip, limit: limit, - sort: SENTRY_API_SORT_VALUE_MAP[sort] - } - - query_params.compact + sort: SENTRY_API_SORT_VALUE_MAP[sort], + cursor: cursor + }.compact end def get_issue(issue_id:) - http_get(issue_api_url(issue_id)) + http_get(issue_api_url(issue_id))[:body] end def get_issue_latest_event(issue_id:) - http_get(issue_latest_event_api_url(issue_id)) + http_get(issue_latest_event_api_url(issue_id))[:body] end def get_projects - http_get(projects_api_url) + http_get(projects_api_url)[:body] end def handle_request_exceptions @@ -138,7 +148,7 @@ module Sentry raise_error "Sentry response status code: #{response.code}" end - response.parsed_response + { body: response.parsed_response, headers: response.headers } end def raise_error(message) diff --git a/lib/sentry/pagination_parser.rb b/lib/sentry/pagination_parser.rb new file mode 100644 index 00000000000..fa9c1dd8694 --- /dev/null +++ b/lib/sentry/pagination_parser.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +module Sentry + module PaginationParser + PATTERN = /rel=\"(?\w+)\";\sresults=\"(?\w+)\";\scursor=\"(?.+)\"/.freeze + + def self.parse(headers) + links = headers['link'].to_s.split(',') + + links.map { |link| parse_link(link) }.compact.to_h + end + + def self.parse_link(link) + match = link.match(PATTERN) + + return unless match + return if match['results'] != "true" + + [match['direction'], { 'cursor' => match['cursor'] }] + end + private_class_method :parse_link + end +end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index bd3aca61343..5ad87093828 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3361,6 +3361,9 @@ msgstr "" msgid "Clear" msgstr "" +msgid "Clear chart filters" +msgstr "" + msgid "Clear input" msgstr "" @@ -20934,6 +20937,9 @@ msgstr "" msgid "is not an email you own" msgstr "" +msgid "is too long (%{current_value}). The maximum size is %{max_size}." +msgstr "" + msgid "is too long (maximum is 100 entries)" msgstr "" diff --git a/qa/Gemfile b/qa/Gemfile index 5266fc57b0a..3575ecf13e9 100644 --- a/qa/Gemfile +++ b/qa/Gemfile @@ -2,8 +2,8 @@ source 'https://rubygems.org' gem 'gitlab-qa' gem 'activesupport', '5.2.3' # This should stay in sync with the root's Gemfile -gem 'capybara', '~> 2.16.1' -gem 'capybara-screenshot', '~> 1.0.18' +gem 'capybara', '~> 3.29.0' +gem 'capybara-screenshot', '~> 1.0.23' gem 'rake', '~> 12.3.0' gem 'rspec', '~> 3.7' gem 'selenium-webdriver', '~> 3.12' diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock index 91b2afb6927..a84b353170e 100644 --- a/qa/Gemfile.lock +++ b/qa/Gemfile.lock @@ -6,8 +6,8 @@ GEM i18n (>= 0.7, < 2) minitest (~> 5.1) tzinfo (~> 1.1) - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) airborne (0.2.13) activesupport rack @@ -15,15 +15,16 @@ GEM rest-client (>= 1.7.3, < 3.0) rspec (~> 3.1) byebug (9.1.0) - capybara (2.16.1) + capybara (3.29.0) addressable mini_mime (>= 0.1.3) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (~> 2.0) - capybara-screenshot (1.0.18) - capybara (>= 1.0, < 3) + nokogiri (~> 1.8) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (~> 1.5) + xpath (~> 3.2) + capybara-screenshot (1.0.23) + capybara (>= 1.0, < 4) launchy childprocess (3.0.0) coderay (1.1.2) @@ -50,7 +51,7 @@ GEM mime-types (3.1) mime-types-data (~> 3.2015) mime-types-data (3.2016.0521) - mini_mime (1.0.0) + mini_mime (1.0.2) mini_portile2 (2.4.0) minitest (5.11.3) netrc (0.11.0) @@ -65,11 +66,12 @@ GEM pry-byebug (3.5.1) byebug (~> 9.1) pry (~> 0.10) - public_suffix (3.0.1) - rack (2.0.6) - rack-test (0.8.2) + public_suffix (4.0.1) + rack (2.0.7) + rack-test (0.8.3) rack (>= 1.0, < 3) - rake (12.3.3) + rake (12.3.0) + regexp_parser (1.6.0) rest-client (2.0.2) http-cookie (>= 1.0.2, < 2.0) mime-types (>= 1.16, < 4.0) @@ -103,8 +105,8 @@ GEM unf (0.1.4) unf_ext unf_ext (0.0.7.4) - xpath (2.1.0) - nokogiri (~> 1.3) + xpath (3.2.0) + nokogiri (~> 1.8) PLATFORMS ruby @@ -112,8 +114,8 @@ PLATFORMS DEPENDENCIES activesupport (= 5.2.3) airborne (~> 0.2.13) - capybara (~> 2.16.1) - capybara-screenshot (~> 1.0.18) + capybara (~> 3.29.0) + capybara-screenshot (~> 1.0.23) debase (~> 0.2.4.1) faker (~> 1.6, >= 1.6.6) gitlab-qa diff --git a/qa/qa/page/base.rb b/qa/qa/page/base.rb index a080c4071ed..b28664b2921 100644 --- a/qa/qa/page/base.rb +++ b/qa/qa/page/base.rb @@ -141,6 +141,10 @@ module QA page.has_no_text? text end + def has_normalized_ws_text?(text, wait: Capybara.default_max_wait_time) + page.has_text?(text.gsub(/\s+/, " "), wait: wait) + end + def finished_loading? has_no_css?('.fa-spinner', wait: Capybara.default_max_wait_time) end diff --git a/qa/qa/page/project/pipeline/index.rb b/qa/qa/page/project/pipeline/index.rb index b52f3e99a36..269d4dfc411 100644 --- a/qa/qa/page/project/pipeline/index.rb +++ b/qa/qa/page/project/pipeline/index.rb @@ -14,11 +14,7 @@ module QA::Page def click_on_latest_pipeline css = '.js-pipeline-url-link' - link = wait(reload: false) do - first(css) - end - - link.click + first(css, wait: 60).click end def wait_for_latest_pipeline_success diff --git a/qa/qa/runtime/browser.rb b/qa/qa/runtime/browser.rb index 7e45e5e86ea..ea92cdbdb7f 100644 --- a/qa/qa/runtime/browser.rb +++ b/qa/qa/runtime/browser.rb @@ -132,6 +132,10 @@ module QA config.default_max_wait_time = CAPYBARA_MAX_WAIT_TIME # https://github.com/mattheworiordan/capybara-screenshot/issues/164 config.save_path = ::File.expand_path('../../tmp', __dir__) + + # Cabybara 3 does not normalize text by default, so older tests + # fail because of unexpected line breaks and other white space + config.default_normalize_ws = true end end diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb index d2fd1d743fb..c119e447097 100644 --- a/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/repository/add_file_template_spec.rb @@ -52,16 +52,16 @@ module QA Page::Project::Show.perform(&:create_new_file!) Page::File::Form.perform do |form| form.select_template template[:file_name], template[:name] + + expect(form).to have_normalized_ws_text(content[0..100]) + + form.commit_changes + + expect(form).to have_content('The file has been successfully created.') + expect(form).to have_content(template[:file_name]) + expect(form).to have_content('Add new file') + expect(form).to have_normalized_ws_text(content[0..100]) end - - expect(page).to have_content(content[0..100]) - - Page::File::Form.perform(&:commit_changes) - - expect(page).to have_content('The file has been successfully created.') - expect(page).to have_content(template[:file_name]) - expect(page).to have_content('Add new file') - expect(page).to have_content(content[0..100]) end end end diff --git a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb index 71b9971a0af..b91f944a162 100644 --- a/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb +++ b/qa/qa/specs/features/browser_ui/3_create/web_ide/add_file_template_spec.rb @@ -54,15 +54,15 @@ module QA ide.create_new_file_from_template template[:file_name], template[:name] expect(ide.has_file?(template[:file_name])).to be_truthy + + expect(ide).to have_button('Undo') + expect(ide).to have_normalized_ws_text(content[0..100]) + + ide.commit_changes + + expect(ide).to have_content(template[:file_name]) + expect(ide).to have_normalized_ws_text(content[0..100]) end - - expect(page).to have_button('Undo') - expect(page).to have_content(content[0..100]) - - Page::Project::WebIDE::Edit.perform(&:commit_changes) - - expect(page).to have_content(template[:file_name]) - expect(page).to have_content(content[0..100]) end end end diff --git a/spec/controllers/projects/error_tracking_controller_spec.rb b/spec/controllers/projects/error_tracking_controller_spec.rb index 45f3188baae..ab99e44e4ca 100644 --- a/spec/controllers/projects/error_tracking_controller_spec.rb +++ b/spec/controllers/projects/error_tracking_controller_spec.rb @@ -50,8 +50,6 @@ describe Projects::ErrorTrackingController do let(:external_url) { 'http://example.com' } context 'no data' do - let(:params) { project_params(format: :json) } - let(:permitted_params) do ActionController::Parameters.new({}).permit! end @@ -72,11 +70,13 @@ describe Projects::ErrorTrackingController do end end - context 'with a search_term and sort params' do - let(:params) { project_params(format: :json, search_term: 'something', sort: 'last_seen') } - + context 'with extra params' do + let(:cursor) { '1572959139000:0:0' } + let(:search_term) { 'something' } + let(:sort) { 'last_seen' } + let(:params) { project_params(format: :json, search_term: search_term, sort: sort, cursor: cursor) } let(:permitted_params) do - ActionController::Parameters.new(search_term: 'something', sort: 'last_seen').permit! + ActionController::Parameters.new(search_term: search_term, sort: sort, cursor: cursor).permit! end before do @@ -88,7 +88,7 @@ describe Projects::ErrorTrackingController do context 'service result is successful' do before do expect(list_issues_service).to receive(:execute) - .and_return(status: :success, issues: [error]) + .and_return(status: :success, issues: [error], pagination: {}) expect(list_issues_service).to receive(:external_url) .and_return(external_url) end @@ -100,13 +100,16 @@ describe Projects::ErrorTrackingController do expect(response).to have_gitlab_http_status(:ok) expect(response).to match_response_schema('error_tracking/index') - expect(json_response['external_url']).to eq(external_url) - expect(json_response['errors']).to eq([error].as_json) + expect(json_response).to eq( + 'errors' => [error].as_json, + 'pagination' => {}, + 'external_url' => external_url + ) end end end - context 'without params' do + context 'without extra params' do before do expect(ErrorTracking::ListIssuesService) .to receive(:new).with(project, user, {}) @@ -116,7 +119,7 @@ describe Projects::ErrorTrackingController do context 'service result is successful' do before do expect(list_issues_service).to receive(:execute) - .and_return(status: :success, issues: [error]) + .and_return(status: :success, issues: [error], pagination: {}) expect(list_issues_service).to receive(:external_url) .and_return(external_url) end @@ -128,8 +131,11 @@ describe Projects::ErrorTrackingController do expect(response).to have_gitlab_http_status(:ok) expect(response).to match_response_schema('error_tracking/index') - expect(json_response['external_url']).to eq(external_url) - expect(json_response['errors']).to eq([error].as_json) + expect(json_response).to eq( + 'errors' => [error].as_json, + 'pagination' => {}, + 'external_url' => external_url + ) end end diff --git a/spec/fixtures/api/schemas/error_tracking/index.json b/spec/fixtures/api/schemas/error_tracking/index.json index d3abc29ffa7..7a570641211 100644 --- a/spec/fixtures/api/schemas/error_tracking/index.json +++ b/spec/fixtures/api/schemas/error_tracking/index.json @@ -2,6 +2,7 @@ "type": "object", "required": [ "external_url", + "pagination", "errors" ], "properties": { @@ -9,6 +10,9 @@ "errors": { "type": "array", "items": { "$ref": "error.json" } + }, + "pagination": { + "type": "object" } }, "additionalProperties": false diff --git a/spec/frontend/pipelines/graph/action_component_spec.js b/spec/frontend/pipelines/graph/action_component_spec.js index 38ffe98c79b..a8fddd5fff2 100644 --- a/spec/frontend/pipelines/graph/action_component_spec.js +++ b/spec/frontend/pipelines/graph/action_component_spec.js @@ -20,6 +20,7 @@ describe('pipeline graph action component', () => { actionIcon: 'cancel', }, sync: false, + attachToDocument: true, }); }); diff --git a/spec/frontend/pipelines/pipeline_triggerer_spec.js b/spec/frontend/pipelines/pipeline_triggerer_spec.js index 45ac278dd38..e211852f74b 100644 --- a/spec/frontend/pipelines/pipeline_triggerer_spec.js +++ b/spec/frontend/pipelines/pipeline_triggerer_spec.js @@ -1,9 +1,16 @@ -import { mount } from '@vue/test-utils'; +import { shallowMount } from '@vue/test-utils'; +import UserAvatarLink from '~/vue_shared/components/user_avatar/user_avatar_link.vue'; import pipelineTriggerer from '~/pipelines/components/pipeline_triggerer.vue'; describe('Pipelines Triggerer', () => { let wrapper; + const expectComponentWithProps = (Component, props = {}) => { + const componentWrapper = wrapper.find(Component); + expect(componentWrapper.isVisible()).toBe(true); + expect(componentWrapper.props()).toEqual(expect.objectContaining(props)); + }; + const mockData = { pipeline: { user: { @@ -15,9 +22,10 @@ describe('Pipelines Triggerer', () => { }; const createComponent = () => { - wrapper = mount(pipelineTriggerer, { + wrapper = shallowMount(pipelineTriggerer, { propsData: mockData, sync: false, + attachToDocument: true, }); }; @@ -33,14 +41,12 @@ describe('Pipelines Triggerer', () => { expect(wrapper.contains('.table-section')).toBe(true); }); - it('should render triggerer information when triggerer is provided', () => { - const link = wrapper.find('.js-pipeline-url-user'); - - expect(link.attributes('href')).toEqual(mockData.pipeline.user.path); - expect(link.find('.js-user-avatar-image-toolip').text()).toEqual(mockData.pipeline.user.name); - expect(link.find('img.avatar').attributes('src')).toEqual( - `${mockData.pipeline.user.avatar_url}?width=26`, - ); + it('should pass triggerer information when triggerer is provided', () => { + expectComponentWithProps(UserAvatarLink, { + linkHref: mockData.pipeline.user.path, + tooltipText: mockData.pipeline.user.name, + imgSrc: mockData.pipeline.user.avatar_url, + }); }); it('should render "API" when no triggerer is provided', () => { @@ -50,7 +56,7 @@ describe('Pipelines Triggerer', () => { }, }); - wrapper.vm.$nextTick(() => { + return wrapper.vm.$nextTick(() => { expect(wrapper.find('.js-pipeline-url-api').text()).toEqual('API'); }); }); diff --git a/spec/lib/gitaly/server_spec.rb b/spec/lib/gitaly/server_spec.rb index 12dfad6698d..184d049d1fb 100644 --- a/spec/lib/gitaly/server_spec.rb +++ b/spec/lib/gitaly/server_spec.rb @@ -65,4 +65,26 @@ describe Gitaly::Server do end end end + + describe '#expected_version?' do + using RSpec::Parameterized::TableSyntax + + where(:expected_version, :server_version, :result) do + '1.1.1' | '1.1.1' | true + '1.1.2' | '1.1.1' | false + '1.73.0' | '1.73.0-18-gf756ebe2' | false + '594c3ea3e0e5540e5915bd1c49713a0381459dd6' | '1.55.6-45-g594c3ea3' | true + '594c3ea3e0e5540e5915bd1c49713a0381459dd6' | '1.55.6-46-gabc123ff' | false + '594c3ea3e0e5540e5915bd1c49713a0381459dd6' | '1.55.6' | false + end + + with_them do + it do + allow(Gitlab::GitalyClient).to receive(:expected_server_version).and_return(expected_version) + allow(server).to receive(:server_version).and_return(server_version) + + expect(server.expected_version?).to eq(result) + end + end + end end diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb index 449eee7a371..2ba253f9652 100644 --- a/spec/lib/gitlab/database/migration_helpers_spec.rb +++ b/spec/lib/gitlab/database/migration_helpers_spec.rb @@ -212,44 +212,118 @@ describe Gitlab::Database::MigrationHelpers do allow(model).to receive(:transaction_open?).and_return(false) end - it 'creates a concurrent foreign key and validates it' do - expect(model).to receive(:disable_statement_timeout).and_call_original - expect(model).to receive(:execute).with(/statement_timeout/) - expect(model).to receive(:execute).ordered.with(/NOT VALID/) - expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) - expect(model).to receive(:execute).with(/RESET ALL/) + context 'ON DELETE statements' do + context 'on_delete: :nullify' do + it 'appends ON DELETE SET NULL statement' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) + expect(model).to receive(:execute).with(/RESET ALL/) - model.add_concurrent_foreign_key(:projects, :users, column: :user_id) + expect(model).to receive(:execute).with(/ON DELETE SET NULL/) + + model.add_concurrent_foreign_key(:projects, :users, + column: :user_id, + on_delete: :nullify) + end + end + + context 'on_delete: :cascade' do + it 'appends ON DELETE CASCADE statement' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) + expect(model).to receive(:execute).with(/RESET ALL/) + + expect(model).to receive(:execute).with(/ON DELETE CASCADE/) + + model.add_concurrent_foreign_key(:projects, :users, + column: :user_id, + on_delete: :cascade) + end + end + + context 'on_delete: nil' do + it 'appends no ON DELETE statement' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) + expect(model).to receive(:execute).with(/RESET ALL/) + + expect(model).not_to receive(:execute).with(/ON DELETE/) + + model.add_concurrent_foreign_key(:projects, :users, + column: :user_id, + on_delete: nil) + end + end end - it 'appends a valid ON DELETE statement' do - expect(model).to receive(:disable_statement_timeout).and_call_original - expect(model).to receive(:execute).with(/statement_timeout/) - expect(model).to receive(:execute).with(/ON DELETE SET NULL/) - expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) - expect(model).to receive(:execute).with(/RESET ALL/) + context 'when no custom key name is supplied' do + it 'creates a concurrent foreign key and validates it' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/NOT VALID/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT/) + expect(model).to receive(:execute).with(/RESET ALL/) - model.add_concurrent_foreign_key(:projects, :users, - column: :user_id, - on_delete: :nullify) + model.add_concurrent_foreign_key(:projects, :users, column: :user_id) + end + + it 'does not create a foreign key if it exists already' do + name = model.concurrent_foreign_key_name(:projects, :user_id) + expect(model).to receive(:foreign_key_exists?).with(:projects, :users, + column: :user_id, + on_delete: :cascade, + name: name).and_return(true) + + expect(model).not_to receive(:execute).with(/ADD CONSTRAINT/) + expect(model).to receive(:execute).with(/VALIDATE CONSTRAINT/) + + model.add_concurrent_foreign_key(:projects, :users, column: :user_id) + end end - it 'does not create a foreign key if it exists already' do - expect(model).to receive(:foreign_key_exists?).with(:projects, :users, column: :user_id).and_return(true) - expect(model).not_to receive(:execute).with(/ADD CONSTRAINT/) - expect(model).to receive(:execute).with(/VALIDATE CONSTRAINT/) + context 'when a custom key name is supplied' do + context 'for creating a new foreign key for a column that does not presently exist' do + it 'creates a new foreign key' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/NOT VALID/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT.+foo/) + expect(model).to receive(:execute).with(/RESET ALL/) - model.add_concurrent_foreign_key(:projects, :users, column: :user_id) - end + model.add_concurrent_foreign_key(:projects, :users, column: :user_id, name: :foo) + end + end - it 'allows the use of a custom key name' do - expect(model).to receive(:disable_statement_timeout).and_call_original - expect(model).to receive(:execute).with(/statement_timeout/) - expect(model).to receive(:execute).ordered.with(/NOT VALID/) - expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT.+foo/) - expect(model).to receive(:execute).with(/RESET ALL/) + context 'for creating a duplicate foreign key for a column that presently exists' do + context 'when the supplied key name is the same as the existing foreign key name' do + it 'does not create a new foreign key' do + expect(model).to receive(:foreign_key_exists?).with(:projects, :users, + name: :foo, + on_delete: :cascade, + column: :user_id).and_return(true) - model.add_concurrent_foreign_key(:projects, :users, column: :user_id, name: :foo) + expect(model).not_to receive(:execute).with(/ADD CONSTRAINT/) + expect(model).to receive(:execute).with(/VALIDATE CONSTRAINT/) + + model.add_concurrent_foreign_key(:projects, :users, column: :user_id, name: :foo) + end + end + + context 'when the supplied key name is different from the existing foreign key name' do + it 'creates a new foreign key' do + expect(model).to receive(:disable_statement_timeout).and_call_original + expect(model).to receive(:execute).with(/statement_timeout/) + expect(model).to receive(:execute).ordered.with(/NOT VALID/) + expect(model).to receive(:execute).ordered.with(/VALIDATE CONSTRAINT.+bar/) + expect(model).to receive(:execute).with(/RESET ALL/) + + model.add_concurrent_foreign_key(:projects, :users, column: :user_id, name: :bar) + end + end + end end end end @@ -266,23 +340,61 @@ describe Gitlab::Database::MigrationHelpers do describe '#foreign_key_exists?' do before do - key = ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(:projects, :users, { column: :non_standard_id }) + key = ActiveRecord::ConnectionAdapters::ForeignKeyDefinition.new(:projects, :users, { column: :non_standard_id, name: :fk_projects_users_non_standard_id, on_delete: :cascade }) allow(model).to receive(:foreign_keys).with(:projects).and_return([key]) end - it 'finds existing foreign keys by column' do - expect(model.foreign_key_exists?(:projects, :users, column: :non_standard_id)).to be_truthy + shared_examples_for 'foreign key checks' do + it 'finds existing foreign keys by column' do + expect(model.foreign_key_exists?(:projects, target_table, column: :non_standard_id)).to be_truthy + end + + it 'finds existing foreign keys by name' do + expect(model.foreign_key_exists?(:projects, target_table, name: :fk_projects_users_non_standard_id)).to be_truthy + end + + it 'finds existing foreign_keys by name and column' do + expect(model.foreign_key_exists?(:projects, target_table, name: :fk_projects_users_non_standard_id, column: :non_standard_id)).to be_truthy + end + + it 'finds existing foreign_keys by name, column and on_delete' do + expect(model.foreign_key_exists?(:projects, target_table, name: :fk_projects_users_non_standard_id, column: :non_standard_id, on_delete: :cascade)).to be_truthy + end + + it 'finds existing foreign keys by target table only' do + expect(model.foreign_key_exists?(:projects, target_table)).to be_truthy + end + + it 'compares by column name if given' do + expect(model.foreign_key_exists?(:projects, target_table, column: :user_id)).to be_falsey + end + + it 'compares by foreign key name if given' do + expect(model.foreign_key_exists?(:projects, target_table, name: :non_existent_foreign_key_name)).to be_falsey + end + + it 'compares by foreign key name and column if given' do + expect(model.foreign_key_exists?(:projects, target_table, name: :non_existent_foreign_key_name, column: :non_standard_id)).to be_falsey + end + + it 'compares by foreign key name, column and on_delete if given' do + expect(model.foreign_key_exists?(:projects, target_table, name: :fk_projects_users_non_standard_id, column: :non_standard_id, on_delete: :nullify)).to be_falsey + end end - it 'finds existing foreign keys by target table only' do - expect(model.foreign_key_exists?(:projects, :users)).to be_truthy + context 'without specifying a target table' do + let(:target_table) { nil } + + it_behaves_like 'foreign key checks' end - it 'compares by column name if given' do - expect(model.foreign_key_exists?(:projects, :users, column: :user_id)).to be_falsey + context 'specifying a target table' do + let(:target_table) { :users } + + it_behaves_like 'foreign key checks' end - it 'compares by target if no column given' do + it 'compares by target table if no column given' do expect(model.foreign_key_exists?(:projects, :other_table)).to be_falsey end end diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index 7e39e9989e5..24f0eb9a30c 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -290,6 +290,7 @@ project: - microsoft_teams_service - mattermost_service - hangouts_chat_service +- unify_circuit_service - buildkite_service - bamboo_service - teamcity_service diff --git a/spec/lib/sentry/client_spec.rb b/spec/lib/sentry/client_spec.rb index ed9da77038f..388a6418929 100644 --- a/spec/lib/sentry/client_spec.rb +++ b/spec/lib/sentry/client_spec.rb @@ -54,10 +54,20 @@ describe Sentry::Client do end end + shared_examples 'issues has correct return type' do |klass| + it "returns objects of type #{klass}" do + expect(subject[:issues]).to all( be_a(klass) ) + end + end + shared_examples 'has correct length' do |length| it { expect(subject.length).to eq(length) } end + shared_examples 'issues has correct length' do |length| + it { expect(subject[:issues].length).to eq(length) } + end + # Requires sentry_api_request and subject to be defined shared_examples 'calls sentry api' do it 'calls sentry api' do @@ -95,26 +105,44 @@ describe Sentry::Client do let(:issue_status) { 'unresolved' } let(:limit) { 20 } let(:search_term) { '' } + let(:cursor) { nil } + let(:sort) { 'last_seen' } let(:sentry_api_response) { issues_sample_response } let(:sentry_request_url) { sentry_url + '/issues/?limit=20&query=is:unresolved' } let!(:sentry_api_request) { stub_sentry_request(sentry_request_url, body: sentry_api_response) } - subject { client.list_issues(issue_status: issue_status, limit: limit, search_term: search_term, sort: 'last_seen') } + subject { client.list_issues(issue_status: issue_status, limit: limit, search_term: search_term, sort: sort, cursor: cursor) } it_behaves_like 'calls sentry api' - it_behaves_like 'has correct return type', Gitlab::ErrorTracking::Error - it_behaves_like 'has correct length', 1 + it_behaves_like 'issues has correct return type', Gitlab::ErrorTracking::Error + it_behaves_like 'issues has correct length', 1 shared_examples 'has correct external_url' do context 'external_url' do it 'is constructed correctly' do - expect(subject[0].external_url).to eq('https://sentrytest.gitlab.com/sentry-org/sentry-project/issues/11') + expect(subject[:issues][0].external_url).to eq('https://sentrytest.gitlab.com/sentry-org/sentry-project/issues/11') end end end + context 'when response has a pagination info' do + let(:headers) do + { + link: '; rel="previous"; results="true"; cursor="1573556671000:0:1", ; rel="next"; results="true"; cursor="1572959139000:0:0"' + } + end + let!(:sentry_api_request) { stub_sentry_request(sentry_request_url, body: sentry_api_response, headers: headers) } + + it 'parses the pagination' do + expect(subject[:pagination]).to eq( + 'previous' => { 'cursor' => '1573556671000:0:1' }, + 'next' => { 'cursor' => '1572959139000:0:0' } + ) + end + end + context 'error object created from sentry response' do using RSpec::Parameterized::TableSyntax @@ -137,7 +165,7 @@ describe Sentry::Client do end with_them do - it { expect(subject[0].public_send(error_object)).to eq(sentry_api_response[0].dig(*sentry_response)) } + it { expect(subject[:issues][0].public_send(error_object)).to eq(sentry_api_response[0].dig(*sentry_response)) } end it_behaves_like 'has correct external_url' @@ -210,8 +238,8 @@ describe Sentry::Client do it_behaves_like 'calls sentry api' - it_behaves_like 'has correct return type', Gitlab::ErrorTracking::Error - it_behaves_like 'has correct length', 1 + it_behaves_like 'issues has correct return type', Gitlab::ErrorTracking::Error + it_behaves_like 'issues has correct length', 1 it_behaves_like 'has correct external_url' end @@ -240,13 +268,23 @@ describe Sentry::Client do it_behaves_like 'maps exceptions' context 'when search term is present' do - let(:search_term) { 'NoMethodError'} + let(:search_term) { 'NoMethodError' } let(:sentry_request_url) { "#{sentry_url}/issues/?limit=20&query=is:unresolved NoMethodError" } it_behaves_like 'calls sentry api' - it_behaves_like 'has correct return type', Gitlab::ErrorTracking::Error - it_behaves_like 'has correct length', 1 + it_behaves_like 'issues has correct return type', Gitlab::ErrorTracking::Error + it_behaves_like 'issues has correct length', 1 + end + + context 'when cursor is present' do + let(:cursor) { '1572959139000:0:0' } + let(:sentry_request_url) { "#{sentry_url}/issues/?limit=20&cursor=#{cursor}&query=is:unresolved" } + + it_behaves_like 'calls sentry api' + + it_behaves_like 'issues has correct return type', Gitlab::ErrorTracking::Error + it_behaves_like 'issues has correct length', 1 end end diff --git a/spec/lib/sentry/pagination_parser_spec.rb b/spec/lib/sentry/pagination_parser_spec.rb new file mode 100644 index 00000000000..1be6f9f4163 --- /dev/null +++ b/spec/lib/sentry/pagination_parser_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'fast_spec_helper' +require 'support/helpers/fixture_helpers' + +describe Sentry::PaginationParser do + include FixtureHelpers + + describe '.parse' do + subject { described_class.parse(headers) } + + context 'when headers do not have "link" param' do + let(:headers) { {} } + + it 'returns empty hash' do + is_expected.to eq({}) + end + end + + context 'when headers.link has previous and next pages' do + let(:headers) do + { + 'link' => '; rel="previous"; results="true"; cursor="1573556671000:0:1", ; rel="next"; results="true"; cursor="1572959139000:0:0"' + } + end + + it 'returns info about both pages' do + is_expected.to eq( + 'previous' => { 'cursor' => '1573556671000:0:1' }, + 'next' => { 'cursor' => '1572959139000:0:0' } + ) + end + end + + context 'when headers.link has only next page' do + let(:headers) do + { + 'link' => '; rel="previous"; results="false"; cursor="1573556671000:0:1", ; rel="next"; results="true"; cursor="1572959139000:0:0"' + } + end + + it 'returns only info about the next page' do + is_expected.to eq( + 'next' => { 'cursor' => '1572959139000:0:0' } + ) + end + end + + context 'when headers.link has only previous page' do + let(:headers) do + { + 'link' => '; rel="previous"; results="true"; cursor="1573556671000:0:1", ; rel="next"; results="false"; cursor="1572959139000:0:0"' + } + end + + it 'returns only info about the previous page' do + is_expected.to eq( + 'previous' => { 'cursor' => '1573556671000:0:1' } + ) + end + end + end +end diff --git a/spec/migrations/20191125114345_add_admin_mode_protected_path_spec.rb b/spec/migrations/20191125114345_add_admin_mode_protected_path_spec.rb new file mode 100644 index 00000000000..110da221393 --- /dev/null +++ b/spec/migrations/20191125114345_add_admin_mode_protected_path_spec.rb @@ -0,0 +1,50 @@ +# frozen_string_literal: true + +require 'spec_helper' +require Rails.root.join('db', 'migrate', '20191125114345_add_admin_mode_protected_path.rb') + +describe AddAdminModeProtectedPath, :migration do + ADMIN_MODE_ENDPOINT = '/admin/session' + + subject(:migration) { described_class.new } + + let(:application_settings) { table(:application_settings) } + + context 'no settings available' do + it 'makes no changes' do + expect { migrate! }.not_to change { application_settings.count } + end + end + + context 'protected_paths is null' do + before do + application_settings.create!(protected_paths: nil) + end + + it 'makes no changes' do + expect { migrate! }.not_to change { application_settings.first.protected_paths } + end + end + + it 'appends admin mode endpoint' do + application_settings.create!(protected_paths: '{a,b,c}') + + protected_paths_before = %w[a b c] + protected_paths_after = protected_paths_before.dup << ADMIN_MODE_ENDPOINT + + expect { migrate! }.to change { application_settings.first.protected_paths }.from(protected_paths_before).to(protected_paths_after) + end + + it 'new default includes admin mode endpoint' do + settings_before = application_settings.create! + + expect(settings_before.protected_paths).not_to include(ADMIN_MODE_ENDPOINT) + + migrate! + + application_settings.reset_column_information + settings_after = application_settings.create! + + expect(settings_after.protected_paths).to include(ADMIN_MODE_ENDPOINT) + end +end diff --git a/spec/models/application_setting_spec.rb b/spec/models/application_setting_spec.rb index ba3b99f4421..9a76be5b6f1 100644 --- a/spec/models/application_setting_spec.rb +++ b/spec/models/application_setting_spec.rb @@ -66,6 +66,8 @@ describe ApplicationSetting do it { is_expected.not_to allow_value('three').for(:push_event_activities_limit) } it { is_expected.not_to allow_value(nil).for(:push_event_activities_limit) } + it { is_expected.to validate_numericality_of(:snippet_size_limit).only_integer.is_greater_than(0) } + context 'when snowplow is enabled' do before do setting.snowplow_enabled = true diff --git a/spec/models/error_tracking/project_error_tracking_setting_spec.rb b/spec/models/error_tracking/project_error_tracking_setting_spec.rb index dbd3f8ffab3..27406533e5f 100644 --- a/spec/models/error_tracking/project_error_tracking_setting_spec.rb +++ b/spec/models/error_tracking/project_error_tracking_setting_spec.rb @@ -153,9 +153,9 @@ describe ErrorTracking::ProjectErrorTrackingSetting do it 'returns cached issues' do expect(sentry_client).to receive(:list_issues).with(opts) - .and_return(issues) + .and_return(issues: issues, pagination: {}) - expect(result).to eq(issues: issues) + expect(result).to eq(issues: issues, pagination: {}) end end diff --git a/spec/models/project_services/unify_circuit_service_spec.rb b/spec/models/project_services/unify_circuit_service_spec.rb new file mode 100644 index 00000000000..51079ea5395 --- /dev/null +++ b/spec/models/project_services/unify_circuit_service_spec.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +require "spec_helper" + +describe UnifyCircuitService do + it_behaves_like "chat service", "Unify Circuit" do + let(:client_arguments) { webhook_url } + let(:content_key) { :subject } + end +end diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index cf7bc59f89d..1ebac936341 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -33,6 +33,7 @@ describe Project do it { is_expected.to have_one(:microsoft_teams_service) } it { is_expected.to have_one(:mattermost_service) } it { is_expected.to have_one(:hangouts_chat_service) } + it { is_expected.to have_one(:unify_circuit_service) } it { is_expected.to have_one(:packagist_service) } it { is_expected.to have_one(:pushover_service) } it { is_expected.to have_one(:asana_service) } diff --git a/spec/models/snippet_spec.rb b/spec/models/snippet_spec.rb index cfc0703af23..82836dac1d7 100644 --- a/spec/models/snippet_spec.rb +++ b/spec/models/snippet_spec.rb @@ -31,6 +31,62 @@ describe Snippet do it { is_expected.to validate_presence_of(:content) } it { is_expected.to validate_inclusion_of(:visibility_level).in_array(Gitlab::VisibilityLevel.values) } + + it do + allow(Gitlab::CurrentSettings).to receive(:snippet_size_limit).and_return(1) + + is_expected + .to validate_length_of(:content) + .is_at_most(Gitlab::CurrentSettings.snippet_size_limit) + .with_message("is too long (2 Bytes). The maximum size is 1 Byte.") + end + + context 'content validations' do + context 'with existing snippets' do + let(:snippet) { create(:personal_snippet, content: 'This is a valid content at the time of creation') } + + before do + expect(snippet).to be_valid + + stub_application_setting(snippet_size_limit: 2) + end + + it 'does not raise a validation error if the content is not changed' do + snippet.title = 'new title' + + expect(snippet).to be_valid + end + + it 'raises and error if the content is changed and the size is bigger than limit' do + snippet.content = snippet.content + "test" + + expect(snippet).not_to be_valid + end + end + + context 'with new snippets' do + let(:limit) { 15 } + + before do + stub_application_setting(snippet_size_limit: limit) + end + + it 'is valid when content is smaller than the limit' do + snippet = build(:personal_snippet, content: 'Valid Content') + + expect(snippet).to be_valid + end + + it 'raises error when content is bigger than setting limit' do + snippet = build(:personal_snippet, content: 'This is an invalid content') + + aggregate_failures do + expect(snippet).not_to be_valid + expect(snippet.errors[:content]).to include("is too long (#{snippet.content.size} Bytes). The maximum size is #{limit} Bytes.") + end + end + end + end end describe '#to_reference' do diff --git a/spec/requests/api/settings_spec.rb b/spec/requests/api/settings_spec.rb index b7586307929..6599e4b8f23 100644 --- a/spec/requests/api/settings_spec.rb +++ b/spec/requests/api/settings_spec.rb @@ -36,6 +36,7 @@ describe API::Settings, 'Settings' do expect(json_response['allow_local_requests_from_system_hooks']).to be(true) expect(json_response).not_to have_key('performance_bar_allowed_group_path') expect(json_response).not_to have_key('performance_bar_enabled') + expect(json_response['snippet_size_limit']).to eq(50.megabytes) end end @@ -85,7 +86,8 @@ describe API::Settings, 'Settings' do allow_local_requests_from_web_hooks_and_services: true, allow_local_requests_from_system_hooks: false, push_event_hooks_limit: 2, - push_event_activities_limit: 2 + push_event_activities_limit: 2, + snippet_size_limit: 5 } expect(response).to have_gitlab_http_status(200) @@ -121,6 +123,7 @@ describe API::Settings, 'Settings' do expect(json_response['allow_local_requests_from_system_hooks']).to eq(false) expect(json_response['push_event_hooks_limit']).to eq(2) expect(json_response['push_event_activities_limit']).to eq(2) + expect(json_response['snippet_size_limit']).to eq(5) end end diff --git a/spec/services/error_tracking/list_issues_service_spec.rb b/spec/services/error_tracking/list_issues_service_spec.rb index 67455190450..e0e280591cd 100644 --- a/spec/services/error_tracking/list_issues_service_spec.rb +++ b/spec/services/error_tracking/list_issues_service_spec.rb @@ -5,13 +5,14 @@ require 'spec_helper' describe ErrorTracking::ListIssuesService do set(:user) { create(:user) } set(:project) { create(:project) } - let(:params) { { search_term: 'something', sort: 'last_seen' } } + let(:params) { { search_term: 'something', sort: 'last_seen', cursor: 'some-cursor' } } let(:list_sentry_issues_args) do { issue_status: 'unresolved', limit: 20, - search_term: params[:search_term], - sort: params[:sort] + search_term: 'something', + sort: 'last_seen', + cursor: 'some-cursor' } end @@ -40,11 +41,11 @@ describe ErrorTracking::ListIssuesService do expect(error_tracking_setting) .to receive(:list_sentry_issues) .with(list_sentry_issues_args) - .and_return(issues: issues) + .and_return(issues: issues, pagination: {}) end it 'returns the issues' do - expect(result).to eq(status: :success, issues: issues) + expect(result).to eq(status: :success, pagination: {}, issues: issues) end end diff --git a/spec/support/shared_examples/models/chat_service_shared_examples.rb b/spec/support/shared_examples/models/chat_service_shared_examples.rb index 98bf647a9bc..7936a8eb974 100644 --- a/spec/support/shared_examples/models/chat_service_shared_examples.rb +++ b/spec/support/shared_examples/models/chat_service_shared_examples.rb @@ -80,7 +80,7 @@ shared_examples_for "chat service" do |service_name| it_behaves_like "triggered #{service_name} service" - it "specifies the webhook when it is configured" do + it "specifies the webhook when it is configured", if: defined?(client) do expect(client).to receive(:new).with(client_arguments).and_return(double(:chat_service).as_null_object) subject.execute(sample_data)