From 54ddcad2ae9f9ba809dac2dacf7ef4f402e230bf Mon Sep 17 00:00:00 2001 From: drew Date: Tue, 13 May 2025 11:51:53 -0400 Subject: [PATCH 1/3] Move Build timeout presentation from MetadataEntity to BuildEntity --- .rubocop_todo/gitlab/namespaced_class.yml | 1 - app/presenters/ci/build_metadata_presenter.rb | 22 ------------------- app/presenters/ci/build_presenter.rb | 18 +++++++++++++++ app/serializers/build_details_entity.rb | 6 ++++- app/serializers/build_metadata_entity.rb | 8 ------- 5 files changed, 23 insertions(+), 32 deletions(-) delete mode 100644 app/presenters/ci/build_metadata_presenter.rb delete mode 100644 app/serializers/build_metadata_entity.rb diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index cd985ec2b9715e..efe53367838ab7 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -455,7 +455,6 @@ Gitlab/NamespacedClass: - 'app/serializers/build_artifact_entity.rb' - 'app/serializers/build_coverage_entity.rb' - 'app/serializers/build_details_entity.rb' - - 'app/serializers/build_metadata_entity.rb' - 'app/serializers/build_trace_entity.rb' - 'app/serializers/build_trace_serializer.rb' - 'app/serializers/cluster_entity.rb' diff --git a/app/presenters/ci/build_metadata_presenter.rb b/app/presenters/ci/build_metadata_presenter.rb deleted file mode 100644 index 7465e6daab045b..00000000000000 --- a/app/presenters/ci/build_metadata_presenter.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module Ci - class BuildMetadataPresenter < Gitlab::View::Presenter::Delegated - TIMEOUT_SOURCES = { - unknown_timeout_source: nil, - project_timeout_source: 'project', - runner_timeout_source: 'runner', - job_timeout_source: 'job' - }.freeze - - presents ::Ci::BuildMetadata, as: :metadata - - delegator_override :timeout_source - def timeout_source - return unless metadata.timeout_source? - - TIMEOUT_SOURCES[metadata.timeout_source.to_sym] || - metadata.timeout_source - end - end -end diff --git a/app/presenters/ci/build_presenter.rb b/app/presenters/ci/build_presenter.rb index 0ffce90121a37d..27356d00827697 100644 --- a/app/presenters/ci/build_presenter.rb +++ b/app/presenters/ci/build_presenter.rb @@ -4,6 +4,13 @@ module Ci class BuildPresenter < ProcessablePresenter presents ::Ci::Build, as: :build + TIMEOUT_SOURCE_LABELS = { + unknown_timeout_source: nil, + project_timeout_source: 'project', + runner_timeout_source: 'runner', + job_timeout_source: 'job' + }.freeze + def status_title(status = detailed_status) if auto_canceled? "Job is redundant and is auto-canceled by Pipeline ##{auto_canceled_by_id}" @@ -29,6 +36,17 @@ def failure_message callout_failure_message if build.failed? end + def timeout_human_readable + build.metadata&.timeout_human_readable + end + + def timeout_source + value = build.metadata&.timeout_source + return unless value + + TIMEOUT_SOURCE_LABELS[value.to_sym] + end + private def tooltip_for_badge(status) diff --git a/app/serializers/build_details_entity.rb b/app/serializers/build_details_entity.rb index df1d249ac894c9..376d9e1d986f28 100644 --- a/app/serializers/build_details_entity.rb +++ b/app/serializers/build_details_entity.rb @@ -8,9 +8,13 @@ class BuildDetailsEntity < Ci::JobEntity expose :stuck?, as: :stuck expose :user, using: UserEntity expose :runner, using: RunnerEntity - expose :metadata, using: BuildMetadataEntity expose :pipeline, using: Ci::PipelineEntity + expose :metadata do + expose :timeout_human_readable + expose :timeout_source + end + expose :deployment_status, if: ->(*) { build.deployment_job? } do expose :deployment_status, as: :status expose :persisted_environment, as: :environment do |build, options| diff --git a/app/serializers/build_metadata_entity.rb b/app/serializers/build_metadata_entity.rb deleted file mode 100644 index 6242ee8957d5c7..00000000000000 --- a/app/serializers/build_metadata_entity.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -class BuildMetadataEntity < Grape::Entity - expose :timeout_human_readable - expose :timeout_source do |metadata| - metadata.present.timeout_source - end -end -- GitLab From 65200008a35b7b9af61005d8ffdca1eb2d433df4 Mon Sep 17 00:00:00 2001 From: drew Date: Tue, 13 May 2025 12:57:17 -0400 Subject: [PATCH 2/3] Move timeout methods to Ci::Build --- app/models/ci/build.rb | 18 ++++++++++++++++++ app/presenters/ci/build_presenter.rb | 18 ------------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 8c6642112fee75..837151f710ed46 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -36,6 +36,13 @@ class Build < Ci::Processable partition_foreign_key: :partition_id, inverse_of: :builds + TIMEOUT_SOURCE_LABELS = { + unknown_timeout_source: nil, + project_timeout_source: 'project', + runner_timeout_source: 'runner', + job_timeout_source: 'job' + }.freeze + RUNNER_FEATURES = { upload_multiple_artifacts: ->(build) { build.publishes_artifacts_reports? }, refspecs: ->(build) { build.merge_request_ref? }, @@ -454,6 +461,17 @@ def exit_code=(value) ensure_metadata.exit_code = value.to_i.clamp(0, Gitlab::Database::MAX_SMALLINT_VALUE) end + def timeout_human_readable + build.metadata&.timeout_human_readable + end + + def timeout_source + value = build.metadata&.timeout_source + return unless value + + TIMEOUT_SOURCE_LABELS[value.to_sym] + end + def auto_retry_expected? failed? && auto_retry_allowed? end diff --git a/app/presenters/ci/build_presenter.rb b/app/presenters/ci/build_presenter.rb index 27356d00827697..0ffce90121a37d 100644 --- a/app/presenters/ci/build_presenter.rb +++ b/app/presenters/ci/build_presenter.rb @@ -4,13 +4,6 @@ module Ci class BuildPresenter < ProcessablePresenter presents ::Ci::Build, as: :build - TIMEOUT_SOURCE_LABELS = { - unknown_timeout_source: nil, - project_timeout_source: 'project', - runner_timeout_source: 'runner', - job_timeout_source: 'job' - }.freeze - def status_title(status = detailed_status) if auto_canceled? "Job is redundant and is auto-canceled by Pipeline ##{auto_canceled_by_id}" @@ -36,17 +29,6 @@ def failure_message callout_failure_message if build.failed? end - def timeout_human_readable - build.metadata&.timeout_human_readable - end - - def timeout_source - value = build.metadata&.timeout_source - return unless value - - TIMEOUT_SOURCE_LABELS[value.to_sym] - end - private def tooltip_for_badge(status) -- GitLab From 33d3b5aa8075f65228d52e71db9357cb428bc78f Mon Sep 17 00:00:00 2001 From: drew Date: Tue, 13 May 2025 13:56:00 -0400 Subject: [PATCH 3/3] Fix accidental extra reference --- app/models/ci/build.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 837151f710ed46..b538ecb2ec2c10 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -462,14 +462,11 @@ def exit_code=(value) end def timeout_human_readable - build.metadata&.timeout_human_readable + metadata&.timeout_human_readable end def timeout_source - value = build.metadata&.timeout_source - return unless value - - TIMEOUT_SOURCE_LABELS[value.to_sym] + metadata.try { |record| TIMEOUT_SOURCE_LABELS[record.timeout_source.to_sym] } end def auto_retry_expected? -- GitLab