diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
commit | 43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch) | |
tree | dceebdc68925362117480a5d672bcff122fb625b /app/controllers/projects/pipelines_controller.rb | |
parent | 20c84b99005abd1c82101dfeff264ac50d2df211 (diff) |
Add latest changes from gitlab-org/gitlab@16-0-stable-eev16.0.0-rc42
Diffstat (limited to 'app/controllers/projects/pipelines_controller.rb')
-rw-r--r-- | app/controllers/projects/pipelines_controller.rb | 103 |
1 files changed, 44 insertions, 59 deletions
diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 10f58a9f479..39ebcd60e9a 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -2,23 +2,23 @@ class Projects::PipelinesController < Projects::ApplicationController include ::Gitlab::Utils::StrongMemoize - include RedisTracking + include ProductAnalyticsTracking include ProductAnalyticsTracking include ProjectStatsRefreshConflictsGuard urgency :low, [ :index, :new, :builds, :show, :failures, :create, :stage, :retry, :dag, :cancel, :test_report, - :charts, :config_variables, :destroy, :status + :charts, :destroy, :status ] before_action :disable_query_limiting, only: [:create, :retry] - before_action :pipeline, except: [:index, :new, :create, :charts, :config_variables] + before_action :pipeline, except: [:index, :new, :create, :charts] before_action :set_pipeline_path, only: [:show] before_action :authorize_read_pipeline! before_action :authorize_read_build!, only: [:index, :show] before_action :authorize_read_ci_cd_analytics!, only: [:charts] - before_action :authorize_create_pipeline!, only: [:new, :create, :config_variables] + before_action :authorize_create_pipeline!, only: [:new, :create] before_action :authorize_update_pipeline!, only: [:retry, :cancel] before_action :ensure_pipeline, only: [:show, :downloadable_artifacts] before_action :reject_if_build_artifacts_size_refreshing!, only: [:destroy] @@ -28,24 +28,24 @@ class Projects::PipelinesController < Projects::ApplicationController around_action :allow_gitaly_ref_name_caching, only: [:index, :show] - track_custom_event :charts, + track_event :charts, name: 'p_analytics_pipelines', action: 'perform_analytics_usage_action', label: 'redis_hll_counters.analytics.analytics_total_unique_counts_monthly', destinations: %i[redis_hll snowplow] - track_redis_hll_event :charts, name: 'p_analytics_ci_cd_pipelines', if: -> { should_track_ci_cd_pipelines? } - track_redis_hll_event :charts, name: 'p_analytics_ci_cd_deployment_frequency', if: -> { should_track_ci_cd_deployment_frequency? } - track_redis_hll_event :charts, name: 'p_analytics_ci_cd_lead_time', if: -> { should_track_ci_cd_lead_time? } - track_redis_hll_event :charts, name: 'p_analytics_ci_cd_time_to_restore_service', if: -> { should_track_ci_cd_time_to_restore_service? } - track_redis_hll_event :charts, name: 'p_analytics_ci_cd_change_failure_rate', if: -> { should_track_ci_cd_change_failure_rate? } + track_event :charts, name: 'p_analytics_ci_cd_pipelines', conditions: -> { should_track_ci_cd_pipelines? } + track_event :charts, name: 'p_analytics_ci_cd_deployment_frequency', conditions: -> { should_track_ci_cd_deployment_frequency? } + track_event :charts, name: 'p_analytics_ci_cd_lead_time', conditions: -> { should_track_ci_cd_lead_time? } + track_event :charts, name: 'p_analytics_ci_cd_time_to_restore_service', conditions: -> { should_track_ci_cd_time_to_restore_service? } + track_event :charts, name: 'p_analytics_ci_cd_change_failure_rate', conditions: -> { should_track_ci_cd_change_failure_rate? } wrap_parameters Ci::Pipeline POLLING_INTERVAL = 10_000 feature_category :continuous_integration, [ - :charts, :show, :config_variables, :stage, :cancel, :retry, + :charts, :show, :stage, :cancel, :retry, :builds, :dag, :failures, :status, :index, :create, :new, :destroy ] @@ -61,9 +61,7 @@ class Projects::PipelinesController < Projects::ApplicationController @pipelines_count = limited_pipelines_count(project) respond_to do |format| - format.html do - enable_runners_availability_section_experiment - end + format.html format.json do Gitlab::PollingInterval.set_header(response, interval: POLLING_INTERVAL) @@ -98,15 +96,15 @@ class Projects::PipelinesController < Projects::ApplicationController end format.json do if service_response.success? - render json: PipelineSerializer - .new(project: project, current_user: current_user) - .represent(@pipeline), - status: :created + render json: PipelineSerializer.new(project: project, current_user: current_user).represent(@pipeline), + status: :created else - render json: { errors: @pipeline.error_messages.map(&:content), - warnings: @pipeline.warning_messages(limit: ::Gitlab::Ci::Warnings::MAX_LIMIT).map(&:content), - total_warnings: @pipeline.warning_messages.length }, - status: :bad_request + bad_request_json = { + errors: @pipeline.error_messages.map(&:content), + warnings: @pipeline.warning_messages(limit: ::Gitlab::Ci::Warnings::MAX_LIMIT).map(&:content), + total_warnings: @pipeline.warning_messages.length + } + render json: bad_request_json, status: :bad_request end end end @@ -216,18 +214,6 @@ class Projects::PipelinesController < Projects::ApplicationController end end - def config_variables - respond_to do |format| - format.json do - # Even if the parameter name is `sha`, it is actually a ref name. We always send `ref` to the endpoint. - # See: https://gitlab.com/gitlab-org/gitlab/-/issues/389065 - result = Ci::ListConfigVariablesService.new(@project, current_user).execute(params[:sha]) - - result.nil? ? head(:no_content) : render(json: result) - end - end - end - def downloadable_artifacts render json: Ci::DownloadableArtifactSerializer.new( project: project, @@ -241,7 +227,12 @@ class Projects::PipelinesController < Projects::ApplicationController PipelineSerializer .new(project: @project, current_user: @current_user) .with_pagination(request, response) - .represent(@pipelines, disable_coverage: true, preload: true) + .represent( + @pipelines, + disable_coverage: true, + preload: true, + disable_manual_and_scheduled_actions: true + ) end def render_show @@ -274,29 +265,34 @@ class Projects::PipelinesController < Projects::ApplicationController # rubocop: disable CodeReuse/ActiveRecord def pipeline - @pipeline ||= if params[:id].blank? && params[:latest] - latest_pipeline - else - project - .all_pipelines - .includes(builds: :tags, user: :status) - .find(params[:id]) - .present(current_user: current_user) - end + return @pipeline if defined?(@pipeline) + + pipelines = + if find_latest_pipeline? + project.latest_pipelines(params['ref']) + else + project.all_pipelines.id_in(params[:id]) + end + + @pipeline = pipelines + .includes(builds: :tags, user: :status) + .take + &.present(current_user: current_user) + + @pipeline || not_found end # rubocop: enable CodeReuse/ActiveRecord def set_pipeline_path - @pipeline_path ||= if params[:id].blank? && params[:latest] + @pipeline_path ||= if find_latest_pipeline? latest_project_pipelines_path(@project, params['ref']) else project_pipeline_path(@project, @pipeline) end end - def latest_pipeline - @project.latest_pipeline(params['ref']) - &.present(current_user: current_user) + def find_latest_pipeline? + params[:id].blank? && params[:latest] end def disable_query_limiting @@ -326,17 +322,6 @@ class Projects::PipelinesController < Projects::ApplicationController params.permit(:scope, :username, :ref, :status, :source) end - def enable_runners_availability_section_experiment - return unless current_user - return unless can?(current_user, :create_pipeline, project) - return if @pipelines_count.to_i > 0 - return if helpers.has_gitlab_ci?(project) - - experiment(:runners_availability_section, namespace: project.root_ancestor) do |e| - e.candidate {} - end - end - def should_track_ci_cd_pipelines? params[:chart].blank? || params[:chart] == 'pipelines' end |