diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 11:33:21 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-11-17 11:33:21 +0000 |
commit | 7021455bd1ed7b125c55eb1b33c5a01f2bc55ee0 (patch) | |
tree | 5bdc2229f5198d516781f8d24eace62fc7e589e9 /app/controllers/projects | |
parent | 185b095e93520f96e9cfc31d9c3e69b498cdab7c (diff) | |
download | gitlab-ce-15.6.0-rc42.tar.gz |
Add latest changes from gitlab-org/gitlab@15-6-stable-eev15.6.0-rc42
Diffstat (limited to 'app/controllers/projects')
33 files changed, 154 insertions, 187 deletions
diff --git a/app/controllers/projects/alerting/notifications_controller.rb b/app/controllers/projects/alerting/notifications_controller.rb index f3283c88740..89e8a261288 100644 --- a/app/controllers/projects/alerting/notifications_controller.rb +++ b/app/controllers/projects/alerting/notifications_controller.rb @@ -18,8 +18,9 @@ module Projects def create token = extract_alert_manager_token(request) result = notify_service.execute(token, integration) + has_something_to_return = result.success? && result.http_status != :created - if result.success? + if has_something_to_return render json: AlertManagement::AlertSerializer.new.represent(result.payload[:alerts]), code: result.http_status else head result.http_status diff --git a/app/controllers/projects/application_controller.rb b/app/controllers/projects/application_controller.rb index 2256471047d..25b83aed78a 100644 --- a/app/controllers/projects/application_controller.rb +++ b/app/controllers/projects/application_controller.rb @@ -38,9 +38,9 @@ class Projects::ApplicationController < ApplicationController if build.debug_mode? access_denied!( _('You must have developer or higher permissions in the associated project to view job logs when debug trace ' \ - "is enabled. To disable debug trace, set the 'CI_DEBUG_TRACE' variable to 'false' in your pipeline " \ - 'configuration or CI/CD settings. If you need to view this job log, a project maintainer or owner must add ' \ - 'you to the project with developer permissions or higher.') + "is enabled. To disable debug trace, set the 'CI_DEBUG_TRACE' and 'CI_DEBUG_SERVICES' variables to 'false' " \ + 'in your pipeline configuration or CI/CD settings. If you must view this job log, a project maintainer ' \ + 'or owner must add you to the project with developer permissions or higher.') ) else access_denied!(_('The current user is not authorized to access the job log.')) diff --git a/app/controllers/projects/artifacts_controller.rb b/app/controllers/projects/artifacts_controller.rb index 40e89a06b46..c3dcde38d09 100644 --- a/app/controllers/projects/artifacts_controller.rb +++ b/app/controllers/projects/artifacts_controller.rb @@ -4,6 +4,7 @@ class Projects::ArtifactsController < Projects::ApplicationController include ExtractsPath include RendersBlob include SendFileUpload + include Gitlab::Ci::Artifacts::Logger urgency :low, [:browse, :file, :latest_succeeded] @@ -26,12 +27,6 @@ class Projects::ArtifactsController < Projects::ApplicationController # It should be removed only after resolving the underlying performance # issues: https://gitlab.com/gitlab-org/gitlab/issues/32281 return head :no_content unless Feature.enabled?(:artifacts_management_page, @project) - - finder = Ci::JobArtifactsFinder.new(@project, artifacts_params) - all_artifacts = finder.execute - - @artifacts = all_artifacts.page(params[:page]).per(MAX_PER_PAGE) - @total_size = all_artifacts.total_size end def destroy @@ -47,6 +42,7 @@ class Projects::ArtifactsController < Projects::ApplicationController def download return render_404 unless artifacts_file + log_artifacts_filesize(artifacts_file.model) send_upload(artifacts_file, attachment: artifacts_file.filename, proxy: params[:proxy]) end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 6a6701ead15..84872d1e978 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -7,7 +7,7 @@ class Projects::BoardsController < Projects::ApplicationController before_action :check_issues_available! before_action do push_frontend_feature_flag(:board_multi_select, project) - push_frontend_feature_flag(:realtime_labels, project&.group) + push_frontend_feature_flag(:apollo_boards, project) experiment(:prominent_create_board_btn, subject: current_user) do |e| e.control {} e.candidate {} diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb index 2b2764d2e34..870320a79d9 100644 --- a/app/controllers/projects/commit_controller.rb +++ b/app/controllers/projects/commit_controller.rb @@ -86,7 +86,7 @@ class Projects::CommitController < Projects::ApplicationController respond_to do |format| format.json do - render json: @merge_requests.to_json + render json: Gitlab::Json.dump(@merge_requests) end end end diff --git a/app/controllers/projects/environments_controller.rb b/app/controllers/projects/environments_controller.rb index 4f037cc843e..67f2f85ce65 100644 --- a/app/controllers/projects/environments_controller.rb +++ b/app/controllers/projects/environments_controller.rb @@ -183,7 +183,7 @@ class Projects::EnvironmentsController < Projects::ApplicationController def metrics respond_to do |format| format.html do - redirect_to project_metrics_dashboard_path(project, environment: environment ) + redirect_to project_metrics_dashboard_path(project, environment: environment) end format.json do # Currently, this acts as a hint to load the metrics details into the cache diff --git a/app/controllers/projects/google_cloud/configuration_controller.rb b/app/controllers/projects/google_cloud/configuration_controller.rb index 06a6674d578..e109ab95d39 100644 --- a/app/controllers/projects/google_cloud/configuration_controller.rb +++ b/app/controllers/projects/google_cloud/configuration_controller.rb @@ -15,7 +15,7 @@ module Projects gcpRegions: gcp_regions, revokeOauthUrl: revoke_oauth_url } - @js_data = js_data.to_json + @js_data = Gitlab::Json.dump(js_data) track_event(:render_page) end diff --git a/app/controllers/projects/google_cloud/databases_controller.rb b/app/controllers/projects/google_cloud/databases_controller.rb index 77ee830fd24..b511a85b0b8 100644 --- a/app/controllers/projects/google_cloud/databases_controller.rb +++ b/app/controllers/projects/google_cloud/databases_controller.rb @@ -17,7 +17,8 @@ module Projects cloudsqlInstances: ::GoogleCloud::GetCloudsqlInstancesService.new(project).execute, emptyIllustrationUrl: ActionController::Base.helpers.image_path('illustrations/pipelines_empty.svg') } - @js_data = js_data.to_json + + @js_data = Gitlab::Json.dump(js_data) track_event(:render_page) end @@ -27,7 +28,7 @@ module Projects @title = title(product) - @js_data = { + js_data = { gcpProjects: gcp_projects, refs: refs, cancelPath: project_google_cloud_databases_path(project), @@ -35,7 +36,9 @@ module Projects formDescription: description(product), databaseVersions: Projects::GoogleCloud::CloudsqlHelper::VERSIONS[product], tiers: Projects::GoogleCloud::CloudsqlHelper::TIERS - }.to_json + } + + @js_data = Gitlab::Json.dump(js_data) track_event(:render_form) render template: 'projects/google_cloud/databases/cloudsql_form', formats: :html diff --git a/app/controllers/projects/google_cloud/deployments_controller.rb b/app/controllers/projects/google_cloud/deployments_controller.rb index f6cc8d5eafb..041486eb2fb 100644 --- a/app/controllers/projects/google_cloud/deployments_controller.rb +++ b/app/controllers/projects/google_cloud/deployments_controller.rb @@ -11,7 +11,7 @@ class Projects::GoogleCloud::DeploymentsController < Projects::GoogleCloud::Base enableCloudRunUrl: project_google_cloud_deployments_cloud_run_path(project), enableCloudStorageUrl: project_google_cloud_deployments_cloud_storage_path(project) } - @js_data = js_data.to_json + @js_data = Gitlab::Json.dump(js_data) track_event(:render_page) end diff --git a/app/controllers/projects/google_cloud/gcp_regions_controller.rb b/app/controllers/projects/google_cloud/gcp_regions_controller.rb index 2f0bc05030f..c51261721b2 100644 --- a/app/controllers/projects/google_cloud/gcp_regions_controller.rb +++ b/app/controllers/projects/google_cloud/gcp_regions_controller.rb @@ -14,7 +14,7 @@ class Projects::GoogleCloud::GcpRegionsController < Projects::GoogleCloud::BaseC refs: refs, cancelPath: project_google_cloud_configuration_path(project) } - @js_data = js_data.to_json + @js_data = Gitlab::Json.dump(js_data) track_event(:render_form) end diff --git a/app/controllers/projects/google_cloud/service_accounts_controller.rb b/app/controllers/projects/google_cloud/service_accounts_controller.rb index 89d624764df..7b029e25ea2 100644 --- a/app/controllers/projects/google_cloud/service_accounts_controller.rb +++ b/app/controllers/projects/google_cloud/service_accounts_controller.rb @@ -14,7 +14,7 @@ class Projects::GoogleCloud::ServiceAccountsController < Projects::GoogleCloud:: refs: refs, cancelPath: project_google_cloud_configuration_path(project) } - @js_data = js_data.to_json + @js_data = Gitlab::Json.dump(js_data) track_event(:render_form) end diff --git a/app/controllers/projects/graphs_controller.rb b/app/controllers/projects/graphs_controller.rb index 47557133ac8..6da70b5e157 100644 --- a/app/controllers/projects/graphs_controller.rb +++ b/app/controllers/projects/graphs_controller.rb @@ -104,7 +104,7 @@ class Projects::GraphsController < Projects::ApplicationController } end - render json: @log.to_json + render json: Gitlab::Json.dump(@log) end def tracking_namespace_source diff --git a/app/controllers/projects/incidents_controller.rb b/app/controllers/projects/incidents_controller.rb index 089ee860ea6..599505dcb6d 100644 --- a/app/controllers/projects/incidents_controller.rb +++ b/app/controllers/projects/incidents_controller.rb @@ -9,7 +9,6 @@ class Projects::IncidentsController < Projects::ApplicationController before_action do push_force_frontend_feature_flag(:work_items, @project&.work_items_feature_flag_enabled?) push_force_frontend_feature_flag(:work_items_mvc_2, @project&.work_items_mvc_2_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_hierarchy, @project) end feature_category :incident_management diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 5b1117c0224..ee845cd001e 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -1,7 +1,6 @@ # frozen_string_literal: true class Projects::IssuesController < Projects::ApplicationController - include RendersNotes include ToggleSubscriptionAction include IssuableActions include ToggleAwardEmoji @@ -49,11 +48,14 @@ class Projects::IssuesController < Projects::ApplicationController push_force_frontend_feature_flag(:work_items, project&.work_items_feature_flag_enabled?) end + before_action only: :index do + push_frontend_feature_flag(:or_issuable_queries, project) + end + before_action only: :show do push_frontend_feature_flag(:issue_assignees_widget, project) - push_frontend_feature_flag(:realtime_labels, project) + push_frontend_feature_flag(:work_items_mvc, project&.group) push_force_frontend_feature_flag(:work_items_mvc_2, project&.work_items_mvc_2_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_hierarchy, project) push_frontend_feature_flag(:epic_widget_edit_confirmation, project) push_force_frontend_feature_flag(:work_items_create_from_markdown, project&.work_items_create_from_markdown_feature_flag_enabled?) end @@ -405,7 +407,6 @@ class Projects::IssuesController < Projects::ApplicationController options = super options[:issue_types] = Issue::TYPES_FOR_LIST - options[:issue_types] = options[:issue_types].excluding('task') unless project.work_items_feature_flag_enabled? if service_desk? options.reject! { |key| key == 'author_username' || key == 'author_id' } @@ -432,10 +433,13 @@ class Projects::IssuesController < Projects::ApplicationController def create_vulnerability_issue_feedback(issue); end def redirect_if_task - return render_404 if issue.task? && !project.work_items_feature_flag_enabled? return unless issue.task? - redirect_to project_work_items_path(project, issue.id, params: request.query_parameters) + if Feature.enabled?(:use_iid_in_work_items_path, project.group) + redirect_to project_work_items_path(project, issue.iid, params: request.query_parameters.merge(iid_path: true)) + else + redirect_to project_work_items_path(project, issue.id, params: request.query_parameters) + end end end diff --git a/app/controllers/projects/labels_controller.rb b/app/controllers/projects/labels_controller.rb index 8ec2cbb41e9..14f2e372bc5 100644 --- a/app/controllers/projects/labels_controller.rb +++ b/app/controllers/projects/labels_controller.rb @@ -68,9 +68,10 @@ class Projects::LabelsController < Projects::ApplicationController def generate Gitlab::IssuesLabels.generate(@project) - if params[:redirect] == 'issues' + case params[:redirect] + when 'issues' redirect_to project_issues_path(@project) - elsif params[:redirect] == 'merge_requests' + when 'merge_requests' redirect_to project_merge_requests_path(@project) else redirect_to project_labels_path(@project) diff --git a/app/controllers/projects/learn_gitlab_controller.rb b/app/controllers/projects/learn_gitlab_controller.rb index 61e4a1812ba..6fe009c8a28 100644 --- a/app/controllers/projects/learn_gitlab_controller.rb +++ b/app/controllers/projects/learn_gitlab_controller.rb @@ -23,7 +23,6 @@ class Projects::LearnGitlabController < Projects::ApplicationController experiment(:invite_for_help_continuous_onboarding, namespace: project.namespace) do |e| e.candidate {} - e.publish_to_database end end diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 418e7233e21..c88dbc70ed5 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -38,16 +38,13 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic diffs = @compare.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options_hash) unfoldable_positions = @merge_request.note_positions_for_paths(diffs.diff_file_paths, current_user).unfoldable - diffs.unfold_diff_files(unfoldable_positions) - diffs.write_cache - options = { merge_request: @merge_request, commit: commit, diff_view: diff_view, merge_ref_head_diff: render_merge_ref_head_diff?, pagination_data: diffs.pagination_data, - allow_tree_conflicts: display_merge_conflicts_in_diff? + merge_conflicts_in_diff: display_merge_conflicts_in_diff? } # NOTE: Any variables that would affect the resulting json needs to be added to the cache_context to avoid stale cache issues. @@ -60,10 +57,19 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic params[:page], params[:per_page], options[:merge_ref_head_diff], - options[:allow_tree_conflicts] + options[:merge_conflicts_in_diff] ] - return unless stale?(etag: [cache_context + diff_options_hash.fetch(:paths, []), diffs]) + if Feature.enabled?(:check_etags_diffs_batch_before_write_cache, merge_request.project) && !stale?(etag: [cache_context + diff_options_hash.fetch(:paths, []), diffs]) + return + end + + diffs.unfold_diff_files(unfoldable_positions) + diffs.write_cache + + if Feature.disabled?(:check_etags_diffs_batch_before_write_cache, merge_request.project) && !stale?(etag: [cache_context + diff_options_hash.fetch(:paths, []), diffs]) + return + end render json: PaginatedDiffSerializer.new(current_user: current_user).represent(diffs, options) end @@ -75,7 +81,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic options = additional_attributes.merge( only_context_commits: show_only_context_commits?, merge_ref_head_diff: render_merge_ref_head_diff?, - allow_tree_conflicts: display_merge_conflicts_in_diff? + merge_conflicts_in_diff: display_merge_conflicts_in_diff? ) render json: DiffsMetadataSerializer.new(project: @merge_request.project, current_user: current_user) @@ -104,7 +110,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic options = additional_attributes.merge( diff_view: "inline", merge_ref_head_diff: render_merge_ref_head_diff?, - allow_tree_conflicts: display_merge_conflicts_in_diff? + merge_conflicts_in_diff: display_merge_conflicts_in_diff? ) options[:context_commits] = @merge_request.recent_context_commits diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 9c139733248..4ba79d43f27 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -3,7 +3,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationController include ToggleSubscriptionAction include IssuableActions - include RendersNotes include RendersCommits include RendersAssignees include ToggleAwardEmoji @@ -32,18 +31,15 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action :check_user_can_push_to_source_branch!, only: [:rebase] before_action only: [:show] do - push_frontend_feature_flag(:merge_request_widget_graphql, project) push_frontend_feature_flag(:core_security_mr_widget_counts, project) - push_frontend_feature_flag(:refactor_code_quality_extension, project) - push_frontend_feature_flag(:refactor_mr_widget_test_summary, project) push_frontend_feature_flag(:issue_assignees_widget, @project) - push_frontend_feature_flag(:realtime_labels, project) push_frontend_feature_flag(:refactor_security_extension, @project) push_frontend_feature_flag(:refactor_code_quality_inline_findings, project) push_frontend_feature_flag(:moved_mr_sidebar, project) push_frontend_feature_flag(:paginated_mr_discussions, project) push_frontend_feature_flag(:mr_review_submit_comment, project) push_frontend_feature_flag(:mr_experience_survey, project) + push_frontend_feature_flag(:realtime_reviewers, project) end before_action do @@ -123,12 +119,13 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo @commits_count = @merge_request.commits_count + @merge_request.context_commits_count @diffs_count = get_diffs_count @issuable_sidebar = serializer.represent(@merge_request, serializer: 'sidebar') - @current_user_data = UserSerializer.new(project: @project).represent(current_user, {}, MergeRequestCurrentUserEntity).to_json + @current_user_data = Gitlab::Json.dump(UserSerializer.new(project: @project).represent(current_user, {}, MergeRequestCurrentUserEntity)) @show_whitespace_default = current_user.nil? || current_user.show_whitespace_in_diffs @file_by_file_default = current_user&.view_diffs_file_by_file @coverage_path = coverage_reports_project_merge_request_path(@project, @merge_request, format: :json) if @merge_request.has_coverage_reports? @update_current_user_path = expose_path(api_v4_user_preferences_path) @endpoint_metadata_url = endpoint_metadata_url(@project, @merge_request) + @endpoint_diff_batch_url = endpoint_diff_batch_url(@project, @merge_request) set_pipeline_variables @@ -179,15 +176,15 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo @merge_request.recent_context_commits ) - # Get commits from repository - # or from cache if already merged - @commits = - set_commits_for_rendering( - @merge_request.recent_commits(load_from_gitaly: true).with_latest_pipeline(@merge_request.source_branch).with_markdown_cache, - commits_count: @merge_request.commits_count - ) + per_page = [(params[:per_page] || MergeRequestDiff::COMMITS_SAFE_SIZE).to_i, MergeRequestDiff::COMMITS_SAFE_SIZE].min + recent_commits = @merge_request.recent_commits(load_from_gitaly: true, limit: per_page, page: params[:page]).with_latest_pipeline(@merge_request.source_branch).with_markdown_cache + @next_page = recent_commits.next_page + @commits = set_commits_for_rendering( + recent_commits, + commits_count: @merge_request.commits_count + ) - render json: { html: view_to_html_string('projects/merge_requests/_commits') } + render json: { html: view_to_html_string('projects/merge_requests/_commits'), next_page: @next_page } end def pipelines @@ -535,7 +532,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo render json: '', status: :no_content when :parsed - render json: report_comparison[:data].to_json, status: :ok + render json: Gitlab::Json.dump(report_comparison[:data]), status: :ok when :error render json: { status_reason: report_comparison[:status_reason] }, status: :bad_request else @@ -553,12 +550,23 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo return render_404 unless can?(current_user, :read_build, merge_request.actual_head_pipeline) end + def show_whitespace + current_user&.show_whitespace_in_diffs ? '0' : '1' + end + def endpoint_metadata_url(project, merge_request) - params = request.query_parameters.merge(view: 'inline', diff_head: true, w: current_user&.show_whitespace_in_diffs ? '0' : '1') + params = request.query_parameters.merge(view: 'inline', diff_head: true, w: show_whitespace) diffs_metadata_project_json_merge_request_path(project, merge_request, 'json', params) end + def endpoint_diff_batch_url(project, merge_request) + per_page = current_user&.view_diffs_file_by_file ? '1' : '5' + params = request.query_parameters.merge(view: 'inline', diff_head: true, w: show_whitespace, page: '0', per_page: per_page) + + diffs_batch_project_json_merge_request_path(project, merge_request, 'json', params) + end + def convert_date_to_epoch(date) Date.strptime(date, "%Y-%m-%d")&.to_time&.to_i if date rescue Date::Error, TypeError diff --git a/app/controllers/projects/ml/experiments_controller.rb b/app/controllers/projects/ml/experiments_controller.rb new file mode 100644 index 00000000000..749586791ac --- /dev/null +++ b/app/controllers/projects/ml/experiments_controller.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Projects + module Ml + class ExperimentsController < ::Projects::ApplicationController + include Projects::Ml::ExperimentsHelper + before_action :check_feature_flag + + feature_category :mlops + + MAX_PER_PAGE = 20 + + def index + @experiments = ::Ml::Experiment.by_project_id(@project.id).page(params[:page]).per(MAX_PER_PAGE) + end + + def show + @experiment = ::Ml::Experiment.by_project_id_and_iid(@project.id, params[:id]) + + return redirect_to project_ml_experiments_path(@project) unless @experiment.present? + + @candidates = @experiment.candidates&.including_metrics_and_params + end + + private + + def check_feature_flag + render_404 unless Feature.enabled?(:ml_experiment_tracking, @project) + end + end + end +end diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb index d24b232293b..9d3506d49b0 100644 --- a/app/controllers/projects/notes_controller.rb +++ b/app/controllers/projects/notes_controller.rb @@ -58,7 +58,7 @@ class Projects::NotesController < Projects::ApplicationController def outdated_line_change diff_lines = Rails.cache.fetch(['note', note.id, 'oudated_line_change'], expires_in: 7.days) do - ::MergeRequests::OutdatedDiscussionDiffLinesService.new(project: note.noteable.source_project, note: note).execute.to_json + Gitlab::Json.dump(::MergeRequests::OutdatedDiscussionDiffLinesService.new(project: note.noteable.source_project, note: note).execute) end render json: diff_lines diff --git a/app/controllers/projects/packages/infrastructure_registry_controller.rb b/app/controllers/projects/packages/infrastructure_registry_controller.rb index f1410bf6043..733df9fdb45 100644 --- a/app/controllers/projects/packages/infrastructure_registry_controller.rb +++ b/app/controllers/projects/packages/infrastructure_registry_controller.rb @@ -5,7 +5,7 @@ module Projects class InfrastructureRegistryController < Projects::ApplicationController include PackagesAccess - feature_category :infrastructure_as_code + feature_category :package_registry urgency :low def show diff --git a/app/controllers/projects/pipeline_schedules_controller.rb b/app/controllers/projects/pipeline_schedules_controller.rb index ca787785901..31030d958df 100644 --- a/app/controllers/projects/pipeline_schedules_controller.rb +++ b/app/controllers/projects/pipeline_schedules_controller.rb @@ -98,7 +98,7 @@ class Projects::PipelineSchedulesController < Projects::ApplicationController def schedule_params params.require(:schedule) .permit(:description, :cron, :cron_timezone, :ref, :active, - variables_attributes: [:id, :variable_type, :key, :secret_value, :_destroy] ) + variables_attributes: [:id, :variable_type, :key, :secret_value, :_destroy]) end def authorize_play_pipeline_schedule! diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 01f7bb9e2cf..7d1a75ae449 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -140,21 +140,13 @@ class Projects::PipelinesController < Projects::ApplicationController end def builds - if Feature.enabled?(:pipeline_tabs_vue, project) - redirect_to pipeline_path(@pipeline, tab: 'builds') - else - render_show - end + render_show end def dag respond_to do |format| format.html do - if Feature.enabled?(:pipeline_tabs_vue, project) - redirect_to pipeline_path(@pipeline, tab: 'dag') - else - render_show - end + render_show end format.json do render json: Ci::DagPipelineSerializer @@ -165,9 +157,7 @@ class Projects::PipelinesController < Projects::ApplicationController end def failures - if Feature.enabled?(:pipeline_tabs_vue, project) - redirect_to pipeline_path(@pipeline, tab: 'failures') - elsif @pipeline.failed_builds.present? + if @pipeline.failed_builds.present? render_show else redirect_to pipeline_path(@pipeline) @@ -222,11 +212,7 @@ class Projects::PipelinesController < Projects::ApplicationController def test_report respond_to do |format| format.html do - if Feature.enabled?(:pipeline_tabs_vue, project) - redirect_to pipeline_path(@pipeline, tab: 'test_report') - else - render_show - end + render_show end format.json do render json: TestReportSerializer @@ -352,7 +338,6 @@ class Projects::PipelinesController < Projects::ApplicationController experiment(:runners_availability_section, namespace: project.root_ancestor) do |e| e.candidate {} - e.publish_to_database end end diff --git a/app/controllers/projects/product_analytics_controller.rb b/app/controllers/projects/product_analytics_controller.rb deleted file mode 100644 index 8085b0a6334..00000000000 --- a/app/controllers/projects/product_analytics_controller.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -class Projects::ProductAnalyticsController < Projects::ApplicationController - before_action :feature_enabled!, only: [:index, :setup, :test, :graphs] - before_action :authorize_read_product_analytics! - before_action :tracker_variables, only: [:setup, :test] - - feature_category :product_analytics - - def index - @events = product_analytics_events.order_by_time.page(params[:page]) - end - - def setup - end - - def test - @event = product_analytics_events.try(:first) - end - - def graphs - @graphs = [] - @timerange = 30 - - requested_graphs = %w(platform os_timezone br_lang doc_charset) - - requested_graphs.each do |graph| - @graphs << ProductAnalytics::BuildGraphService - .new(project, { graph: graph, timerange: @timerange }) - .execute - end - - @activity_graph = ProductAnalytics::BuildActivityGraphService - .new(project, { timerange: @timerange }) - .execute - end - - private - - def product_analytics_events - @project.product_analytics_events - end - - def tracker_variables - # We use project id as Snowplow appId - @project_id = @project.id.to_s - - # Snowplow remembers values like appId and platform between reloads. - # That is why we have to rename the tracker with a random integer. - @random = rand(999999) - - # Generate random platform every time a tracker is rendered. - @platform = %w(web mob app)[(@random % 3)] - end - - def feature_enabled! - render_404 unless Feature.enabled?(:product_analytics, @project) - end -end - -Projects::ProductAnalyticsController.prepend_mod_with('Projects::ProductAnalyticsController') diff --git a/app/controllers/projects/prometheus/alerts_controller.rb b/app/controllers/projects/prometheus/alerts_controller.rb index c3dc17694d9..27ac64e5758 100644 --- a/app/controllers/projects/prometheus/alerts_controller.rb +++ b/app/controllers/projects/prometheus/alerts_controller.rb @@ -23,11 +23,7 @@ module Projects token = extract_alert_manager_token(request) result = notify_service.execute(token) - if result.success? - render json: AlertManagement::AlertSerializer.new.represent(result.payload[:alerts]), code: result.http_status - else - head result.http_status - end + head result.http_status end private @@ -37,19 +33,6 @@ module Projects .new(project, params.permit!) end - def serialize_as_json(alert_obj) - serializer.represent(alert_obj) - end - - def serializer - PrometheusAlertSerializer - .new(project: project, current_user: current_user) - end - - def alerts - alerts_finder.execute - end - def alert @alert ||= alerts_finder(metric: params[:id]).execute.first || render_404 end diff --git a/app/controllers/projects/registry/repositories_controller.rb b/app/controllers/projects/registry/repositories_controller.rb index 87cb8e4781f..ffe95bf4fee 100644 --- a/app/controllers/projects/registry/repositories_controller.rb +++ b/app/controllers/projects/registry/repositories_controller.rb @@ -8,10 +8,6 @@ module Projects before_action :authorize_update_container_image!, only: [:destroy] - before_action do - push_frontend_feature_flag(:container_registry_show_shortened_path, project) - end - def index respond_to do |format| format.html { ensure_root_container_repository! } @@ -26,7 +22,11 @@ module Projects def destroy image.delete_scheduled! - DeleteContainerRepositoryWorker.perform_async(current_user.id, image.id) # rubocop:disable CodeReuse/Worker + + unless Feature.enabled?(:container_registry_delete_repository_with_cron_worker) + DeleteContainerRepositoryWorker.perform_async(current_user.id, image.id) # rubocop:disable CodeReuse/Worker + end + track_package_event(:delete_repository, :container) respond_to do |format| diff --git a/app/controllers/projects/settings/access_tokens_controller.rb b/app/controllers/projects/settings/access_tokens_controller.rb index bac35583a97..0884816ef62 100644 --- a/app/controllers/projects/settings/access_tokens_controller.rb +++ b/app/controllers/projects/settings/access_tokens_controller.rb @@ -3,6 +3,7 @@ module Projects module Settings class AccessTokensController < Projects::ApplicationController + include RenderAccessTokens include AccessTokensActions layout 'project_settings' diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index cda6c8abea7..8aef1c3d24d 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -11,10 +11,6 @@ module Projects before_action :authorize_admin_pipeline! before_action :check_builds_available! before_action :define_variables - before_action do - push_frontend_feature_flag(:ajax_new_deploy_token, @project) - push_frontend_feature_flag(:ci_variable_settings_graphql, @project) - end helper_method :highlight_badge @@ -23,9 +19,11 @@ module Projects def show if Feature.enabled?(:ci_pipeline_triggers_settings_vue_ui, @project) - @triggers_json = ::Ci::TriggerSerializer.new.represent( + triggers = ::Ci::TriggerSerializer.new.represent( @project.triggers, current_user: current_user, project: @project - ).to_json + ) + + @triggers_json = Gitlab::Json.dump(triggers) end render diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 43c6451577a..90988645d3a 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -6,11 +6,8 @@ module Projects layout 'project_settings' before_action :authorize_admin_project! before_action :define_variables, only: [:create_deploy_token] - before_action do - push_frontend_feature_flag(:ajax_new_deploy_token, @project) - end - feature_category :source_code_management, [:show, :cleanup] + feature_category :source_code_management, [:show, :cleanup, :update] feature_category :continuous_delivery, [:create_deploy_token] urgency :low, [:show, :create_deploy_token] @@ -60,6 +57,19 @@ module Projects end end + def update + result = ::Projects::UpdateService.new(@project, current_user, project_params).execute + + if result[:status] == :success + flash[:notice] = _("Project settings were successfully updated.") + else + flash[:alert] = result[:message] + @project.reset + end + + redirect_to project_settings_repository_path(project) + end + private def render_show @@ -97,6 +107,18 @@ module Projects params.require(:deploy_token).permit(:name, :expires_at, :read_repository, :read_registry, :write_registry, :read_package_registry, :write_package_registry, :username) end + def project_params + params.require(:project).permit(project_params_attributes) + end + + def project_params_attributes + [ + :issue_branch_template, + :default_branch, + :autoclose_referenced_issues + ] + end + def access_levels_options { create_access_levels: levels_for_dropdown, diff --git a/app/controllers/projects/starrers_controller.rb b/app/controllers/projects/starrers_controller.rb index bc857648a06..06996e8e5fc 100644 --- a/app/controllers/projects/starrers_controller.rb +++ b/app/controllers/projects/starrers_controller.rb @@ -11,14 +11,8 @@ class Projects::StarrersController < Projects::ApplicationController @starrers = UsersStarProjectsFinder.new(@project, params, current_user: @current_user).execute @sort = params[:sort].presence || sort_value_name @starrers = @starrers.preload_users.sort_by_attribute(@sort).page(params[:page]) - @public_count = @project.starrers.with_public_profile.size - @total_count = @project.starrers.size + @public_count = @project.starrers.active.with_public_profile.size + @total_count = @project.starrers.active.size @private_count = @total_count - @public_count end - - private - - def has_starred_project?(starrers) - starrers.first { |starrer| starrer.user_id == current_user.id } - end end diff --git a/app/controllers/projects/templates_controller.rb b/app/controllers/projects/templates_controller.rb index 6d06b05c1e9..ed5fb838670 100644 --- a/app/controllers/projects/templates_controller.rb +++ b/app/controllers/projects/templates_controller.rb @@ -12,7 +12,7 @@ class Projects::TemplatesController < Projects::ApplicationController templates = @template_type.template_subsets(project) respond_to do |format| - format.json { render json: templates.to_json } + format.json { render json: Gitlab::Json.dump(templates) } end end @@ -20,7 +20,7 @@ class Projects::TemplatesController < Projects::ApplicationController template = @template_type.find(params[:key], project) respond_to do |format| - format.json { render json: template.to_json } + format.json { render json: Gitlab::Json.dump(template) } end end diff --git a/app/controllers/projects/usage_quotas_controller.rb b/app/controllers/projects/usage_quotas_controller.rb index 07a3c010f4f..d3757eaf481 100644 --- a/app/controllers/projects/usage_quotas_controller.rb +++ b/app/controllers/projects/usage_quotas_controller.rb @@ -5,7 +5,7 @@ class Projects::UsageQuotasController < Projects::ApplicationController layout "project_settings" - feature_category :utilization + feature_category :subscription_cost_management urgency :low def index diff --git a/app/controllers/projects/work_items_controller.rb b/app/controllers/projects/work_items_controller.rb index b794785f285..a7e59a28fb7 100644 --- a/app/controllers/projects/work_items_controller.rb +++ b/app/controllers/projects/work_items_controller.rb @@ -4,13 +4,9 @@ class Projects::WorkItemsController < Projects::ApplicationController before_action do push_force_frontend_feature_flag(:work_items, project&.work_items_feature_flag_enabled?) push_force_frontend_feature_flag(:work_items_mvc_2, project&.work_items_mvc_2_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_hierarchy, project) + push_frontend_feature_flag(:use_iid_in_work_items_path, project) end feature_category :team_planning urgency :low - - def index - render_404 unless project&.work_items_feature_flag_enabled? - end end |