Use pipelines.errors when communicating the error
This commit is contained in:
		
							parent
							
								
									379dc6fbcc
								
							
						
					
					
						commit
						ef60b8e168
					
				|  | @ -15,19 +15,17 @@ class Projects::PipelinesController < Projects::ApplicationController | |||
|   end | ||||
| 
 | ||||
|   def new | ||||
|     @pipeline = project.ci_commits.new | ||||
|   end | ||||
| 
 | ||||
|   def create | ||||
|     begin | ||||
|       pipeline = Ci::CreatePipelineService.new(project, current_user, create_params).execute | ||||
|       redirect_to namespace_project_pipeline_path(project.namespace, project, pipeline) | ||||
|     rescue ArgumentError => e | ||||
|       flash[:alert] = e.message | ||||
|       render 'new' | ||||
|     rescue | ||||
|       flash[:alert] = 'The pipeline could not be created. Please try again.' | ||||
|     @pipeline = Ci::CreatePipelineService.new(project, current_user, create_params).execute | ||||
|     unless @pipeline.persisted? | ||||
|       render 'new' | ||||
|       return | ||||
|     end | ||||
| 
 | ||||
|     redirect_to namespace_project_pipeline_path(project.namespace, project, @pipeline) | ||||
|   end | ||||
| 
 | ||||
|   def show | ||||
|  |  | |||
|  | @ -1,27 +1,39 @@ | |||
| module Ci | ||||
|   class CreatePipelineService < BaseService | ||||
|     def execute | ||||
|       pipeline = project.ci_commits.new | ||||
| 
 | ||||
|       unless ref_names.include?(params[:ref]) | ||||
|         raise ArgumentError, 'Reference not found' | ||||
|         pipeline.errors.add(:base, 'Reference not found') | ||||
|         return pipeline | ||||
|       end | ||||
| 
 | ||||
|       unless commit | ||||
|         raise ArgumentError, 'Commit not found' | ||||
|         pipeline.errors.add(:base, 'Commit not found') | ||||
|         return pipeline | ||||
|       end | ||||
| 
 | ||||
|       unless can?(current_user, :create_pipeline, project) | ||||
|         raise RuntimeError, 'Insufficient permissions to create a new pipeline' | ||||
|         pipeline.errors.add(:base, 'Insufficient permissions to create a new pipeline') | ||||
|         return pipeline | ||||
|       end | ||||
| 
 | ||||
|       pipeline = new_pipeline | ||||
|       begin | ||||
|         Ci::Commit.transaction do | ||||
|           pipeline.sha = commit.id | ||||
|           pipeline.ref = params[:ref] | ||||
|           pipeline.before_sha = Gitlab::Git::BLANK_SHA | ||||
| 
 | ||||
|       Ci::Commit.transaction do | ||||
|         unless pipeline.config_processor | ||||
|           raise ArgumentError, pipeline.yaml_errors || 'Missing .gitlab-ci.yml file' | ||||
|           unless pipeline.config_processor | ||||
|             pipeline.errors.add(:base, pipeline.yaml_errors || 'Missing .gitlab-ci.yml file') | ||||
|             raise ActiveRecord::Rollback | ||||
|           end | ||||
| 
 | ||||
|           pipeline.save! | ||||
|           pipeline.create_builds(current_user) | ||||
|         end | ||||
| 
 | ||||
|         pipeline.save! | ||||
|         pipeline.create_builds(current_user) | ||||
|       rescue | ||||
|         pipeline.errors.add(:base, 'The pipeline could not be created. Please try again.') | ||||
|       end | ||||
| 
 | ||||
|       pipeline | ||||
|  | @ -29,10 +41,6 @@ module Ci | |||
| 
 | ||||
|     private | ||||
| 
 | ||||
|     def new_pipeline | ||||
|       project.ci_commits.new(sha: commit.id, ref: params[:ref], before_sha: Gitlab::Git::BLANK_SHA) | ||||
|     end | ||||
| 
 | ||||
|     def ref_names | ||||
|       @ref_names ||= project.repository.ref_names | ||||
|     end | ||||
|  |  | |||
|  | @ -1,15 +1,12 @@ | |||
| - page_title "New Pipeline" | ||||
| = render "header_title" | ||||
| 
 | ||||
| - if @error | ||||
|   .alert.alert-danger | ||||
|     %button{ type: "button", class: "close", "data-dismiss" => "alert"} × | ||||
|     = @error | ||||
| %h3.page-title | ||||
|   New Pipeline | ||||
| %hr | ||||
| 
 | ||||
| = form_tag namespace_project_pipelines_path, method: :post, id: "new-pipeline-form", class: "form-horizontal js-new-pipeline-form js-requires-input" do | ||||
| = form_for @pipeline, url: namespace_project_pipelines_path(@project.namespace, @project), html: { id: "new-pipeline-form", class: "form-horizontal js-new-pipeline-form js-requires-input" } do | ||||
|   = form_errors(@pipeline) | ||||
|   .form-group | ||||
|     = label_tag :ref, 'Create for', class: 'control-label' | ||||
|     .col-sm-10 | ||||
|  |  | |||
|  | @ -126,12 +126,19 @@ describe "Pipelines" do | |||
|     before { visit new_namespace_project_pipeline_path(project.namespace, project) } | ||||
| 
 | ||||
|     context 'for valid commit' do | ||||
|       before do | ||||
|         fill_in('Create for', with: 'master') | ||||
|         stub_ci_commit_to_return_yaml_file | ||||
|       before { fill_in('Create for', with: 'master') } | ||||
| 
 | ||||
|       context 'with gitlab-ci.yml' do | ||||
|         before { stub_ci_commit_to_return_yaml_file } | ||||
| 
 | ||||
|         it { expect{ click_on 'Create pipeline' }.to change{ Ci::Commit.count }.by(1) } | ||||
|       end | ||||
| 
 | ||||
|       it { expect{ click_on 'Create pipeline' }.to change{ Ci::Commit.count }.by(1) } | ||||
|       context 'without gitlab-ci.yml' do | ||||
|         before { click_on 'Create pipeline' } | ||||
| 
 | ||||
|         it { expect(page).to have_content('Missing .gitlab-ci.yml file') } | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'for invalid commit' do | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue