Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomasz Maczukin <tomasz@maczukin.pl>2016-03-29 16:34:18 +0300
committerTomasz Maczukin <tomasz@maczukin.pl>2016-04-20 12:53:39 +0300
commit38a1378e631994ded578a6cfafd0648d22fdf263 (patch)
tree7d1149de8ddabfa7f46d3c8fba821671f01f01dc
parentd7127890546c317bd3469f18b9fb5e3a81554d48 (diff)
Add incremental build trace update API
-rw-r--r--app/models/ci/build.rb14
-rw-r--r--lib/ci/api/builds.rb9
-rw-r--r--spec/requests/ci/api/builds_spec.rb22
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') }