From b4e072cbaf808793bafff148b0ec9d47819f479e Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 11 Oct 2019 06:06:27 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- app/controllers/groups_controller.rb | 20 ++- .../clusters/applications/cert_manager.rb | 2 +- app/models/event.rb | 9 -- app/models/event_collection.rb | 43 +++--- app/models/group.rb | 4 + app/views/groups/_activities.html.haml | 2 +- app/views/shared/_event_filter.html.haml | 4 + .../unreleased/not_silent_retry_failure.yml | 5 + .../monitoring/prometheus/gitlab_exporter.md | 23 ++- .../prometheus/gitlab_monitor_exporter.md | 5 + .../img/merge_request_pipeline.png | Bin 4394 -> 0 bytes .../img/merged_result_pipeline_v12_3.png | Bin 0 -> 28194 bytes .../pipelines_for_merged_results/index.md | 2 +- doc/ci/variables/predefined_variables.md | 4 +- doc/ci/yaml/README.md | 9 +- doc/development/architecture.md | 24 ++-- doc/development/changelog.md | 2 +- doc/development/database_debugging.md | 2 +- .../documentation/improvement-workflow.md | 2 +- doc/development/documentation/index.md | 28 ++-- doc/development/documentation/styleguide.md | 22 +-- doc/development/elasticsearch.md | 7 +- doc/development/event_tracking/frontend.md | 6 +- doc/development/fe_guide/components.md | 2 +- .../fe_guide/development_process.md | 2 +- doc/development/fe_guide/icons.md | 2 +- doc/development/fe_guide/performance.md | 23 +-- doc/development/fe_guide/security.md | 2 +- doc/development/fe_guide/style_guide_js.md | 4 +- doc/development/feature_flags/controls.md | 4 +- doc/development/gitaly.md | 14 +- doc/development/i18n/index.md | 2 +- doc/development/i18n/proofreader.md | 2 +- doc/development/i18n/translation.md | 4 +- doc/development/import_export.md | 2 +- doc/development/interacting_components.md | 2 +- doc/development/kubernetes.md | 5 +- .../new_fe_guide/development/components.md | 2 +- .../new_fe_guide/development/performance.md | 4 +- doc/development/sidekiq_style_guide.md | 2 +- .../testing_guide/best_practices.md | 10 +- .../testing_guide/end_to_end/page_objects.md | 2 +- doc/development/testing_guide/flaky_tests.md | 2 +- .../testing_guide/frontend_testing.md | 2 +- doc/development/testing_guide/review_apps.md | 4 +- doc/development/uploads.md | 18 +-- doc/user/project/deploy_tokens/index.md | 2 +- doc/user/project/merge_requests/index.md | 136 +----------------- .../merge_requests/merge_request_approvals.md | 10 +- doc/user/project/push_options.md | 77 ++++++++++ lib/event_filter.rb | 11 +- lib/gitlab/database.rb | 4 - lib/gitlab/kubernetes/helm/client_command.rb | 2 +- locale/gitlab.pot | 6 + scripts/lint-doc.sh | 4 +- spec/controllers/groups_controller_spec.rb | 2 +- .../projects/features_visibility_spec.rb | 2 +- spec/lib/event_filter_spec.rb | 6 - spec/lib/gitlab/database_spec.rb | 14 -- .../kubernetes/helm/delete_command_spec.rb | 4 +- .../kubernetes/helm/install_command_spec.rb | 14 +- .../applications/cert_manager_spec.rb | 2 +- spec/models/event_collection_spec.rb | 83 +++++++---- 63 files changed, 347 insertions(+), 373 deletions(-) create mode 100644 changelogs/unreleased/not_silent_retry_failure.yml create mode 100644 doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md delete mode 100644 doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png create mode 100644 doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merged_result_pipeline_v12_3.png create mode 100644 doc/user/project/push_options.md diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index 95a7876a055..3204e1e388b 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -198,15 +198,13 @@ class GroupsController < Groups::ApplicationController def load_events params[:sort] ||= 'latest_activity_desc' - options = {} - options[:include_subgroups] = true - - @projects = GroupProjectsFinder.new(params: params, group: group, options: options, current_user: current_user) - .execute - .includes(:namespace) + options = { include_subgroups: true } + projects = GroupProjectsFinder.new(params: params, group: group, options: options, current_user: current_user) + .execute + .includes(:namespace) @events = EventCollection - .new(@projects, offset: params[:offset].to_i, filter: event_filter) + .new(projects, offset: params[:offset].to_i, filter: event_filter, groups: groups) .to_a Events::RenderService @@ -228,6 +226,14 @@ class GroupsController < Groups::ApplicationController url_for(safe_params) end + + private + + def groups + if @group.supports_events? + @group.self_and_descendants.public_or_visible_to_user(current_user) + end + end end GroupsController.prepend_if_ee('EE::GroupsController') diff --git a/app/models/clusters/applications/cert_manager.rb b/app/models/clusters/applications/cert_manager.rb index 27d4180e5b9..2d71c4d5754 100644 --- a/app/models/clusters/applications/cert_manager.rb +++ b/app/models/clusters/applications/cert_manager.rb @@ -65,7 +65,7 @@ module Clusters end def retry_command(command) - "for i in $(seq 1 30); do #{command} && break; sleep 1s; echo \"Retrying ($i)...\"; done" + "for i in $(seq 1 30); do #{command} && break; sleep 1s; echo \"Retrying ($i)...\"; false; done" end def post_delete_script diff --git a/app/models/event.rb b/app/models/event.rb index 205e1f71c74..9611019adb8 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -77,15 +77,6 @@ class Event < ApplicationRecord scope :recent, -> { reorder(id: :desc) } scope :code_push, -> { where(action: PUSHED) } - scope :in_projects, -> (projects) do - sub_query = projects - .except(:order) - .select(1) - .where('projects.id = events.project_id') - - where('EXISTS (?)', sub_query).recent - end - scope :with_associations, -> do # We're using preload for "push_event_payload" as otherwise the association # is not always available (depending on the query being built). diff --git a/app/models/event_collection.rb b/app/models/event_collection.rb index a4c69b11781..4778f74568e 100644 --- a/app/models/event_collection.rb +++ b/app/models/event_collection.rb @@ -6,6 +6,8 @@ # in a controller), it's not suitable for building queries that are used for # building other queries. class EventCollection + include Gitlab::Utils::StrongMemoize + # To prevent users from putting too much pressure on the database by cycling # through thousands of events we put a limit on the number of pages. MAX_PAGE = 10 @@ -13,57 +15,52 @@ class EventCollection # projects - An ActiveRecord::Relation object that returns the projects for # which to retrieve events. # filter - An EventFilter instance to use for filtering events. - def initialize(projects, limit: 20, offset: 0, filter: nil) + def initialize(projects, limit: 20, offset: 0, filter: nil, groups: nil) @projects = projects @limit = limit @offset = offset @filter = filter + @groups = groups end # Returns an Array containing the events. def to_a return [] if current_page > MAX_PAGE - relation = if Gitlab::Database.join_lateral_supported? - relation_with_join_lateral + relation = if groups + project_and_group_events else - relation_without_join_lateral + relation_with_join_lateral('project_id', projects) end + relation = paginate_events(relation) relation.with_associations.to_a end private - # Returns the events relation to use when JOIN LATERAL is not supported. - # - # This relation simply gets all the events for all authorized projects, then - # limits that set. - def relation_without_join_lateral - events = filtered_events.in_projects(projects) + def project_and_group_events + project_events = relation_with_join_lateral('project_id', projects) + group_events = relation_with_join_lateral('group_id', groups) - paginate_events(events) + Event.from_union([project_events, group_events]).recent end - # Returns the events relation to use when JOIN LATERAL is supported. - # # This relation is built using JOIN LATERAL, producing faster queries than a # regular LIMIT + OFFSET approach. - def relation_with_join_lateral - projects_for_lateral = projects.select(:id).to_sql + def relation_with_join_lateral(parent_column, parents) + parents_for_lateral = parents.select(:id).to_sql lateral = filtered_events .limit(limit_for_join_lateral) - .where('events.project_id = projects_for_lateral.id') + .where("events.#{parent_column} = parents_for_lateral.id") # rubocop:disable GitlabSecurity/SqlInjection .to_sql # The outer query does not need to re-apply the filters since the JOIN # LATERAL body already takes care of this. - outer = base_relation - .from("(#{projects_for_lateral}) projects_for_lateral") + base_relation + .from("(#{parents_for_lateral}) parents_for_lateral") .joins("JOIN LATERAL (#{lateral}) AS #{Event.table_name} ON true") - - paginate_events(outer) end def filtered_events @@ -97,4 +94,10 @@ class EventCollection def projects @projects.except(:order) end + + def groups + strong_memoize(:groups) do + groups.except(:order) if @groups + end + end end diff --git a/app/models/group.rb b/app/models/group.rb index 5df9d97dcb6..0501fe94440 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -436,6 +436,10 @@ class Group < Namespace members.owners.order_recent_sign_in.limit(ACCESS_REQUEST_APPROVERS_TO_BE_NOTIFIED_LIMIT) end + def supports_events? + false + end + private def update_two_factor_requirement diff --git a/app/views/groups/_activities.html.haml b/app/views/groups/_activities.html.haml index 13df1e57125..44554cab1e9 100644 --- a/app/views/groups/_activities.html.haml +++ b/app/views/groups/_activities.html.haml @@ -1,5 +1,5 @@ .nav-block.activities - = render 'shared/event_filter' + = render 'shared/event_filter', show_group_events: @group.supports_events? .controls = link_to group_path(@group, rss_url_options), class: 'btn d-none d-sm-inline-block has-tooltip' , title: 'Subscribe' do %i.fa.fa-rss diff --git a/app/views/shared/_event_filter.html.haml b/app/views/shared/_event_filter.html.haml index 6612497e7e2..ad9eb325ff0 100644 --- a/app/views/shared/_event_filter.html.haml +++ b/app/views/shared/_event_filter.html.haml @@ -1,3 +1,5 @@ +- show_group_events = local_assigns.fetch(:show_group_events, false) + .scrolling-tabs-container.inner-page-scroll-tabs.is-smaller.flex-fill .fade-left= icon('angle-left') .fade-right= icon('angle-right') @@ -9,6 +11,8 @@ = event_filter_link EventFilter::MERGED, _('Merge events'), s_('EventFilterBy|Filter by merge events') - if event_filter_visible(:issues) = event_filter_link EventFilter::ISSUE, _('Issue events'), s_('EventFilterBy|Filter by issue events') + - if show_group_events + = render_if_exists 'events/epics_filter' - if comments_visible? = event_filter_link EventFilter::COMMENTS, _('Comments'), s_('EventFilterBy|Filter by comments') = event_filter_link EventFilter::TEAM, _('Team'), s_('EventFilterBy|Filter by team') diff --git a/changelogs/unreleased/not_silent_retry_failure.yml b/changelogs/unreleased/not_silent_retry_failure.yml new file mode 100644 index 00000000000..bccd046db7b --- /dev/null +++ b/changelogs/unreleased/not_silent_retry_failure.yml @@ -0,0 +1,5 @@ +--- +title: Stopped CRD apply retrying from allowing silent failures +merge_request: 18421 +author: +type: fixed diff --git a/doc/administration/monitoring/prometheus/gitlab_exporter.md b/doc/administration/monitoring/prometheus/gitlab_exporter.md index cfd9f55acc3..f6178799e0a 100644 --- a/doc/administration/monitoring/prometheus/gitlab_exporter.md +++ b/doc/administration/monitoring/prometheus/gitlab_exporter.md @@ -1,12 +1,16 @@ # GitLab exporter ->**Note:** -Available since [Omnibus GitLab 8.17][1132]. For installations from source -you'll have to install and configure it yourself. +>- Available since [Omnibus GitLab 8.17](https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1132). +>- Renamed from `GitLab monitor exporter` to `GitLab exporter` in [GitLab 12.3](https://gitlab.com/gitlab-org/gitlab/merge_requests/16511). -The [GitLab exporter] allows you to measure various GitLab metrics, pulled from Redis and the database. +The [GitLab exporter](https://gitlab.com/gitlab-org/gitlab-exporter) allows you to +measure various GitLab metrics, pulled from Redis and the database, in Omnibus GitLab +instances. -To enable the GitLab exporter: +NOTE: **Note:** +For installations from source you'll have to install and configure it yourself. + +To enable the GitLab exporter in an Omnibus GitLab instance: 1. [Enable Prometheus](index.md#configuring-prometheus) 1. Edit `/etc/gitlab/gitlab.rb` @@ -16,15 +20,10 @@ To enable the GitLab exporter: gitlab_exporter['enable'] = true ``` -1. Save the file and [reconfigure GitLab][reconfigure] for the changes to - take effect +1. Save the file and [reconfigure GitLab](../../restart_gitlab.md#omnibus-gitlab-reconfigure) + for the changes to take effect Prometheus will now automatically begin collecting performance data from the GitLab exporter exposed under `localhost:9168`. [← Back to the main Prometheus page](index.md) - -[1132]: https://gitlab.com/gitlab-org/omnibus-gitlab/merge_requests/1132 -[GitLab exporter]: https://gitlab.com/gitlab-org/gitlab-exporter -[prometheus]: https://prometheus.io -[reconfigure]: ../../restart_gitlab.md#omnibus-gitlab-reconfigure diff --git a/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md b/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md new file mode 100644 index 00000000000..ae3a3d739b5 --- /dev/null +++ b/doc/administration/monitoring/prometheus/gitlab_monitor_exporter.md @@ -0,0 +1,5 @@ +--- +redirect_to: 'gitlab_exporter.md' +--- + +This document was moved to [another location](gitlab_exporter.md). diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/img/merge_request_pipeline.png deleted file mode 100644 index 6d4b66824e144188795059d69a5b38eab6e6e514..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4394 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≶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 I&MBb@03ZN{00000 literal 0 HcmV?d00001 diff --git a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md index ced6efc415b..3a0848fcd08 100644 --- a/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md +++ b/doc/ci/merge_request_pipelines/pipelines_for_merged_results/index.md @@ -20,7 +20,7 @@ GitLab can run pipelines for merge requests on this merged result. That is, where the source and target branches are combined into a new ref and a pipeline for this ref validates the result prior to merging. -![Merge request pipeline as the head pipeline](img/merge_request_pipeline.png) +![Merge request pipeline as the head pipeline](img/merged_result_pipeline_v12_3.png) There are some cases where creating a combined ref is not possible or not wanted. For example, a source branch that has conflicts with the target branch diff --git a/doc/ci/variables/predefined_variables.md b/doc/ci/variables/predefined_variables.md index 0fc15ac87e3..52f712abfae 100644 --- a/doc/ci/variables/predefined_variables.md +++ b/doc/ci/variables/predefined_variables.md @@ -60,12 +60,12 @@ future GitLab releases.** | `CI_MERGE_REQUEST_PROJECT_URL` | 11.6 | all | The URL of the project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md) (e.g. `http://192.168.10.15:3000/namespace/awesome-project`). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_REF_PATH` | 11.6 | all | The ref path of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). (e.g. `refs/merge-requests/1/head`). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_SOURCE_BRANCH_NAME` | 11.6 | all | The source branch name of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | -| `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the source branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | +| `CI_MERGE_REQUEST_SOURCE_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the source branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used, the merge request is created, and the pipeline is a [merged result pipeline](../merge_request_pipelines/pipelines_for_merged_results/index.md). **(PREMIUM)** | | `CI_MERGE_REQUEST_SOURCE_PROJECT_ID` | 11.6 | all | The ID of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_SOURCE_PROJECT_PATH` | 11.6 | all | The path of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_SOURCE_PROJECT_URL` | 11.6 | all | The URL of the source project of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_TARGET_BRANCH_NAME` | 11.6 | all | The target branch name of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | -| `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the target branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | +| `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` | 11.9 | all | The HEAD SHA of the target branch of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used, the merge request is created, and the pipeline is a [merged result pipeline](../merge_request_pipelines/pipelines_for_merged_results/index.md). **(PREMIUM)** | | `CI_MERGE_REQUEST_TITLE` | 11.9 | all | The title of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_ASSIGNEES` | 11.9 | all | Comma-separated list of username(s) of assignee(s) for the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | | `CI_MERGE_REQUEST_MILESTONE` | 11.9 | all | The milestone title of the merge request if [the pipelines are for merge requests](../merge_request_pipelines/index.md). Available only if `only: [merge_requests]` is used and the merge request is created. | diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index a9f30a5ddd4..1a7c358eb91 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -3309,13 +3309,8 @@ all updated Merge Requests will have a pipeline created when using If your commit message contains `[ci skip]` or `[skip ci]`, using any capitalization, the commit will be created but the pipeline will be skipped. -Alternatively, one can pass the `ci.skip` [Git push option][push-option] if -using Git 2.10 or newer: - -```sh -git push --push-option=ci.skip # using git 2.10+ -git push -o ci.skip # using git 2.18+ -``` +Alternatively, one can pass the `ci.skip` [Git push option](../../user/project/push_options.md#push-options-for-gitlab-cicd) +if using Git 2.10 or newer.