diff options
Diffstat (limited to 'lib/gitlab/ci/badge/release')
-rw-r--r-- | lib/gitlab/ci/badge/release/latest_release.rb | 42 | ||||
-rw-r--r-- | lib/gitlab/ci/badge/release/metadata.rb | 25 | ||||
-rw-r--r-- | lib/gitlab/ci/badge/release/template.rb | 44 |
3 files changed, 111 insertions, 0 deletions
diff --git a/lib/gitlab/ci/badge/release/latest_release.rb b/lib/gitlab/ci/badge/release/latest_release.rb new file mode 100644 index 00000000000..e73bb2a912a --- /dev/null +++ b/lib/gitlab/ci/badge/release/latest_release.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +module Gitlab::Ci + module Badge + module Release + class LatestRelease < Badge::Base + attr_reader :project, :release, :customization + + def initialize(project, current_user, opts: {}) + @project = project + @customization = { + key_width: opts[:key_width] ? opts[:key_width].to_i : nil, + key_text: opts[:key_text] + } + + # In the future, we should support `order_by=semver` for showing the + # latest release based on Semantic Versioning. + @release = ::ReleasesFinder.new( + project, + current_user, + order_by: opts[:order_by]).execute.first + end + + def entity + 'Latest Release' + end + + def tag + @release&.tag + end + + def metadata + @metadata ||= Release::Metadata.new(self) + end + + def template + @template ||= Release::Template.new(self) + end + end + end + end +end diff --git a/lib/gitlab/ci/badge/release/metadata.rb b/lib/gitlab/ci/badge/release/metadata.rb new file mode 100644 index 00000000000..e02959b5741 --- /dev/null +++ b/lib/gitlab/ci/badge/release/metadata.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +module Gitlab::Ci + module Badge + module Release + class Metadata < Badge::Metadata + def initialize(badge) + @project = badge.project + end + + def title + 'Latest Release' + end + + def image_url + release_project_badges_url(@project, format: :svg) + end + + def link_url + project_releases_url(@project) + end + end + end + end +end diff --git a/lib/gitlab/ci/badge/release/template.rb b/lib/gitlab/ci/badge/release/template.rb new file mode 100644 index 00000000000..65bff4371cf --- /dev/null +++ b/lib/gitlab/ci/badge/release/template.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module Gitlab::Ci + module Badge + module Release + # Template object will be passed to badge.svg.erb template. + class Template < Badge::Template + STATUS_COLOR = { + latest: '#3076af', + none: '#e05d44' + }.freeze + KEY_WIDTH_DEFAULT = 90 + VALUE_WIDTH_DEFAULT = 54 + + def initialize(badge) + @entity = badge.entity + @tag = badge.tag || "none" + @key_width = badge.customization.dig(:key_width) + @key_text = badge.customization.dig(:key_text) + end + + def key_text + @key_text || @entity.to_s + end + + def key_width + @key_width || KEY_WIDTH_DEFAULT + end + + def value_text + @tag.to_s + end + + def value_width + VALUE_WIDTH_DEFAULT + end + + def value_color + STATUS_COLOR[@tag.to_sym] || STATUS_COLOR[:latest] + end + end + end + end +end |