Commit 68f6c61c authored by Shinya Maeda's avatar Shinya Maeda

- Allow runner API to pass failure_reason

- Fix spec
parent 1d7c0390
......@@ -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
......
---
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,9 +129,13 @@ module API
when 'success'
job.success
when 'failed'
if params[:failure_reason]
job.drop(params[:failure_reason].to_sym)
else
job.drop(:job_failure)
end
end
end
desc 'Appends a patch to the job trace' do
http_codes [[202, 'Trace was patched'],
......
......@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment