- Allow runner API to pass failure_reason

- Fix spec
This commit is contained in:
Shinya Maeda 2017-09-01 16:52:11 +09:00
parent 1d7c039072
commit 68f6c61cf6
8 changed files with 29 additions and 10 deletions

View File

@ -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

View File

@ -0,0 +1,5 @@
---
title: Implement `failure_reason` on `ci_builds`
merge_request: 13937
author:
type: added

View File

@ -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

View File

@ -278,6 +278,7 @@ CommitStatus:
- auto_canceled_by_id
- retried
- protected
- failure_reason
Ci::Variable:
- id
- project_id

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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