debian-mirror-gitlab/app/controllers/projects/settings/ci_cd_controller.rb

175 lines
5.7 KiB
Ruby
Raw Normal View History

2018-12-05 23:21:45 +05:30
# frozen_string_literal: true
2017-08-17 22:00:37 +05:30
module Projects
module Settings
class CiCdController < Projects::ApplicationController
2021-01-03 14:25:43 +05:30
include RunnerSetupScripts
2021-01-29 00:20:46 +05:30
NUMBER_OF_RUNNERS_PER_PAGE = 20
2021-04-29 21:17:54 +05:30
layout 'project_settings'
2017-08-17 22:00:37 +05:30
before_action :authorize_admin_pipeline!
2022-01-26 12:08:38 +05:30
before_action :check_builds_available!
2018-05-09 12:01:36 +05:30
before_action :define_variables
2020-04-08 14:13:33 +05:30
before_action do
2020-04-22 19:07:51 +05:30
push_frontend_feature_flag(:ajax_new_deploy_token, @project)
2020-04-08 14:13:33 +05:30
end
2017-08-17 22:00:37 +05:30
2021-01-03 14:25:43 +05:30
helper_method :highlight_badge
feature_category :continuous_integration
2017-08-17 22:00:37 +05:30
def show
2021-01-03 14:25:43 +05:30
if Feature.enabled?(:ci_pipeline_triggers_settings_vue_ui, @project)
@triggers_json = ::Ci::TriggerSerializer.new.represent(
@project.triggers, current_user: current_user, project: @project
).to_json
end
2021-11-18 22:05:49 +05:30
2022-03-02 08:16:31 +05:30
if current_user.ci_owned_runners_cross_joins_fix_enabled?
2021-11-18 22:05:49 +05:30
render
2022-03-02 08:16:31 +05:30
else
# @assignable_runners is using ci_owned_runners
::Gitlab::Database.allow_cross_joins_across_databases(url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/336436') do
render
end
2021-11-18 22:05:49 +05:30
end
2018-05-09 12:01:36 +05:30
end
def update
Projects::UpdateService.new(project, current_user, update_params).tap do |service|
result = service.execute
if result[:status] == :success
2020-01-01 13:55:28 +05:30
flash[:toast] = _("Pipelines settings for '%{project_name}' were successfully updated.") % { project_name: @project.name }
2018-05-09 12:01:36 +05:30
run_autodevops_pipeline(service)
redirect_to project_settings_ci_cd_path(@project)
else
2019-07-07 11:18:12 +05:30
redirect_to project_settings_ci_cd_path(@project), alert: result[:message]
2018-05-09 12:01:36 +05:30
end
end
2018-03-17 18:26:18 +05:30
end
def reset_cache
if ResetProjectCacheService.new(@project, current_user).execute
2018-05-09 12:01:36 +05:30
respond_to do |format|
format.json { head :ok }
end
2018-03-17 18:26:18 +05:30
else
2018-05-09 12:01:36 +05:30
respond_to do |format|
format.json { head :bad_request }
end
2018-03-17 18:26:18 +05:30
end
2017-08-17 22:00:37 +05:30
end
2018-12-05 23:21:45 +05:30
def reset_registration_token
2022-05-07 20:08:51 +05:30
::Ci::Runners::ResetRegistrationTokenService.new(@project, current_user).execute
2018-12-05 23:21:45 +05:30
2020-01-01 13:55:28 +05:30
flash[:toast] = _("New runners registration token has been generated!")
2018-12-05 23:21:45 +05:30
redirect_to namespace_project_settings_ci_cd_path
end
2021-01-03 14:25:43 +05:30
def runner_setup_scripts
2021-04-29 21:17:54 +05:30
private_runner_setup_scripts
2021-01-03 14:25:43 +05:30
end
2017-08-17 22:00:37 +05:30
private
2021-01-03 14:25:43 +05:30
def highlight_badge(name, content, language = nil)
Gitlab::Highlight.highlight(name, content, language: language)
end
2018-05-09 12:01:36 +05:30
def update_params
2019-12-21 20:55:43 +05:30
params.require(:project).permit(*permitted_project_params)
end
def permitted_project_params
[
2018-05-09 12:01:36 +05:30
:runners_token, :builds_enabled, :build_allow_git_fetch,
:build_timeout_human_readable, :build_coverage_regex, :public_builds,
2021-01-29 00:20:46 +05:30
:auto_cancel_pending_pipelines, :ci_config_path, :auto_rollback_enabled,
2019-09-04 21:01:54 +05:30
auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy],
2021-01-03 14:25:43 +05:30
ci_cd_settings_attributes: [:default_git_depth, :forward_deployment_enabled]
2019-12-21 20:55:43 +05:30
].tap do |list|
list << :max_artifacts_size if can?(current_user, :update_max_artifacts_size, project)
end
2018-05-09 12:01:36 +05:30
end
def run_autodevops_pipeline(service)
return unless service.run_auto_devops_pipeline?
if @project.empty_repo?
2020-01-01 13:55:28 +05:30
flash[:notice] = _("This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch.")
2018-05-09 12:01:36 +05:30
return
end
2020-03-13 15:44:24 +05:30
# rubocop:disable CodeReuse/Worker
2018-05-09 12:01:36 +05:30
CreatePipelineWorker.perform_async(project.id, current_user.id, project.default_branch, :web, ignore_skip_ci: true, save_on_errors: false)
2020-03-13 15:44:24 +05:30
# rubocop:enable CodeReuse/Worker
2020-01-01 13:55:28 +05:30
2021-12-11 22:18:48 +05:30
flash[:toast] = _("A new Auto DevOps pipeline has been created, go to the Pipelines page for details")
2018-05-09 12:01:36 +05:30
end
def define_variables
define_runners_variables
2018-12-13 13:39:08 +05:30
define_ci_variables
2018-05-09 12:01:36 +05:30
define_triggers_variables
define_badges_variables
define_auto_devops_variables
end
2017-08-17 22:00:37 +05:30
def define_runners_variables
2021-01-29 00:20:46 +05:30
@project_runners = @project.runners.ordered.page(params[:project_page]).per(NUMBER_OF_RUNNERS_PER_PAGE).with_tags
2018-10-15 14:42:47 +05:30
@assignable_runners = current_user
2018-11-08 19:23:39 +05:30
.ci_owned_runners
2018-10-15 14:42:47 +05:30
.assignable_for(project)
.ordered
2021-01-29 00:20:46 +05:30
.page(params[:specific_page]).per(NUMBER_OF_RUNNERS_PER_PAGE)
2021-06-08 01:23:25 +05:30
.with_tags
2018-10-15 14:42:47 +05:30
2021-06-08 01:23:25 +05:30
@shared_runners = ::Ci::Runner.instance_type.active.with_tags
2018-10-15 14:42:47 +05:30
2017-08-17 22:00:37 +05:30
@shared_runners_count = @shared_runners.count(:all)
2018-10-15 14:42:47 +05:30
2021-06-08 01:23:25 +05:30
@group_runners = ::Ci::Runner.belonging_to_parent_group_of_project(@project.id).with_tags
2017-08-17 22:00:37 +05:30
end
2018-12-13 13:39:08 +05:30
def define_ci_variables
2018-05-09 12:01:36 +05:30
@variable = ::Ci::Variable.new(project: project)
2017-09-10 17:25:29 +05:30
.present(current_user: current_user)
@variables = project.variables.order_key_asc
.map { |variable| variable.present(current_user: current_user) }
2017-08-17 22:00:37 +05:30
end
def define_triggers_variables
@triggers = @project.triggers
2019-02-02 18:00:53 +05:30
.present(current_user: current_user)
2021-01-03 14:25:43 +05:30
2018-05-09 12:01:36 +05:30
@trigger = ::Ci::Trigger.new
2019-02-02 18:00:53 +05:30
.present(current_user: current_user)
2017-08-17 22:00:37 +05:30
end
def define_badges_variables
2021-06-08 01:23:25 +05:30
@ref = params[:ref] || @project.default_branch_or_main
2017-08-17 22:00:37 +05:30
2021-03-11 19:13:27 +05:30
@badges = [Gitlab::Ci::Badge::Pipeline::Status,
Gitlab::Ci::Badge::Coverage::Report]
2017-08-17 22:00:37 +05:30
@badges.map! do |badge|
badge.new(@project, @ref).metadata
end
2022-04-04 11:22:00 +05:30
@badges.append(Gitlab::Ci::Badge::Release::LatestRelease.new(@project, current_user).metadata)
2017-08-17 22:00:37 +05:30
end
2018-03-17 18:26:18 +05:30
def define_auto_devops_variables
@auto_devops = @project.auto_devops || ProjectAutoDevops.new
end
2017-08-17 22:00:37 +05:30
end
end
end
2019-12-04 20:38:33 +05:30
2021-06-08 01:23:25 +05:30
Projects::Settings::CiCdController.prepend_mod_with('Projects::Settings::CiCdController')