Refactor build_metadata

This commit is contained in:
Tomasz Maczukin 2018-03-22 17:52:28 +01:00
parent 7d7b0688b8
commit 973e4030b1
No known key found for this signature in database
GPG key ID: 7E9EB2E4B0F625CD
6 changed files with 25 additions and 28 deletions

View file

@ -44,10 +44,16 @@
runnerId() {
return `#${this.job.runner.id}`;
},
hasTimeout() {
return this.job.metadata != null && this.job.metadata.timeout_human_readable !== '';
},
timeout() {
let t = `${this.job.metadata.timeout_human_readable}`;
if (this.job.metadata == null) {
return '';
}
if (this.job.metadata.timeout_source != null) {
let t = this.job.metadata.timeout_human_readable;
if (this.job.metadata.timeout_source !== '') {
t += ` (from ${this.job.metadata.timeout_source})`;
}
@ -130,7 +136,7 @@
/>
<detail-row
class="js-job-timeout"
v-if="job.metadata.timeout_human_readable"
v-if="hasTimeout"
title="Timeout"
:help-url="runnerHelpUrl"
:value="timeout"

View file

@ -162,7 +162,7 @@ module Ci
end
def ensure_metadata
metadata || build_metadata
metadata || build_metadata(project: project)
end
def detailed_status(current_user)

View file

@ -11,9 +11,9 @@ module Ci
belongs_to :build, class_name: 'Ci::Build'
belongs_to :project
chronic_duration_attr_reader :timeout_human_readable, :timeout
validates :project, presence: true
after_initialize :set_project_id
chronic_duration_attr_reader :timeout_human_readable, :timeout
enum timeout_source: {
unknown_timeout_source: 1,
@ -24,19 +24,11 @@ module Ci
def save_timeout_state!
return unless build.runner.present?
project_timeout = build.project&.build_timeout
project_timeout = project&.build_timeout
timeout = [project_timeout, build.runner.maximum_timeout].compact.min
timeout_source = timeout < project_timeout ? :runner_timeout_source : :project_timeout_source
update_attributes(timeout: timeout, timeout_source: timeout_source)
end
private
def set_project_id
return unless self.project_id.nil?
self.project_id = build&.project&.id
update!(timeout: timeout, timeout_source: timeout_source)
end
end
end

View file

@ -5,9 +5,7 @@ class BuildDetailsEntity < JobEntity
expose :runner, using: RunnerEntity
expose :pipeline, using: PipelineEntity
expose :metadata, using: BuildMetadataEntity do |build|
build.ensure_metadata
end
expose :metadata, using: BuildMetadataEntity
expose :erased_by, if: -> (*) { build.erased? }, using: UserEntity
expose :erase_path, if: -> (*) { build.erasable? && can?(current_user, :erase_build, build) } do |build|

View file

@ -0,0 +1,9 @@
FactoryBot.define do
factory :ci_build_metadata, class: Ci::BuildMetadata do
build factory: :ci_build
after(:build) do |build_metadata, _|
build_metadata.project ||= build_metadata.build.project
end
end
end

View file

@ -13,15 +13,7 @@ describe Ci::BuildMetadata do
end
let(:build) { create(:ci_build, pipeline: pipeline) }
let(:build_metadata) { described_class.create(build: build) }
context 'when creating' do
subject { build_metadata.project_id }
it 'saves project_id' do
is_expected.to eq(project.id)
end
end
let(:build_metadata) { create(:ci_build_metadata, build: build) }
describe '#save_timeout_state!' do
subject { build_metadata }