diff options
author | Tomasz Maczukin <tomasz@maczukin.pl> | 2016-03-29 15:34:18 +0200 |
---|---|---|
committer | Tomasz Maczukin <tomasz@maczukin.pl> | 2016-04-20 11:53:39 +0200 |
commit | 38a1378e631994ded578a6cfafd0648d22fdf263 (patch) | |
tree | 7d1149de8ddabfa7f46d3c8fba821671f01f01dc | |
parent | d7127890546c317bd3469f18b9fb5e3a81554d48 (diff) | |
download | gitlab-ce-38a1378e631994ded578a6cfafd0648d22fdf263.tar.gz |
Add incremental build trace update API
-rw-r--r-- | app/models/ci/build.rb | 14 | ||||
-rw-r--r-- | lib/ci/api/builds.rb | 9 | ||||
-rw-r--r-- | spec/requests/ci/api/builds_spec.rb | 22 |
3 files changed, 44 insertions, 1 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 85ef0523b31..16abdb143bb 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -231,11 +231,23 @@ module Ci end def trace=(trace) + recreate_trace_dir + File.write(path_to_trace, trace) + end + + def recreate_trace_dir unless Dir.exists?(dir_to_trace) FileUtils.mkdir_p(dir_to_trace) end + end + private :recreate_trace_dir - File.write(path_to_trace, trace) + def append_trace(trace_part) + recreate_trace_dir + + File.open(path_to_trace, 'a') do |f| + f.write(trace_part) + end end def dir_to_trace diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb index 2e9a5d311f9..61e15675535 100644 --- a/lib/ci/api/builds.rb +++ b/lib/ci/api/builds.rb @@ -50,6 +50,15 @@ module Ci end end + patch ":id/trace.txt" do + authenticate_runner! + update_runner_last_contact + build = Ci::Build.where(runner_id: current_runner.id).running.find(params[:id]) + forbidden!('Build has been erased!') if build.erased? + + build.append_trace(params[:trace_part]) + end + # Authorize artifacts uploading for build - Runners only # # Parameters: diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb index 57d7eb927fd..4da07fcd116 100644 --- a/spec/requests/ci/api/builds_spec.rb +++ b/spec/requests/ci/api/builds_spec.rb @@ -156,6 +156,28 @@ describe Ci::API::API do end end + describe 'PATCH /builds/:id/trace.txt' do + let(:build) { create(:ci_build, :trace, runner_id: runner.id) } + + before do + build.run! + patch ci_api("/builds/#{build.id}/trace.txt"), trace_part: ' appended', token: runner.token + end + + it 'should append trace part to the trace' do + expect(response.status).to eq 200 + expect(build.reload.trace).to eq 'BUILD TRACE appended' + end + + context 'when build has been erased' do + let(:build) { create(:ci_build, runner_id: runner.id, erased_at: Time.now) } + + it 'should respond with forbidden' do + expect(response.status).to eq 403 + end + end + end + context "Artifacts" do let(:file_upload) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') } let(:file_upload2) { fixture_file_upload(Rails.root + 'spec/fixtures/dk.png', 'image/gif') } |