parent
1d7c039072
commit
68f6c61cf6
|
@ -42,7 +42,7 @@ class CommitStatus < ActiveRecord::Base
|
|||
unknown_failure: nil,
|
||||
job_failure: 1,
|
||||
api_failure: 2,
|
||||
stuck_or_timeout_failure: 3,
|
||||
stuck_or_timeout_failure: 3
|
||||
}
|
||||
|
||||
state_machine :status do
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Implement `failure_reason` on `ci_builds`
|
||||
merge_request: 13937
|
||||
author:
|
||||
type: added
|
|
@ -114,6 +114,8 @@ module API
|
|||
requires :id, type: Integer, desc: %q(Job's ID)
|
||||
optional :trace, type: String, desc: %q(Job's full trace)
|
||||
optional :state, type: String, desc: %q(Job's status: success, failed)
|
||||
optional :failure_reason, type: String, values: CommitStatus.failure_reasons.keys,
|
||||
desc: %q(Job's failure_reason)
|
||||
end
|
||||
put '/:id' do
|
||||
job = authenticate_job!
|
||||
|
@ -127,7 +129,11 @@ module API
|
|||
when 'success'
|
||||
job.success
|
||||
when 'failed'
|
||||
job.drop(:job_failure)
|
||||
if params[:failure_reason]
|
||||
job.drop(params[:failure_reason].to_sym)
|
||||
else
|
||||
job.drop(:job_failure)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -278,6 +278,7 @@ CommitStatus:
|
|||
- auto_canceled_by_id
|
||||
- retried
|
||||
- protected
|
||||
- failure_reason
|
||||
Ci::Variable:
|
||||
- id
|
||||
- project_id
|
||||
|
|
|
@ -445,22 +445,20 @@ describe CommitStatus do
|
|||
end
|
||||
|
||||
describe 'set failure_reason when drop' do
|
||||
let(:build) { create(:ci_build, :created) }
|
||||
let(:commit_status) { create(:commit_status, :created) }
|
||||
|
||||
before do
|
||||
build.drop!(reason)
|
||||
end
|
||||
subject { commit_status.drop!(reason); commit_status }
|
||||
|
||||
context 'when failure_reason is nil' do
|
||||
let(:reason) { }
|
||||
|
||||
it { expect(build).to be_unknown_failure }
|
||||
it { is_expected.to be_unknown_failure }
|
||||
end
|
||||
|
||||
context 'when failure_reason is job_failure' do
|
||||
let(:reason) { :job_failure }
|
||||
|
||||
it { expect(build).to be_job_failure }
|
||||
it { is_expected.to be_job_failure }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -143,7 +143,7 @@ describe API::CommitStatuses do
|
|||
expect(json_response['target_url']).to be_nil
|
||||
expect(json_response['description']).to be_nil
|
||||
if status == 'failed'
|
||||
expect(CommitStatus.find(json_response['id'])).to be_api_failure
|
||||
expect(json_response['failure_reason']).to eq('api_failure')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -636,6 +636,15 @@ describe API::Runner do
|
|||
expect(job.reload.status).to eq 'failed'
|
||||
expect(job).to be_job_failure
|
||||
end
|
||||
|
||||
context 'when failure_reason is given' do
|
||||
it 'mark job as failed' do
|
||||
update_job(state: 'failed', failure_reason: 'stuck_or_timeout_failure')
|
||||
|
||||
expect(job.reload.status).to eq 'failed'
|
||||
expect(job).to be_stuck_or_timeout_failure
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when tace is given' do
|
||||
|
|
|
@ -22,7 +22,7 @@ describe Ci::RetryBuildService do
|
|||
%i[type lock_version target_url base_tags
|
||||
commit_id deployments erased_by_id last_deployment project_id
|
||||
runner_id tag_taggings taggings tags trigger_request_id
|
||||
user_id auto_canceled_by_id retried].freeze
|
||||
user_id auto_canceled_by_id retried failure_reason].freeze
|
||||
|
||||
shared_examples 'build duplication' do
|
||||
let(:stage) do
|
||||
|
|
Loading…
Reference in New Issue