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:
Diffstat (limited to 'app/models/ci/build.rb')
-rw-r--r--app/models/ci/build.rb59
1 files changed, 46 insertions, 13 deletions
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 0bb93a68470..e56f3d2536c 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -15,11 +15,18 @@ module Ci
extend ::Gitlab::Utils::Override
+ self.allow_legacy_sti_class = true
+
belongs_to :project, inverse_of: :builds
belongs_to :runner
belongs_to :trigger_request
belongs_to :erased_by, class_name: 'User'
- belongs_to :pipeline, class_name: 'Ci::Pipeline', foreign_key: :commit_id, inverse_of: :builds
+ belongs_to :pipeline,
+ ->(build) { in_partition(build) },
+ class_name: 'Ci::Pipeline',
+ foreign_key: :commit_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :builds
RUNNER_FEATURES = {
upload_multiple_artifacts: -> (build) { build.publishes_artifacts_reports? },
@@ -38,7 +45,12 @@ module Ci
has_one :pending_state, class_name: 'Ci::BuildPendingState', foreign_key: :build_id, inverse_of: :build
has_one :queuing_entry, class_name: 'Ci::PendingBuild', foreign_key: :build_id, inverse_of: :build
has_one :runtime_metadata, class_name: 'Ci::RunningBuild', foreign_key: :build_id, inverse_of: :build
- has_many :trace_chunks, class_name: 'Ci::BuildTraceChunk', foreign_key: :build_id, inverse_of: :build
+ has_many :trace_chunks,
+ ->(build) { in_partition(build) },
+ class_name: 'Ci::BuildTraceChunk',
+ foreign_key: :build_id,
+ inverse_of: :build,
+ partition_foreign_key: :partition_id
has_many :report_results, class_name: 'Ci::BuildReportResult', foreign_key: :build_id, inverse_of: :build
has_one :namespace, through: :project
@@ -48,7 +60,12 @@ module Ci
# Details: https://gitlab.com/gitlab-org/gitlab/-/issues/24644#note_689472685
has_many :job_artifacts, class_name: 'Ci::JobArtifact', foreign_key: :job_id, dependent: :destroy, inverse_of: :job # rubocop:disable Cop/ActiveRecordDependent
has_many :job_variables, class_name: 'Ci::JobVariable', foreign_key: :job_id, inverse_of: :job
- has_many :job_annotations, class_name: 'Ci::JobAnnotation', foreign_key: :job_id, inverse_of: :job
+ has_many :job_annotations,
+ ->(build) { in_partition(build) },
+ class_name: 'Ci::JobAnnotation',
+ foreign_key: :job_id,
+ partition_foreign_key: :partition_id,
+ inverse_of: :job
has_many :sourced_pipelines, class_name: 'Ci::Sources::Pipeline', foreign_key: :source_job_id, inverse_of: :build
has_many :pages_deployments, foreign_key: :ci_build_id, inverse_of: :ci_build
@@ -57,7 +74,12 @@ module Ci
has_one :"job_artifacts_#{key}", -> { where(file_type: value) }, class_name: 'Ci::JobArtifact', foreign_key: :job_id, inverse_of: :job
end
- has_one :runner_manager_build, class_name: 'Ci::RunnerManagerBuild', foreign_key: :build_id, inverse_of: :build,
+ has_one :runner_manager_build,
+ ->(build) { in_partition(build) },
+ class_name: 'Ci::RunnerManagerBuild',
+ foreign_key: :build_id,
+ inverse_of: :build,
+ partition_foreign_key: :partition_id,
autosave: true
has_one :runner_manager, foreign_key: :runner_machine_id, through: :runner_manager_build, class_name: 'Ci::RunnerManager'
@@ -89,11 +111,6 @@ module Ci
validates :coverage, numericality: true, allow_blank: true
validates :ref, presence: true
- scope :not_interruptible, -> do
- joins(:metadata)
- .where.not(Ci::BuildMetadata.table_name => { id: Ci::BuildMetadata.scoped_build.with_interruptible.select(:id) })
- end
-
scope :unstarted, -> { where(runner_id: nil) }
scope :with_any_artifacts, -> do
@@ -179,6 +196,10 @@ module Ci
scope :without_coverage, -> { where(coverage: nil) }
scope :with_coverage_regex, -> { where.not(coverage_regex: nil) }
+ scope :in_merge_request, ->(merge_request) do
+ joins(:pipeline).where(Ci::Pipeline.arel_table[:merge_request_id].eq(merge_request))
+ end
+
acts_as_taggable
add_authentication_token_field :token,
@@ -210,7 +231,11 @@ module Ci
yaml_variables when environment coverage_regex
description tag_list protected needs_attributes
job_variables_attributes resource_group scheduling_type
- ci_stage partition_id id_tokens].freeze
+ ci_stage partition_id id_tokens interruptible].freeze
+ end
+
+ def supported_keyset_orderings
+ { id: [:desc] }
end
end
@@ -358,6 +383,10 @@ module Ci
end
end
+ def self.ids_in_merge_request(merge_request_ids)
+ in_merge_request(merge_request_ids).pluck(:id)
+ end
+
def build_matcher
strong_memoize(:build_matcher) do
Gitlab::Ci::Matching::BuildMatcher.new({
@@ -700,13 +729,17 @@ module Ci
end
def artifacts_public?
- return true unless Feature.enabled?(:non_public_artifacts, type: :development)
+ return true if job_artifacts_archive.nil? # To backward compatibility return true if no artifacts found
+
+ job_artifacts_archive.public_access?
+ end
+ def artifact_is_public_in_config?
artifacts_public = options.dig(:artifacts, :public)
return true if artifacts_public.nil? # Default artifacts:public to true
- options.dig(:artifacts, :public)
+ artifacts_public
end
def artifacts_metadata_entry(path, **options)
@@ -918,7 +951,7 @@ module Ci
job_artifacts.all_reports
end
- # Consider this object to have a structural integrity problems
+ # Consider this object to have an unknown job problem
def doom!
transaction do
now = Time.current