diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 08:27:35 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 08:27:35 +0000 |
commit | 7e9c479f7de77702622631cff2628a9c8dcbc627 (patch) | |
tree | c8f718a08e110ad7e1894510980d2155a6549197 /app/controllers/projects | |
parent | e852b0ae16db4052c1c567d9efa4facc81146e88 (diff) | |
download | gitlab-ce-7e9c479f7de77702622631cff2628a9c8dcbc627.tar.gz |
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'app/controllers/projects')
30 files changed, 140 insertions, 66 deletions
diff --git a/app/controllers/projects/alert_management_controller.rb b/app/controllers/projects/alert_management_controller.rb index 0d0ef9b05cb..8ecf8fadefd 100644 --- a/app/controllers/projects/alert_management_controller.rb +++ b/app/controllers/projects/alert_management_controller.rb @@ -10,6 +10,5 @@ class Projects::AlertManagementController < Projects::ApplicationController def details @alert_id = params[:id] - push_frontend_feature_flag(:expose_environment_path_in_alert_details, @project) end end diff --git a/app/controllers/projects/alerting/notifications_controller.rb b/app/controllers/projects/alerting/notifications_controller.rb index 2241ded2db8..a3f4d784f25 100644 --- a/app/controllers/projects/alerting/notifications_controller.rb +++ b/app/controllers/projects/alerting/notifications_controller.rb @@ -14,7 +14,7 @@ module Projects def create token = extract_alert_manager_token(request) - result = notify_service.execute(token) + result = notify_service.execute(token, integration) head result.http_status end @@ -45,6 +45,18 @@ module Projects end end + def integration + AlertManagement::HttpIntegrationsFinder.new( + project, + endpoint_identifier: endpoint_identifier, + active: true + ).execute.first + end + + def endpoint_identifier + params[:endpoint_identifier] || AlertManagement::HttpIntegration::LEGACY_IDENTIFIER + end + def notification_payload @notification_payload ||= params.permit![:notification] end diff --git a/app/controllers/projects/autocomplete_sources_controller.rb b/app/controllers/projects/autocomplete_sources_controller.rb index e9c533daa80..001967b8bb4 100644 --- a/app/controllers/projects/autocomplete_sources_controller.rb +++ b/app/controllers/projects/autocomplete_sources_controller.rb @@ -39,7 +39,7 @@ class Projects::AutocompleteSourcesController < Projects::ApplicationController private def autocomplete_service - @autocomplete_service ||= ::Projects::AutocompleteService.new(@project, current_user) + @autocomplete_service ||= ::Projects::AutocompleteService.new(@project, current_user, params) end def target diff --git a/app/controllers/projects/avatars_controller.rb b/app/controllers/projects/avatars_controller.rb index f228206032d..fb113df137f 100644 --- a/app/controllers/projects/avatars_controller.rb +++ b/app/controllers/projects/avatars_controller.rb @@ -3,6 +3,8 @@ class Projects::AvatarsController < Projects::ApplicationController include SendsBlob + skip_before_action :default_cache_headers, only: :show + before_action :authorize_admin_project!, only: [:destroy] feature_category :projects diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index c6251d27b05..02e941db636 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -33,7 +33,7 @@ class Projects::BlobController < Projects::ApplicationController before_action :set_last_commit_sha, only: [:edit, :update] before_action only: :show do - push_frontend_experiment(:suggest_pipeline) + push_frontend_feature_flag(:suggest_pipeline, default_enabled: true) push_frontend_feature_flag(:gitlab_ci_yml_preview, @project, default_enabled: false) end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 193352ffa70..fe4502a0e06 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -8,8 +8,7 @@ class Projects::BoardsController < Projects::ApplicationController before_action :authorize_read_board!, only: [:index, :show] before_action :assign_endpoint_vars before_action do - push_frontend_feature_flag(:multi_select_board, default_enabled: true) - push_frontend_feature_flag(:boards_with_swimlanes, project, default_enabled: false) + push_frontend_feature_flag(:boards_with_swimlanes, project, default_enabled: true) end feature_category :boards diff --git a/app/controllers/projects/branches_controller.rb b/app/controllers/projects/branches_controller.rb index 9124728ee25..cf1efda5d13 100644 --- a/app/controllers/projects/branches_controller.rb +++ b/app/controllers/projects/branches_controller.rb @@ -27,7 +27,7 @@ class Projects::BranchesController < Projects::ApplicationController @refs_pipelines = @project.ci_pipelines.latest_successful_for_refs(@branches.map(&:name)) @merged_branch_names = repository.merged_branch_names(@branches.map(&:name)) - @branch_pipeline_statuses = branch_pipeline_statuses + @branch_pipeline_statuses = Ci::CommitStatusesFinder.new(@project, repository, current_user, @branches).execute # https://gitlab.com/gitlab-org/gitlab/-/issues/22851 Gitlab::GitalyClient.allow_n_plus_1_calls do @@ -197,15 +197,4 @@ class Projects::BranchesController < Projects::ApplicationController confidential_issue_project end - - def branch_pipeline_statuses - latest_commits = @branches.map do |branch| - [branch.name, repository.commit(branch.dereferenced_target).sha] - end.to_h - - latest_pipelines = project.ci_pipelines.latest_pipeline_per_commit(latest_commits.values) - latest_commits.transform_values do |commit_sha| - latest_pipelines[commit_sha]&.detailed_status(current_user) - end.compact - end end diff --git a/app/controllers/projects/ci/lints_controller.rb b/app/controllers/projects/ci/lints_controller.rb index 7e900fc6051..9dc3194df85 100644 --- a/app/controllers/projects/ci/lints_controller.rb +++ b/app/controllers/projects/ci/lints_controller.rb @@ -2,28 +2,22 @@ class Projects::Ci::LintsController < Projects::ApplicationController before_action :authorize_create_pipeline! - before_action do - push_frontend_feature_flag(:ci_lint_vue, project) - end feature_category :pipeline_authoring + respond_to :json, only: [:create] + def show end def create - @content = params[:content] - @dry_run = params[:dry_run] + content = params[:content] + dry_run = params[:dry_run] - @result = Gitlab::Ci::Lint + result = Gitlab::Ci::Lint .new(project: @project, current_user: current_user) - .validate(@content, dry_run: @dry_run) + .validate(content, dry_run: dry_run) - respond_to do |format| - format.html { render :show } - format.json do - render json: ::Ci::Lint::ResultSerializer.new.represent(@result) - end - end + render json: ::Ci::Lint::ResultSerializer.new.represent(result) end end diff --git a/app/controllers/projects/ci/pipeline_editor_controller.rb b/app/controllers/projects/ci/pipeline_editor_controller.rb new file mode 100644 index 00000000000..c2428270fa6 --- /dev/null +++ b/app/controllers/projects/ci/pipeline_editor_controller.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class Projects::Ci::PipelineEditorController < Projects::ApplicationController + before_action :check_can_collaborate! + + feature_category :pipeline_authoring + + def show + render_404 unless ::Gitlab::Ci::Features.ci_pipeline_editor_page_enabled?(@project) + end + + private + + def check_can_collaborate! + render_404 unless can_collaborate_with_project?(@project) + end +end diff --git a/app/controllers/projects/imports_controller.rb b/app/controllers/projects/imports_controller.rb index 6cdd1c0bc8c..c8528ad6d28 100644 --- a/app/controllers/projects/imports_controller.rb +++ b/app/controllers/projects/imports_controller.rb @@ -55,7 +55,7 @@ class Projects::ImportsController < Projects::ApplicationController end def require_namespace_project_creation_permission - render_404 unless current_user.can?(:admin_project, @project) || current_user.can?(:create_projects, @project.namespace) + render_404 unless can?(current_user, :admin_project, @project) || can?(current_user, :create_projects, @project.namespace) end def redirect_if_progress diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index 9a8965dbeb6..3a1b4f380a2 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -44,22 +44,19 @@ class Projects::IssuesController < Projects::ApplicationController push_frontend_feature_flag(:vue_issuable_sidebar, project.group) push_frontend_feature_flag(:tribute_autocomplete, @project) push_frontend_feature_flag(:vue_issuables_list, project) + push_frontend_feature_flag(:vue_issue_header, @project, default_enabled: true) end before_action only: :show do real_time_feature_flag = :real_time_issue_sidebar real_time_enabled = Gitlab::ActionCable::Config.in_app? || Feature.enabled?(real_time_feature_flag, @project) - gon.push({ features: { real_time_feature_flag.to_s.camelize(:lower) => real_time_enabled } }, true) + push_to_gon_features(real_time_feature_flag, real_time_enabled) record_experiment_user(:invite_members_version_a) record_experiment_user(:invite_members_version_b) end - before_action only: :index do - push_frontend_feature_flag(:scoped_labels, @project, type: :licensed) - end - around_action :allow_gitaly_ref_name_caching, only: [:discussions] respond_to :html diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb index 3ceb60a6aef..07e38c80291 100644 --- a/app/controllers/projects/jobs_controller.rb +++ b/app/controllers/projects/jobs_controller.rb @@ -14,6 +14,9 @@ class Projects::JobsController < Projects::ApplicationController before_action :verify_api_request!, only: :terminal_websocket_authorize before_action :authorize_create_proxy_build!, only: :proxy_websocket_authorize before_action :verify_proxy_request!, only: :proxy_websocket_authorize + before_action do + push_frontend_feature_flag(:ci_job_line_links, @project) + end layout 'project' diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 07c38431f0f..7fbeac12644 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -20,7 +20,10 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic end def diffs_batch - diffs = @compare.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options) + diff_options_hash = diff_options + diff_options_hash[:paths] = params[:paths] if params[:paths] + + diffs = @compare.diffs_in_batch(params[:page], params[:per_page], diff_options: diff_options_hash) positions = @merge_request.note_positions_for_paths(diffs.diff_file_paths, current_user) environment = @merge_request.environments_for(current_user, latest: true).last @@ -31,6 +34,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic environment: environment, merge_request: @merge_request, diff_view: diff_view, + merge_ref_head_diff: render_merge_ref_head_diff?, pagination_data: diffs.pagination_data } @@ -64,7 +68,10 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic render: ->(partial, locals) { view_to_html_string(partial, locals) } } - options = additional_attributes.merge(diff_view: Feature.enabled?(:unified_diff_lines, @merge_request.project, default_enabled: true) ? "inline" : diff_view) + options = additional_attributes.merge( + diff_view: unified_diff_lines_view_type(@merge_request.project), + merge_ref_head_diff: render_merge_ref_head_diff? + ) if @merge_request.project.context_commits_enabled? options[:context_commits] = @merge_request.recent_context_commits @@ -113,7 +120,7 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic end end - if Gitlab::Utils.to_boolean(params[:diff_head]) && @merge_request.diffable_merge_ref? + if render_merge_ref_head_diff? return CompareService.new(@project, @merge_request.merge_ref_head.sha) .execute(@project, @merge_request.target_branch) end @@ -155,6 +162,10 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic @notes = prepare_notes_for_rendering(@grouped_diff_discussions.values.flatten.flat_map(&:notes), @merge_request) end + def render_merge_ref_head_diff? + Gitlab::Utils.to_boolean(params[:diff_head]) && @merge_request.diffable_merge_ref? + end + def note_positions @note_positions ||= Gitlab::Diff::PositionCollection.new(renderable_notes.map(&:position)) end @@ -173,7 +184,6 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic end def update_diff_discussion_positions! - return unless Feature.enabled?(:merge_red_head_comments_position_on_demand, @merge_request.target_project, default_enabled: true) return if @merge_request.has_any_diff_note_positions? Discussions::CaptureDiffNotePositionsService.new(@merge_request).execute diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index 91a041bb35b..f2b41294a85 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -12,7 +12,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo include SourcegraphDecorator include DiffHelper - skip_before_action :merge_request, only: [:index, :bulk_update] + skip_before_action :merge_request, only: [:index, :bulk_update, :export_csv] before_action :apply_diff_view_cookie!, only: [:show] before_action :whitelist_query_limiting, only: [:assign_related_issues, :update] before_action :authorize_update_issuable!, only: [:close, :edit, :update, :remove_wip, :sort] @@ -27,7 +27,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action :authenticate_user!, only: [:assign_related_issues] before_action :check_user_can_push_to_source_branch!, only: [:rebase] before_action only: [:show] do - push_frontend_experiment(:suggest_pipeline) + push_frontend_feature_flag(:suggest_pipeline, default_enabled: true) push_frontend_feature_flag(:widget_visibility_polling, @project, default_enabled: true) push_frontend_feature_flag(:mr_commit_neighbor_nav, @project, default_enabled: true) push_frontend_feature_flag(:multiline_comments, @project, default_enabled: true) @@ -37,9 +37,12 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo push_frontend_feature_flag(:hide_jump_to_next_unresolved_in_threads, default_enabled: true) push_frontend_feature_flag(:merge_request_widget_graphql, @project) push_frontend_feature_flag(:unified_diff_lines, @project, default_enabled: true) + push_frontend_feature_flag(:unified_diff_components, @project) push_frontend_feature_flag(:highlight_current_diff_row, @project) push_frontend_feature_flag(:default_merge_ref_for_diffs, @project) push_frontend_feature_flag(:core_security_mr_widget, @project, default_enabled: true) + push_frontend_feature_flag(:remove_resolve_note, @project, default_enabled: true) + push_frontend_feature_flag(:test_failure_history, @project) record_experiment_user(:invite_members_version_a) record_experiment_user(:invite_members_version_b) @@ -47,7 +50,6 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo before_action do push_frontend_feature_flag(:vue_issuable_sidebar, @project.group) - push_frontend_feature_flag(:deployment_filters) end around_action :allow_gitaly_ref_name_caching, only: [:index, :show, :discussions] @@ -317,6 +319,14 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo super end + def export_csv + IssuableExportCsvWorker.perform_async(:merge_request, current_user.id, project.id, finder_options.to_h) # rubocop:disable CodeReuse/Worker + + index_path = project_merge_requests_path(project) + message = _('Your CSV export has started. It will be emailed to %{email} when complete.') % { email: current_user.notification_email } + redirect_to(index_path, notice: message) + end + protected alias_method :subscribable_resource, :merge_request @@ -471,7 +481,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo def endpoint_metadata_url(project, merge_request) params = request.query_parameters - params[:view] = cookies[:diff_view] if params[:view].blank? && cookies[:diff_view].present? + params[:view] = unified_diff_lines_view_type(project) if Feature.enabled?(:default_merge_ref_for_diffs, project) params = params.merge(diff_head: true) diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index e6c4af00b29..31189c888b7 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -7,7 +7,7 @@ class Projects::MilestonesController < Projects::ApplicationController before_action :check_issuables_available! before_action :milestone, only: [:edit, :update, :destroy, :show, :issues, :merge_requests, :participants, :labels, :promote] before_action do - push_frontend_feature_flag(:burnup_charts, @project) + push_frontend_feature_flag(:burnup_charts, @project, default_enabled: true) end # Allow read any milestone diff --git a/app/controllers/projects/notes_controller.rb b/app/controllers/projects/notes_controller.rb index e50e293a103..77fd7688caf 100644 --- a/app/controllers/projects/notes_controller.rb +++ b/app/controllers/projects/notes_controller.rb @@ -60,7 +60,7 @@ class Projects::NotesController < Projects::ApplicationController def render_json_with_notes_serializer prepare_notes_for_rendering([note]) - render json: note_serializer.represent(note) + render json: note_serializer.represent(note, render_truncated_diff_lines: true) end def note diff --git a/app/controllers/projects/pipelines_controller.rb b/app/controllers/projects/pipelines_controller.rb index 953dce4d63c..f71a92ee874 100644 --- a/app/controllers/projects/pipelines_controller.rb +++ b/app/controllers/projects/pipelines_controller.rb @@ -12,11 +12,11 @@ class Projects::PipelinesController < Projects::ApplicationController before_action :authorize_create_pipeline!, only: [:new, :create, :config_variables] before_action :authorize_update_pipeline!, only: [:retry, :cancel] before_action do - push_frontend_feature_flag(:filter_pipelines_search, project, default_enabled: true) push_frontend_feature_flag(:dag_pipeline_tab, project, default_enabled: true) push_frontend_feature_flag(:pipelines_security_report_summary, project) - push_frontend_feature_flag(:new_pipeline_form, project) + push_frontend_feature_flag(:new_pipeline_form, project, default_enabled: true) push_frontend_feature_flag(:graphql_pipeline_header, project, type: :development, default_enabled: false) + push_frontend_feature_flag(:graphql_pipeline_details, project, type: :development, default_enabled: false) push_frontend_feature_flag(:new_pipeline_form_prefilled_vars, project, type: :development) end before_action :ensure_pipeline, only: [:show] @@ -194,6 +194,7 @@ class Projects::PipelinesController < Projects::ApplicationController @counts[:total] = @project.all_pipelines.count(:all) @counts[:success] = @project.all_pipelines.success.count(:all) @counts[:failed] = @project.all_pipelines.failed.count(:all) + @counts[:total_duration] = @project.all_pipelines.total_duration end def test_report @@ -213,7 +214,7 @@ class Projects::PipelinesController < Projects::ApplicationController def config_variables respond_to do |format| format.json do - render json: Ci::ListConfigVariablesService.new(@project).execute(params[:sha]) + render json: Ci::ListConfigVariablesService.new(@project, current_user).execute(params[:sha]) end end end diff --git a/app/controllers/projects/raw_controller.rb b/app/controllers/projects/raw_controller.rb index a9490c106d4..d8ba7e4f235 100644 --- a/app/controllers/projects/raw_controller.rb +++ b/app/controllers/projects/raw_controller.rb @@ -6,13 +6,14 @@ class Projects::RawController < Projects::ApplicationController include SendsBlob include StaticObjectExternalStorage + skip_before_action :default_cache_headers, only: :show + prepend_before_action(only: [:show]) { authenticate_sessionless_user!(:blob) } before_action :require_non_empty_project before_action :authorize_download_code! before_action :show_rate_limit, only: [:show], unless: :external_storage_request? before_action :assign_ref_vars - before_action :no_cache_headers, only: [:show] before_action :redirect_to_external_storage, only: :show, if: :static_objects_external_storage_enabled? feature_category :source_code_management diff --git a/app/controllers/projects/releases_controller.rb b/app/controllers/projects/releases_controller.rb index 4e8260d9e53..a6e795a2b91 100644 --- a/app/controllers/projects/releases_controller.rb +++ b/app/controllers/projects/releases_controller.rb @@ -54,7 +54,7 @@ class Projects::ReleasesController < Projects::ApplicationController end def sanitized_filepath - CGI.unescape(params[:filepath]) + "/#{CGI.unescape(params[:filepath])}" end def sanitized_tag_name diff --git a/app/controllers/projects/repositories_controller.rb b/app/controllers/projects/repositories_controller.rb index ba3ab52e3af..fb6a09cff65 100644 --- a/app/controllers/projects/repositories_controller.rb +++ b/app/controllers/projects/repositories_controller.rb @@ -8,6 +8,8 @@ class Projects::RepositoriesController < Projects::ApplicationController prepend_before_action(only: [:archive]) { authenticate_sessionless_user!(:archive) } + skip_before_action :default_cache_headers, only: :archive + # Authorize before_action :require_non_empty_project, except: :create before_action :archive_rate_limit!, only: :archive diff --git a/app/controllers/projects/runners_controller.rb b/app/controllers/projects/runners_controller.rb index 544074f9840..24fa0894a9c 100644 --- a/app/controllers/projects/runners_controller.rb +++ b/app/controllers/projects/runners_controller.rb @@ -52,7 +52,7 @@ class Projects::RunnersController < Projects::ApplicationController end def toggle_shared_runners - if Feature.enabled?(:disable_shared_runners_on_group, default_enabled: true) && !project.shared_runners_enabled && project.group && project.group.shared_runners_setting == 'disabled_and_unoverridable' + if !project.shared_runners_enabled && project.group && project.group.shared_runners_setting == 'disabled_and_unoverridable' return redirect_to project_runners_path(@project), alert: _("Cannot enable shared runners because parent group does not allow it") end diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index 93ad549bc50..6ed9f74297d 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -13,6 +13,8 @@ class Projects::ServicesController < Projects::ApplicationController before_action :redirect_deprecated_prometheus_service, only: [:update] before_action only: :edit do push_frontend_feature_flag(:jira_issues_integration, @project, type: :licensed, default_enabled: true) + push_frontend_feature_flag(:jira_vulnerabilities_integration, @project, type: :licensed, default_enabled: true) + push_frontend_feature_flag(:jira_for_vulnerabilities, @project, type: :development, default_enabled: false) end respond_to :html @@ -70,7 +72,7 @@ class Projects::ServicesController < Projects::ApplicationController return { error: true, message: s_('Integrations|Connection failed. Please check your settings.'), service_response: result[:message].to_s, test_failed: true } end - {} + result[:data].presence || {} rescue Gitlab::HTTP::BlockedUrlError => e { error: true, message: s_('Integrations|Connection failed. Please check your settings.'), service_response: e.message, test_failed: true } end diff --git a/app/controllers/projects/settings/access_tokens_controller.rb b/app/controllers/projects/settings/access_tokens_controller.rb index cbd6716fdf7..74350147825 100644 --- a/app/controllers/projects/settings/access_tokens_controller.rb +++ b/app/controllers/projects/settings/access_tokens_controller.rb @@ -23,7 +23,7 @@ module Projects redirect_to namespace_project_settings_access_tokens_path, notice: _("Your new project access token has been created.") else - render :index + redirect_to namespace_project_settings_access_tokens_path, alert: _("Failed to create new project access token: %{token_response_message}") % { token_response_message: token_response.message } end end diff --git a/app/controllers/projects/settings/ci_cd_controller.rb b/app/controllers/projects/settings/ci_cd_controller.rb index 2963321f803..f76278a12a4 100644 --- a/app/controllers/projects/settings/ci_cd_controller.rb +++ b/app/controllers/projects/settings/ci_cd_controller.rb @@ -5,10 +5,11 @@ module Projects class CiCdController < Projects::ApplicationController include RunnerSetupScripts + NUMBER_OF_RUNNERS_PER_PAGE = 20 + before_action :authorize_admin_pipeline! before_action :define_variables before_action do - push_frontend_feature_flag(:new_variables_ui, @project, default_enabled: true) push_frontend_feature_flag(:ajax_new_deploy_token, @project) end @@ -76,7 +77,7 @@ module Projects [ :runners_token, :builds_enabled, :build_allow_git_fetch, :build_timeout_human_readable, :build_coverage_regex, :public_builds, - :auto_cancel_pending_pipelines, :ci_config_path, + :auto_cancel_pending_pipelines, :ci_config_path, :auto_rollback_enabled, auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy], ci_cd_settings_attributes: [:default_git_depth, :forward_deployment_enabled] ].tap do |list| @@ -109,13 +110,13 @@ module Projects end def define_runners_variables - @project_runners = @project.runners.ordered + @project_runners = @project.runners.ordered.page(params[:project_page]).per(NUMBER_OF_RUNNERS_PER_PAGE).with_tags @assignable_runners = current_user .ci_owned_runners .assignable_for(project) .ordered - .page(params[:page]).per(20) + .page(params[:specific_page]).per(NUMBER_OF_RUNNERS_PER_PAGE) @shared_runners = ::Ci::Runner.instance_type.active diff --git a/app/controllers/projects/settings/operations_controller.rb b/app/controllers/projects/settings/operations_controller.rb index c407b15e29f..c9386a2edec 100644 --- a/app/controllers/projects/settings/operations_controller.rb +++ b/app/controllers/projects/settings/operations_controller.rb @@ -6,6 +6,11 @@ module Projects before_action :authorize_admin_operations! before_action :authorize_read_prometheus_alerts!, only: [:reset_alerting_token] + before_action do + push_frontend_feature_flag(:http_integrations_list, @project) + push_frontend_feature_flag(:multiple_http_integrations_custom_mapping, @project) + end + respond_to :json, only: [:reset_alerting_token, :reset_pagerduty_token] helper_method :error_tracking_setting diff --git a/app/controllers/projects/settings/repository_controller.rb b/app/controllers/projects/settings/repository_controller.rb index 0994bebb1d0..dd50ab1bc7a 100644 --- a/app/controllers/projects/settings/repository_controller.rb +++ b/app/controllers/projects/settings/repository_controller.rb @@ -18,14 +18,13 @@ module Projects end def cleanup - cleanup_params = params.require(:project).permit(:bfg_object_map) - result = Projects::UpdateService.new(project, current_user, cleanup_params).execute + bfg_object_map = params.require(:project).require(:bfg_object_map) + result = Projects::CleanupService.enqueue(project, current_user, bfg_object_map) if result[:status] == :success - RepositoryCleanupWorker.perform_async(project.id, current_user.id) # rubocop:disable CodeReuse/Worker flash[:notice] = _('Repository cleanup has started. You will receive an email once the cleanup operation is complete.') else - flash[:alert] = _('Failed to upload object map file') + flash[:alert] = status.fetch(:message, _('Failed to upload object map file')) end redirect_to project_settings_repository_path(project) diff --git a/app/controllers/projects/static_site_editor_controller.rb b/app/controllers/projects/static_site_editor_controller.rb index 7e2e32a843f..5c3d9b60877 100644 --- a/app/controllers/projects/static_site_editor_controller.rb +++ b/app/controllers/projects/static_site_editor_controller.rb @@ -6,12 +6,16 @@ class Projects::StaticSiteEditorController < Projects::ApplicationController layout 'fullscreen' + content_security_policy do |policy| + next if policy.directives.blank? + + frame_src_values = Array.wrap(policy.directives['frame-src']) | ['https://www.youtube.com'] + policy.frame_src(*frame_src_values) + end + prepend_before_action :authenticate_user!, only: [:show] before_action :assign_ref_and_path, only: [:show] before_action :authorize_edit_tree!, only: [:show] - before_action do - push_frontend_feature_flag(:sse_image_uploads) - end feature_category :static_site_editor @@ -47,6 +51,8 @@ class Projects::StaticSiteEditorController < Projects::ApplicationController payload.transform_values do |value| if value.is_a?(String) || value.is_a?(Integer) value + elsif value.nil? + '' else value.to_json end diff --git a/app/controllers/projects/tags_controller.rb b/app/controllers/projects/tags_controller.rb index 1d783241196..94b0473e1f3 100644 --- a/app/controllers/projects/tags_controller.rb +++ b/app/controllers/projects/tags_controller.rb @@ -24,6 +24,7 @@ class Projects::TagsController < Projects::ApplicationController tag_names = @tags.map(&:name) @tags_pipelines = @project.ci_pipelines.latest_successful_for_refs(tag_names) @releases = project.releases.where(tag: tag_names) + @tag_pipeline_statuses = Ci::CommitStatusesFinder.new(@project, @repository, current_user, @tags).execute respond_to do |format| format.html diff --git a/app/controllers/projects/templates_controller.rb b/app/controllers/projects/templates_controller.rb index 7ab23e39cf0..f4726638777 100644 --- a/app/controllers/projects/templates_controller.rb +++ b/app/controllers/projects/templates_controller.rb @@ -7,6 +7,14 @@ class Projects::TemplatesController < Projects::ApplicationController feature_category :templates + def index + templates = @template_type.template_subsets(project) + + respond_to do |format| + format.json { render json: templates.to_json } + end + end + def show template = @template_type.find(params[:key], project) diff --git a/app/controllers/projects/terraform_controller.rb b/app/controllers/projects/terraform_controller.rb new file mode 100644 index 00000000000..aef163c98c5 --- /dev/null +++ b/app/controllers/projects/terraform_controller.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +class Projects::TerraformController < Projects::ApplicationController + before_action :authorize_can_read_terraform_state! + + feature_category :infrastructure_as_code + + def index + end + + private + + def authorize_can_read_terraform_state! + access_denied! unless can?(current_user, :read_terraform_state, project) + end +end |