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/release.rb')
-rw-r--r--app/models/release.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/app/models/release.rb b/app/models/release.rb
index 6830f6e8480..1cd623e1254 100644
--- a/app/models/release.rb
+++ b/app/models/release.rb
@@ -25,6 +25,9 @@ class Release < ApplicationRecord
accepts_nested_attributes_for :links, allow_destroy: true
before_create :set_released_at
+ # TODO: Remove this callback after catalog_resource.released_at is denormalized. See https://gitlab.com/gitlab-org/gitlab/-/issues/430117.
+ after_update :update_catalog_resource, if: -> { project.catalog_resource && saved_change_to_released_at? }
+ after_destroy :update_catalog_resource, if: -> { project.catalog_resource }
validates :project, :tag, presence: true
validates :author_id, presence: true, on: :create
@@ -35,6 +38,10 @@ class Release < ApplicationRecord
validates_associated :milestone_releases, message: -> (_, obj) { obj[:value].map(&:errors).map(&:full_messages).join(",") }
validates :links, nested_attributes_duplicates: { scope: :release, child_attributes: %i[name url filepath] }
+ # All releases should have tags, but because of existing invalid data, we need a work around so that presenters don't
+ # fail to generate URLs on release related pages
+ scope :tagged, -> { where.not(tag: [nil, '']) }
+
scope :sorted, -> { order(released_at: :desc) }
scope :preloaded, -> {
includes(
@@ -47,6 +54,8 @@ class Release < ApplicationRecord
scope :recent, -> { sorted.limit(MAX_NUMBER_TO_DISPLAY) }
scope :without_evidence, -> { left_joins(:evidences).where(::Releases::Evidence.arel_table[:id].eq(nil)) }
scope :released_within_2hrs, -> { where(released_at: Time.zone.now - 1.hour..Time.zone.now + 1.hour) }
+ scope :for_projects, ->(projects) { where(project_id: projects) }
+ scope :by_tag, ->(tag) { where(tag: tag) }
# Sorting
scope :order_created, -> { reorder(created_at: :asc) }
@@ -168,6 +177,10 @@ class Release < ApplicationRecord
order_created_desc
end
end
+
+ def update_catalog_resource
+ project.catalog_resource.update_latest_released_at!
+ end
end
Release.prepend_mod_with('Release')