From 8fe37da6cb648b73e618861b9672eb0cf34247d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Trzci=C5=84ski?= Date: Mon, 30 Jul 2018 17:26:56 +0200 Subject: [PATCH] More clever way for testing runner features --- app/models/ci/build.rb | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 6d38f899390..db5ad300a12 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -15,6 +15,10 @@ module Ci has_many :deployments, as: :deployable + RUNNER_FEATURES = { + upload_multiple_artifacts: -> (build) { build.publishes_artifacts_reports? } + }.freeze + has_one :last_deployment, -> { order('deployments.id DESC') }, as: :deployable, class_name: 'Deployment' has_many :trace_sections, class_name: 'Ci::BuildTraceSection' has_many :trace_chunks, class_name: 'Ci::BuildTraceChunk', foreign_key: :build_id @@ -337,12 +341,6 @@ module Ci { trace_sections: true } end - def runner_required_features - features = [] - features << :upload_multiple_artifacts if publishes_artifacts_reports? - features - end - def merge_request return @merge_request if defined?(@merge_request) @@ -594,14 +592,22 @@ module Ci true end + def runner_required_feature_names + strong_memoize(:runner_required_feature_names) do + RUNNER_FEATURES.select do |feature, method| + method.call(self) + end.keys + end + end + def supported_runner?(features) - runner_required_features.all? do |feature_name| + runner_required_feature_names.all? do |feature_name| features&.dig(feature_name) end end def publishes_artifacts_reports? - options.dig(:artifacts, :reports).any? + options&.dig(:artifacts, :reports)&.any? end def hide_secrets(trace)