/app/controllers/projects/settings/ci_cd_controller.rb

https://gitlab.com/habukagumba/gitlab-ce · Ruby · 114 lines · 90 code · 23 blank · 1 comment · 9 complexity · bcae365b7db2c768a6529bb7cc3a9eb8 MD5 · raw file

  1. # frozen_string_literal: true
  2. module Projects
  3. module Settings
  4. class CiCdController < Projects::ApplicationController
  5. before_action :authorize_admin_pipeline!
  6. before_action :define_variables
  7. def show
  8. end
  9. def update
  10. Projects::UpdateService.new(project, current_user, update_params).tap do |service|
  11. result = service.execute
  12. if result[:status] == :success
  13. flash[:notice] = "Pipelines settings for '#{@project.name}' were successfully updated."
  14. run_autodevops_pipeline(service)
  15. redirect_to project_settings_ci_cd_path(@project)
  16. else
  17. render 'show'
  18. end
  19. end
  20. end
  21. def reset_cache
  22. if ResetProjectCacheService.new(@project, current_user).execute
  23. respond_to do |format|
  24. format.json { head :ok }
  25. end
  26. else
  27. respond_to do |format|
  28. format.json { head :bad_request }
  29. end
  30. end
  31. end
  32. private
  33. def update_params
  34. params.require(:project).permit(
  35. :runners_token, :builds_enabled, :build_allow_git_fetch,
  36. :build_timeout_human_readable, :build_coverage_regex, :public_builds,
  37. :auto_cancel_pending_pipelines, :ci_config_path,
  38. auto_devops_attributes: [:id, :domain, :enabled, :deploy_strategy]
  39. )
  40. end
  41. def run_autodevops_pipeline(service)
  42. return unless service.run_auto_devops_pipeline?
  43. if @project.empty_repo?
  44. flash[:warning] = "This repository is currently empty. A new Auto DevOps pipeline will be created after a new file has been pushed to a branch."
  45. return
  46. end
  47. CreatePipelineWorker.perform_async(project.id, current_user.id, project.default_branch, :web, ignore_skip_ci: true, save_on_errors: false)
  48. flash[:success] = "A new Auto DevOps pipeline has been created, go to <a href=\"#{project_pipelines_path(@project)}\">Pipelines page</a> for details".html_safe
  49. end
  50. def define_variables
  51. define_runners_variables
  52. define_secret_variables
  53. define_triggers_variables
  54. define_badges_variables
  55. define_auto_devops_variables
  56. end
  57. def define_runners_variables
  58. @project_runners = @project.runners.ordered
  59. @assignable_runners = current_user
  60. .ci_owned_runners
  61. .assignable_for(project)
  62. .ordered
  63. .page(params[:page]).per(20)
  64. @shared_runners = ::Ci::Runner.instance_type.active
  65. @shared_runners_count = @shared_runners.count(:all)
  66. @group_runners = ::Ci::Runner.belonging_to_parent_group_of_project(@project.id)
  67. end
  68. def define_secret_variables
  69. @variable = ::Ci::Variable.new(project: project)
  70. .present(current_user: current_user)
  71. @variables = project.variables.order_key_asc
  72. .map { |variable| variable.present(current_user: current_user) }
  73. end
  74. def define_triggers_variables
  75. @triggers = @project.triggers
  76. @trigger = ::Ci::Trigger.new
  77. end
  78. def define_badges_variables
  79. @ref = params[:ref] || @project.default_branch || 'master'
  80. @badges = [Gitlab::Badge::Pipeline::Status,
  81. Gitlab::Badge::Coverage::Report]
  82. @badges.map! do |badge|
  83. badge.new(@project, @ref).metadata
  84. end
  85. end
  86. def define_auto_devops_variables
  87. @auto_devops = @project.auto_devops || ProjectAutoDevops.new
  88. end
  89. end
  90. end
  91. end