Class: Ci::Catalog::Resources::Version

Inherits:
ApplicationRecord show all
Includes:
BulkInsertableAssociations, CacheMarkdownField, SemanticVersionable
Defined in:
app/models/ci/catalog/resources/version.rb

Overview

This class represents a CI/CD Catalog resource version. Only versions which contain valid CI components are included in this table.

Constant Summary

Constants included from CacheMarkdownField

CacheMarkdownField::INVALIDATED_BY

Constants inherited from ApplicationRecord

ApplicationRecord::MAX_PLUCK

Constants included from HasCheckConstraints

HasCheckConstraints::NOT_NULL_CHECK_PATTERN

Constants included from ResetOnColumnErrors

ResetOnColumnErrors::MAX_RESET_PERIOD

Instance Attribute Summary

Attributes included from CacheMarkdownField

#skip_markdown_cache_validation

Class Method Summary collapse

Instance Method Summary collapse

Methods included from CacheMarkdownField

#attribute_invalidated?, #banzai_render_context, #cached_html_for, #cached_html_up_to_date?, #can_cache_field?, #invalidated_markdown_cache?, #latest_cached_markdown_version, #mentionable_attributes_changed?, #mentioned_filtered_user_ids_for, #parent_user, #refresh_markdown_cache, #refresh_markdown_cache!, #rendered_field_content, #skip_project_check?, #store_mentions!, #store_mentions?, #store_mentions_after_commit?, #updated_cached_html_for

Methods included from BulkInsertableAssociations

#bulk_insert_associations!, bulk_inserts_enabled?, with_bulk_insert

Methods inherited from ApplicationRecord

===, cached_column_list, #create_or_load_association, current_transaction, declarative_enum, default_select_columns, delete_all_returning, #deleted_from_database?, id_in, id_not_in, iid_in, nullable_column?, primary_key_in, #readable_by?, safe_ensure_unique, safe_find_or_create_by, safe_find_or_create_by!, #to_ability_name, underscore, where_exists, where_not_exists, with_fast_read_statement_timeout, without_order

Methods included from Organizations::Sharding

#sharding_organization

Methods included from ResetOnColumnErrors

#reset_on_union_error, #reset_on_unknown_attribute_error

Methods included from Gitlab::SensitiveSerializableHash

#serializable_hash

Class Method Details

.latest(major = nil, minor = nil) ⇒ Object

Raises:

  • (ArgumentError)


42
43
44
45
46
47
48
49
50
51
52
# File 'app/models/ci/catalog/resources/version.rb', line 42

def latest(major = nil, minor = nil)
  raise ArgumentError, 'semver minor version used without major version' if minor.present? &&
    major.blank?

  relation = with_semver
  relation = relation.without_prerelease
  relation = relation.where(semver_major: major) if major
  relation = relation.where(semver_minor: minor) if minor

  relation.order_by_semantic_version_desc.first
end

.versions_for_catalog_resources(catalog_resources) ⇒ Object



54
55
56
57
58
59
60
61
# File 'app/models/ci/catalog/resources/version.rb', line 54

def versions_for_catalog_resources(catalog_resources)
  return none if catalog_resources.empty?

  for_catalog_resources(catalog_resources)
    .with_semver
    .includes(:components, project: { namespace: :route })
    .order_by_semantic_version_desc
end

Instance Method Details

#commitObject



68
69
70
# File 'app/models/ci/catalog/resources/version.rb', line 68

def commit
  project.commit_by(oid: sha)
end

#nameObject



64
65
66
# File 'app/models/ci/catalog/resources/version.rb', line 64

def name
  semver.to_s
end

#pathObject



72
73
74
# File 'app/models/ci/catalog/resources/version.rb', line 72

def path
  Gitlab::Routing.url_helpers.project_tag_path(project, name)
end

#readmeObject



76
77
78
79
80
# File 'app/models/ci/catalog/resources/version.rb', line 76

def readme
  return unless project.repo_exists?

  project.repository.tree(sha).readme&.data
end

#sync_with_release!Object



82
83
84
85
# File 'app/models/ci/catalog/resources/version.rb', line 82

def sync_with_release!
  sync_with_release
  save!
end