diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-08-18 11:17:02 +0300 |
commit | b39512ed755239198a9c294b6a45e65c05900235 (patch) | |
tree | d234a3efade1de67c46b9e5a38ce813627726aa7 /app/controllers/projects | |
parent | d31474cf3b17ece37939d20082b07f6657cc79a9 (diff) |
Add latest changes from gitlab-org/gitlab@15-3-stable-eev15.3.0-rc42
Diffstat (limited to 'app/controllers/projects')
33 files changed, 128 insertions, 130 deletions
diff --git a/app/controllers/projects/alerting/notifications_controller.rb b/app/controllers/projects/alerting/notifications_controller.rb index 82fff287c4a..f3283c88740 100644 --- a/app/controllers/projects/alerting/notifications_controller.rb +++ b/app/controllers/projects/alerting/notifications_controller.rb @@ -13,8 +13,6 @@ module Projects prepend_before_action :repository, :project_without_auth feature_category :incident_management - # Goal is to increase the urgency to medium. - # See https://gitlab.com/gitlab-org/gitlab/-/issues/361310. urgency :low, [:create] def create diff --git a/app/controllers/projects/analytics/cycle_analytics/stages_controller.rb b/app/controllers/projects/analytics/cycle_analytics/stages_controller.rb index 7b38c069a60..ab2cf3abdde 100644 --- a/app/controllers/projects/analytics/cycle_analytics/stages_controller.rb +++ b/app/controllers/projects/analytics/cycle_analytics/stages_controller.rb @@ -2,6 +2,7 @@ class Projects::Analytics::CycleAnalytics::StagesController < Projects::ApplicationController include ::Analytics::CycleAnalytics::StageActions + include Gitlab::Utils::StrongMemoize extend ::Gitlab::Utils::Override respond_to :json @@ -10,6 +11,7 @@ class Projects::Analytics::CycleAnalytics::StagesController < Projects::Applicat before_action :authorize_read_cycle_analytics! before_action :only_default_value_stream_is_allowed! + before_action :authorize_stage!, only: [:median, :count, :average, :records] urgency :low @@ -25,7 +27,26 @@ class Projects::Analytics::CycleAnalytics::StagesController < Projects::Applicat Analytics::CycleAnalytics::ProjectValueStream end + override :cycle_analytics_configuration + def cycle_analytics_configuration(stages) + super(stages.select { |stage| permitted_stage?(stage) }) + end + def only_default_value_stream_is_allowed! render_404 if params[:value_stream_id] != Analytics::CycleAnalytics::Stages::BaseService::DEFAULT_VALUE_STREAM_NAME end + + def permitted_stage?(stage) + permissions[stage.name.to_sym] # name matches the permission key (only when default stages are used) + end + + def permissions + strong_memoize(:permissions) do + Gitlab::CycleAnalytics::Permissions.new(user: current_user, project: parent).get + end + end + + def authorize_stage! + render_403 unless permitted_stage?(stage) + end end diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 97aae56c4ec..f5188e28b81 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -43,6 +43,7 @@ class Projects::BlobController < Projects::ApplicationController before_action do push_frontend_feature_flag(:highlight_js, @project) + push_frontend_feature_flag(:file_line_blame, @project) push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks) end diff --git a/app/controllers/projects/boards_controller.rb b/app/controllers/projects/boards_controller.rb index 36986a714fb..82b35a22669 100644 --- a/app/controllers/projects/boards_controller.rb +++ b/app/controllers/projects/boards_controller.rb @@ -10,8 +10,8 @@ class Projects::BoardsController < Projects::ApplicationController push_frontend_feature_flag(:board_multi_select, project) push_frontend_feature_flag(:realtime_labels, project&.group) experiment(:prominent_create_board_btn, subject: current_user) do |e| - e.control { } - e.candidate { } + e.control {} + e.candidate {} end.run end diff --git a/app/controllers/projects/ci/pipeline_editor_controller.rb b/app/controllers/projects/ci/pipeline_editor_controller.rb index 85e258b62e8..84e5d59a2c3 100644 --- a/app/controllers/projects/ci/pipeline_editor_controller.rb +++ b/app/controllers/projects/ci/pipeline_editor_controller.rb @@ -4,7 +4,6 @@ class Projects::Ci::PipelineEditorController < Projects::ApplicationController before_action :check_can_collaborate! before_action do push_frontend_feature_flag(:schema_linting, @project) - push_frontend_feature_flag(:simulate_pipeline, @project) end feature_category :pipeline_authoring diff --git a/app/controllers/projects/ci/secure_files_controller.rb b/app/controllers/projects/ci/secure_files_controller.rb deleted file mode 100644 index 59ddca19081..00000000000 --- a/app/controllers/projects/ci/secure_files_controller.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: true - -class Projects::Ci::SecureFilesController < Projects::ApplicationController - before_action :authorize_read_secure_files! - - feature_category :pipeline_authoring - - def show - render_404 unless Feature.enabled?(:ci_secure_files, project) - end -end diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 09a06aaed8c..d7fd65f02a8 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -88,7 +88,7 @@ class Projects::CompareController < Projects::ApplicationController # target == start_ref == from def target_project strong_memoize(:target_project) do - next source_project unless compare_params.key?(:from_project_id) + next source_project.default_merge_request_target unless compare_params.key?(:from_project_id) next source_project if compare_params[:from_project_id].to_i == source_project.id target_project = target_projects(source_project).find_by_id(compare_params[:from_project_id]) diff --git a/app/controllers/projects/feature_flags_controller.rb b/app/controllers/projects/feature_flags_controller.rb index 1d1fe91ad70..16392775c09 100644 --- a/app/controllers/projects/feature_flags_controller.rb +++ b/app/controllers/projects/feature_flags_controller.rb @@ -111,9 +111,9 @@ class Projects::FeatureFlagsController < Projects::ApplicationController .permit(:name, :description, :active, scopes_attributes: [:id, :environment_scope, :active, :_destroy, strategies: [:name, parameters: [:groupId, :percentage, :userIds]]], - strategies_attributes: [:id, :name, :user_list_id, :_destroy, - parameters: [:groupId, :percentage, :userIds, :rollout, :stickiness], - scopes_attributes: [:id, :environment_scope, :_destroy]]) + strategies_attributes: [:id, :name, :user_list_id, :_destroy, + parameters: [:groupId, :percentage, :userIds, :rollout, :stickiness], + scopes_attributes: [:id, :environment_scope, :_destroy]]) end def feature_flag_json(feature_flag) diff --git a/app/controllers/projects/google_cloud/base_controller.rb b/app/controllers/projects/google_cloud/base_controller.rb index 050b26a40c7..d1eb86c5e49 100644 --- a/app/controllers/projects/google_cloud/base_controller.rb +++ b/app/controllers/projects/google_cloud/base_controller.rb @@ -80,4 +80,16 @@ class Projects::GoogleCloud::BaseController < Projects::ApplicationController Gitlab::Tracking.event('Projects::GoogleCloud', action, **options) end + + def gcp_projects + google_api_client = GoogleApi::CloudPlatform::Client.new(token_in_session, nil) + google_api_client.list_projects + end + + def refs + params = { per_page: 50 } + branches = BranchesFinder.new(project.repository, params).execute(gitaly_pagination: true) + tags = TagsFinder.new(project.repository, params).execute(gitaly_pagination: true) + (branches + tags).map(&:name) + end end diff --git a/app/controllers/projects/google_cloud/configuration_controller.rb b/app/controllers/projects/google_cloud/configuration_controller.rb index fa672058247..8d252c35031 100644 --- a/app/controllers/projects/google_cloud/configuration_controller.rb +++ b/app/controllers/projects/google_cloud/configuration_controller.rb @@ -4,7 +4,6 @@ module Projects module GoogleCloud class ConfigurationController < Projects::GoogleCloud::BaseController def index - @google_cloud_path = project_google_cloud_configuration_path(project) js_data = { configurationUrl: project_google_cloud_configuration_path(project), deploymentsUrl: project_google_cloud_deployments_path(project), diff --git a/app/controllers/projects/google_cloud/databases_controller.rb b/app/controllers/projects/google_cloud/databases_controller.rb index 711409e7550..7b1cf6e5ce1 100644 --- a/app/controllers/projects/google_cloud/databases_controller.rb +++ b/app/controllers/projects/google_cloud/databases_controller.rb @@ -4,7 +4,6 @@ module Projects module GoogleCloud class DatabasesController < Projects::GoogleCloud::BaseController def index - @google_cloud_path = project_google_cloud_configuration_path(project) js_data = { configurationUrl: project_google_cloud_configuration_path(project), deploymentsUrl: project_google_cloud_deployments_path(project), diff --git a/app/controllers/projects/google_cloud/deployments_controller.rb b/app/controllers/projects/google_cloud/deployments_controller.rb index 4aa17b36fad..1ac4697a63f 100644 --- a/app/controllers/projects/google_cloud/deployments_controller.rb +++ b/app/controllers/projects/google_cloud/deployments_controller.rb @@ -4,7 +4,6 @@ class Projects::GoogleCloud::DeploymentsController < Projects::GoogleCloud::Base before_action :validate_gcp_token! def index - @google_cloud_path = project_google_cloud_configuration_path(project) js_data = { configurationUrl: project_google_cloud_configuration_path(project), deploymentsUrl: project_google_cloud_deployments_path(project), @@ -40,9 +39,9 @@ class Projects::GoogleCloud::DeploymentsController < Projects::GoogleCloud::Base redirect_to project_new_merge_request_path(project, merge_request: cloud_run_mr_params) end end - rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => error - track_event('deployments#cloud_run', 'error_gcp', error) - flash[:warning] = _('Google Cloud Error - %{error}') % { error: error } + rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => e + track_event('deployments#cloud_run', 'error_gcp', e) + flash[:warning] = _('Google Cloud Error - %{error}') % { error: e } redirect_to project_google_cloud_deployments_path(project) end diff --git a/app/controllers/projects/google_cloud/gcp_regions_controller.rb b/app/controllers/projects/google_cloud/gcp_regions_controller.rb index 3fbe9a96284..39f33624804 100644 --- a/app/controllers/projects/google_cloud/gcp_regions_controller.rb +++ b/app/controllers/projects/google_cloud/gcp_regions_controller.rb @@ -9,13 +9,7 @@ class Projects::GoogleCloud::GcpRegionsController < Projects::GoogleCloud::BaseC GCP_REGION_CI_VAR_KEY = 'GCP_REGION' def index - @google_cloud_path = project_google_cloud_configuration_path(project) - params = { per_page: 50 } - branches = BranchesFinder.new(project.repository, params).execute(gitaly_pagination: true) - tags = TagsFinder.new(project.repository, params).execute(gitaly_pagination: true) - refs = (branches + tags).map(&:name) js_data = { - screen: 'gcp_regions_form', availableRegions: AVAILABLE_REGIONS, refs: refs, cancelPath: project_google_cloud_configuration_path(project) diff --git a/app/controllers/projects/google_cloud/service_accounts_controller.rb b/app/controllers/projects/google_cloud/service_accounts_controller.rb index dbd83be19db..7f25054177e 100644 --- a/app/controllers/projects/google_cloud/service_accounts_controller.rb +++ b/app/controllers/projects/google_cloud/service_accounts_controller.rb @@ -4,22 +4,12 @@ class Projects::GoogleCloud::ServiceAccountsController < Projects::GoogleCloud:: before_action :validate_gcp_token! def index - @google_cloud_path = project_google_cloud_configuration_path(project) - google_api_client = GoogleApi::CloudPlatform::Client.new(token_in_session, nil) - gcp_projects = google_api_client.list_projects - if gcp_projects.empty? - @js_data = { screen: 'no_gcp_projects' }.to_json track_event('service_accounts#index', 'error_form', 'no_gcp_projects') flash[:warning] = _('No Google Cloud projects - You need at least one Google Cloud project') redirect_to project_google_cloud_configuration_path(project) else - params = { per_page: 50 } - branches = BranchesFinder.new(project.repository, params).execute(gitaly_pagination: true) - tags = TagsFinder.new(project.repository, params).execute(gitaly_pagination: true) - refs = (branches + tags).map(&:name) js_data = { - screen: 'service_accounts_form', gcpProjects: gcp_projects, refs: refs, cancelPath: project_google_cloud_configuration_path(project) @@ -28,9 +18,9 @@ class Projects::GoogleCloud::ServiceAccountsController < Projects::GoogleCloud:: track_event('service_accounts#index', 'success', js_data) end - rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => error - track_event('service_accounts#index', 'error_gcp', error) - flash[:warning] = _('Google Cloud Error - %{error}') % { error: error } + rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => e + track_event('service_accounts#index', 'error_gcp', e) + flash[:warning] = _('Google Cloud Error - %{error}') % { error: e } redirect_to project_google_cloud_configuration_path(project) end @@ -47,9 +37,9 @@ class Projects::GoogleCloud::ServiceAccountsController < Projects::GoogleCloud:: track_event('service_accounts#create', 'success', response) redirect_to project_google_cloud_configuration_path(project), notice: response.message - rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => error - track_event('service_accounts#create', 'error_gcp', error) - flash[:warning] = _('Google Cloud Error - %{error}') % { error: error } + rescue Google::Apis::ClientError, Google::Apis::ServerError, Google::Apis::AuthorizationError => e + track_event('service_accounts#create', 'error_gcp', e) + flash[:warning] = _('Google Cloud Error - %{error}') % { error: e } redirect_to project_google_cloud_configuration_path(project) end end diff --git a/app/controllers/projects/incidents_controller.rb b/app/controllers/projects/incidents_controller.rb index f9fa8046962..36b52533e78 100644 --- a/app/controllers/projects/incidents_controller.rb +++ b/app/controllers/projects/incidents_controller.rb @@ -9,7 +9,7 @@ class Projects::IncidentsController < Projects::ApplicationController before_action do push_frontend_feature_flag(:incident_timeline, @project) push_force_frontend_feature_flag(:work_items, @project&.work_items_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_mvc_2) + 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 diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index f1c9e2b2653..d19db2b11ab 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -44,12 +44,16 @@ class Projects::IssuesController < Projects::ApplicationController push_frontend_feature_flag(:incident_timeline, project) end + before_action only: [:index, :show] do + push_force_frontend_feature_flag(:work_items, project&.work_items_feature_flag_enabled?) + end + before_action only: :show do push_frontend_feature_flag(:issue_assignees_widget, project) push_frontend_feature_flag(:realtime_labels, project) - push_force_frontend_feature_flag(:work_items, project&.work_items_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_mvc_2) + 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_force_frontend_feature_flag(:work_items_create_from_markdown, project&.work_items_create_from_markdown_feature_flag_enabled?) end around_action :allow_gitaly_ref_name_caching, only: [:discussions] @@ -239,12 +243,12 @@ class Projects::IssuesController < Projects::ApplicationController end def import_csv - if uploader = UploadService.new(project, params[:file]).execute - ImportIssuesCsvWorker.perform_async(current_user.id, project.id, uploader.upload.id) # rubocop:disable CodeReuse/Worker + result = Issues::PrepareImportCsvService.new(project, current_user, file: params[:file]).execute - flash[:notice] = _("Your issues are being imported. Once finished, you'll get a confirmation email.") + if result.success? + flash[:notice] = result.message else - flash[:alert] = _("File upload error.") + flash[:alert] = result.message end redirect_to project_issues_path(project) diff --git a/app/controllers/projects/jobs_controller.rb b/app/controllers/projects/jobs_controller.rb index ad59f421c06..7878ace5015 100644 --- a/app/controllers/projects/jobs_controller.rb +++ b/app/controllers/projects/jobs_controller.rb @@ -18,7 +18,7 @@ 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 :push_job_log_search, only: [:show] + before_action :push_job_log_jump_to_failures, only: [:show] before_action :reject_if_build_artifacts_size_refreshing!, only: [:erase] layout 'project' @@ -249,7 +249,7 @@ class Projects::JobsController < Projects::ApplicationController ::Gitlab::Workhorse.channel_websocket(service) end - def push_job_log_search - push_frontend_feature_flag(:job_log_search, @project) + def push_job_log_jump_to_failures + push_frontend_feature_flag(:job_log_jump_to_failures, @project) end end diff --git a/app/controllers/projects/merge_requests/diffs_controller.rb b/app/controllers/projects/merge_requests/diffs_controller.rb index 0dcc2bc3181..279fd4c457e 100644 --- a/app/controllers/projects/merge_requests/diffs_controller.rb +++ b/app/controllers/projects/merge_requests/diffs_controller.rb @@ -48,20 +48,24 @@ class Projects::MergeRequests::DiffsController < Projects::MergeRequests::Applic allow_tree_conflicts: display_merge_conflicts_in_diff? } - if diff_options_hash[:paths].blank? - # NOTE: Any variables that would affect the resulting json needs to be added to the cache_context to avoid stale cache issues. - cache_context = [ - current_user&.cache_key, - unfoldable_positions.map(&:to_h), - diff_view, - params[:w], - params[:expanded], - params[:page], - params[:per_page], - options[:merge_ref_head_diff], - options[:allow_tree_conflicts] - ] + # NOTE: Any variables that would affect the resulting json needs to be added to the cache_context to avoid stale cache issues. + cache_context = [ + current_user&.cache_key, + unfoldable_positions.map(&:to_h), + diff_view, + params[:w], + params[:expanded], + params[:page], + params[:per_page], + options[:merge_ref_head_diff], + options[:allow_tree_conflicts] + ] + + if Feature.enabled?(:etag_merge_request_diff_batches, @merge_request.project) + return unless stale?(etag: [cache_context + diff_options_hash.fetch(:paths, []), diffs]) + end + if diff_options_hash[:paths].blank? render_cached( diffs, with: PaginatedDiffSerializer.new(current_user: current_user), diff --git a/app/controllers/projects/merge_requests/drafts_controller.rb b/app/controllers/projects/merge_requests/drafts_controller.rb index db7557674b2..ff6b6bfaf27 100644 --- a/app/controllers/projects/merge_requests/drafts_controller.rb +++ b/app/controllers/projects/merge_requests/drafts_controller.rb @@ -72,9 +72,9 @@ class Projects::MergeRequests::DraftsController < Projects::MergeRequests::Appli strong_memoize(:draft_note) do draft_notes.find(params[:id]) end - rescue ActiveRecord::RecordNotFound => ex + rescue ActiveRecord::RecordNotFound => e # draft_note is allowed to be nil in #publish - raise ex unless allow_nil + raise e unless allow_nil end def draft_notes diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb index a2f018c013b..870c57fd6f3 100644 --- a/app/controllers/projects/merge_requests_controller.rb +++ b/app/controllers/projects/merge_requests_controller.rb @@ -34,16 +34,13 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo 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(:restructured_mr_widget, project) push_frontend_feature_flag(:refactor_mr_widgets_extensions, project) push_frontend_feature_flag(:refactor_code_quality_extension, project) push_frontend_feature_flag(:refactor_mr_widget_test_summary, project) - push_frontend_feature_flag(:rebase_without_ci_ui, 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(:mr_attention_requests, current_user) 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) @@ -367,7 +364,7 @@ class Projects::MergeRequestsController < Projects::MergeRequests::ApplicationCo end def rebase - @merge_request.rebase_async(current_user.id) + @merge_request.rebase_async(current_user.id, skip_ci: Gitlab::Utils.to_boolean(merge_params[:skip_ci], default: false)) head :ok rescue MergeRequest::RebaseLockTimeout => e diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb index 744e45a0f9c..cfb67b7b4ff 100644 --- a/app/controllers/projects/milestones_controller.rb +++ b/app/controllers/projects/milestones_controller.rb @@ -92,8 +92,8 @@ class Projects::MilestonesController < Projects::ApplicationController render json: { url: project_milestones_path(project) } end end - rescue Milestones::PromoteService::PromoteMilestoneError => error - redirect_to milestone, alert: error.message + rescue Milestones::PromoteService::PromoteMilestoneError => e + redirect_to milestone, alert: e.message end def flash_notice_for(milestone, group) diff --git a/app/controllers/projects/mirrors_controller.rb b/app/controllers/projects/mirrors_controller.rb index bcb6b574d5a..acbd26cbdf6 100644 --- a/app/controllers/projects/mirrors_controller.rb +++ b/app/controllers/projects/mirrors_controller.rb @@ -58,8 +58,8 @@ class Projects::MirrorsController < Projects::ApplicationController else render json: lookup end - rescue ArgumentError => err - render json: { message: err.message }, status: :bad_request + rescue ArgumentError => e + render json: { message: e.message }, status: :bad_request end private diff --git a/app/controllers/projects/pages_controller.rb b/app/controllers/projects/pages_controller.rb index 4bd33882eee..0e990b64cd6 100644 --- a/app/controllers/projects/pages_controller.rb +++ b/app/controllers/projects/pages_controller.rb @@ -10,11 +10,29 @@ class Projects::PagesController < Projects::ApplicationController feature_category :pages - # rubocop: disable CodeReuse/ActiveRecord + def new + @pipeline_wizard_data = { + project_path: @project.full_path, + default_branch: @project.repository.root_ref, + redirect_to_when_done: project_pages_path(@project) + } + end + def show + unless @project.pages_enabled? + render :disabled + return + end + + if @project.pages_show_onboarding? + redirect_to action: 'new' + return + end + + # rubocop: disable CodeReuse/ActiveRecord @domains = @project.pages_domains.order(:domain).present(current_user: current_user) + # rubocop: enable CodeReuse/ActiveRecord end - # rubocop: enable CodeReuse/ActiveRecord def destroy ::Pages::DeleteService.new(@project, current_user).execute diff --git a/app/controllers/projects/pipelines/stages_controller.rb b/app/controllers/projects/pipelines/stages_controller.rb index 0447bbf29e7..c94d468cf2e 100644 --- a/app/controllers/projects/pipelines/stages_controller.rb +++ b/app/controllers/projects/pipelines/stages_controller.rb @@ -4,6 +4,7 @@ module Projects module Pipelines class StagesController < Projects::Pipelines::ApplicationController before_action :authorize_update_pipeline! + before_action :stage, only: [:play_manual] urgency :low, [ :play_manual @@ -26,7 +27,7 @@ module Projects private def stage - @pipeline_stage ||= pipeline.find_stage_by_name!(params[:stage_name]) + @stage ||= pipeline.stage(params[:stage_name]).presence || render_404 end end end diff --git a/app/controllers/projects/repositories_controller.rb b/app/controllers/projects/repositories_controller.rb index 9fc75fff807..33ce37ef4fb 100644 --- a/app/controllers/projects/repositories_controller.rb +++ b/app/controllers/projects/repositories_controller.rb @@ -35,8 +35,8 @@ class Projects::RepositoriesController < Projects::ApplicationController return if archive_not_modified? send_git_archive @repository, **repo_params - rescue StandardError => ex - logger.error("#{self.class.name}: #{ex}") + rescue StandardError => e + logger.error("#{self.class.name}: #{e}") git_not_found! end diff --git a/app/controllers/projects/runner_projects_controller.rb b/app/controllers/projects/runner_projects_controller.rb index 34ce8df202b..5946c43b134 100644 --- a/app/controllers/projects/runner_projects_controller.rb +++ b/app/controllers/projects/runner_projects_controller.rb @@ -15,7 +15,7 @@ class Projects::RunnerProjectsController < Projects::ApplicationController path = project_runners_path(project) - if ::Ci::Runners::AssignRunnerService.new(@runner, @project, current_user).execute + if ::Ci::Runners::AssignRunnerService.new(@runner, @project, current_user).execute.success? redirect_to path, notice: s_('Runners|Runner assigned to project.') else assign_to_messages = @runner.errors.messages[:assign_to] diff --git a/app/controllers/projects/settings/integration_hook_logs_controller.rb b/app/controllers/projects/settings/integration_hook_logs_controller.rb index b3b5a292d42..1e42fbce4c4 100644 --- a/app/controllers/projects/settings/integration_hook_logs_controller.rb +++ b/app/controllers/projects/settings/integration_hook_logs_controller.rb @@ -20,7 +20,7 @@ module Projects override :hook def hook - @hook ||= integration.service_hook || not_found + @hook ||= integration.try(:service_hook) || not_found end end end diff --git a/app/controllers/projects/settings/integrations_controller.rb b/app/controllers/projects/settings/integrations_controller.rb index cee9e9feb7b..03ef434456f 100644 --- a/app/controllers/projects/settings/integrations_controller.rb +++ b/app/controllers/projects/settings/integrations_controller.rb @@ -122,7 +122,7 @@ module Projects end def web_hook_logs - return unless integration.service_hook.present? + return unless integration.try(:service_hook).present? @web_hook_logs ||= integration.service_hook.web_hook_logs.recent.page(params[:page]) end diff --git a/app/controllers/projects/settings/packages_and_registries_controller.rb b/app/controllers/projects/settings/packages_and_registries_controller.rb index d3c08bef808..76c9cead360 100644 --- a/app/controllers/projects/settings/packages_and_registries_controller.rb +++ b/app/controllers/projects/settings/packages_and_registries_controller.rb @@ -14,11 +14,22 @@ module Projects def show end + def cleanup_tags + registry_settings_enabled! + + @hide_search_settings = true + end + private def packages_and_registries_settings_enabled! render_404 unless can?(current_user, :view_package_registry_project_settings, project) end + + def registry_settings_enabled! + render_404 unless Gitlab.config.registry.enabled && + can?(current_user, :admin_container_image, project) + end end end end diff --git a/app/controllers/projects/tags/releases_controller.rb b/app/controllers/projects/tags/releases_controller.rb deleted file mode 100644 index adeadf2133e..00000000000 --- a/app/controllers/projects/tags/releases_controller.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -# TODO: remove this file together with FF https://gitlab.com/gitlab-org/gitlab/-/issues/366244 -# also delete view/routes -class Projects::Tags::ReleasesController < Projects::ApplicationController - # Authorize - before_action :require_non_empty_project - before_action :authorize_download_code! - before_action :authorize_push_code! - before_action :tag - before_action :release - - feature_category :release_evidence - urgency :low - - def edit - end - - def update - release.update(release_params) if release.persisted? || release_params[:description].present? - - redirect_to project_tag_path(@project, tag.name) - end - - private - - def tag - @tag ||= @repository.find_tag(params[:tag_id]) - end - - def release - @release ||= Releases::CreateService.new(project, current_user, tag: @tag.name) - .find_or_build_release - end - - def release_params - params.require(:release).permit(:description) - end -end diff --git a/app/controllers/projects/tree_controller.rb b/app/controllers/projects/tree_controller.rb index ce51cbb6677..fea2689db14 100644 --- a/app/controllers/projects/tree_controller.rb +++ b/app/controllers/projects/tree_controller.rb @@ -19,6 +19,7 @@ class Projects::TreeController < Projects::ApplicationController before_action do push_frontend_feature_flag(:lazy_load_commits, @project) push_frontend_feature_flag(:highlight_js, @project) + push_frontend_feature_flag(:file_line_blame, @project) push_licensed_feature(:file_locks) if @project.licensed_feature_available?(:file_locks) end diff --git a/app/controllers/projects/variables_controller.rb b/app/controllers/projects/variables_controller.rb index e7bccf5a243..a8f062bd7c1 100644 --- a/app/controllers/projects/variables_controller.rb +++ b/app/controllers/projects/variables_controller.rb @@ -43,7 +43,7 @@ class Projects::VariablesController < Projects::ApplicationController end def variables_params - params.permit(variables_attributes: [*variable_params_attributes]) + params.permit(variables_attributes: Array(variable_params_attributes)) end def variable_params_attributes diff --git a/app/controllers/projects/work_items_controller.rb b/app/controllers/projects/work_items_controller.rb index ba23af41bb0..b794785f285 100644 --- a/app/controllers/projects/work_items_controller.rb +++ b/app/controllers/projects/work_items_controller.rb @@ -3,7 +3,7 @@ class Projects::WorkItemsController < Projects::ApplicationController before_action do push_force_frontend_feature_flag(:work_items, project&.work_items_feature_flag_enabled?) - push_frontend_feature_flag(:work_items_mvc_2) + 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 |