提交 0a39a3d4 编写于 作者: K Kamil Trzciński

Persist `needs:` validation as config error

In case when `needs:` is missing, but when requested by service,
we would not save the pipeline with config_error.

This makes it explicit that we want to persist the error
as `config_error` failure reason.
上级 b76bc276
---
title: Persist `needs:` validation as config error
merge_request:
author:
type: fixed
...@@ -5,7 +5,12 @@ module Gitlab ...@@ -5,7 +5,12 @@ module Gitlab
module Pipeline module Pipeline
module Chain module Chain
module Helpers module Helpers
def error(message) def error(message, config_error: false)
if config_error && command.save_incompleted
pipeline.yaml_errors = message
pipeline.drop!(:config_error)
end
pipeline.errors.add(:base, message) pipeline.errors.add(:base, message)
end end
end end
......
...@@ -26,7 +26,7 @@ module Gitlab ...@@ -26,7 +26,7 @@ module Gitlab
# Gather all runtime build/stage errors # Gather all runtime build/stage errors
# #
if seeds_errors = pipeline.stage_seeds.flat_map(&:errors).compact.presence if seeds_errors = pipeline.stage_seeds.flat_map(&:errors).compact.presence
return error(seeds_errors.join("\n")) return error(seeds_errors.join("\n"), config_error: true)
end end
## ##
......
...@@ -1140,10 +1140,26 @@ describe Ci::CreatePipelineService do ...@@ -1140,10 +1140,26 @@ describe Ci::CreatePipelineService do
context 'when pipeline on feature is created' do context 'when pipeline on feature is created' do
let(:ref_name) { 'refs/heads/feature' } let(:ref_name) { 'refs/heads/feature' }
it 'does not create a pipeline as test_a depends on build_a' do context 'when save_on_errors is enabled' do
expect(pipeline).not_to be_persisted let(:pipeline) { execute_service(save_on_errors: true) }
expect(pipeline.builds).to be_empty
expect(pipeline.errors[:base]).to contain_exactly("test_a: needs 'build_a'") it 'does create a pipeline as test_a depends on build_a' do
expect(pipeline).to be_persisted
expect(pipeline.builds).to be_empty
expect(pipeline.yaml_errors).to eq("test_a: needs 'build_a'")
expect(pipeline.errors[:base]).to contain_exactly("test_a: needs 'build_a'")
end
end
context 'when save_on_errors is disabled' do
let(:pipeline) { execute_service(save_on_errors: false) }
it 'does not create a pipeline as test_a depends on build_a' do
expect(pipeline).not_to be_persisted
expect(pipeline.builds).to be_empty
expect(pipeline.yaml_errors).to be_nil
expect(pipeline.errors[:base]).to contain_exactly("test_a: needs 'build_a'")
end
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册