diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/gitlab/badge/build.rb | 40 | ||||
| -rw-r--r-- | lib/gitlab/badge/build/metadata.rb | 36 | ||||
| -rw-r--r-- | lib/gitlab/badge/build/template.rb | 63 | 
3 files changed, 111 insertions, 28 deletions
| diff --git a/lib/gitlab/badge/build.rb b/lib/gitlab/badge/build.rb index e5e9fab3f5c..1de721a2269 100644 --- a/lib/gitlab/badge/build.rb +++ b/lib/gitlab/badge/build.rb @@ -4,42 +4,26 @@ module Gitlab      # Build badge      #      class Build -      include Gitlab::Application.routes.url_helpers -      include ActionView::Helpers::AssetTagHelper -      include ActionView::Helpers::UrlHelper +      delegate :key_text, :value_text, to: :template        def initialize(project, ref) -        @project, @ref = project, ref -        @image = ::Ci::ImageForBuildService.new.execute(project, ref: ref) +        @project = project +        @ref = ref +        @sha = @project.commit(@ref).try(:sha)        end -      def type -        'image/svg+xml' +      def status +        @project.pipelines +          .where(sha: @sha, ref: @ref) +          .status || 'unknown'        end -      def data -        File.read(@image[:path]) +      def metadata +        @metadata ||= Build::Metadata.new(@project, @ref)        end -      def to_s -        @image[:name].sub(/\.svg$/, '') -      end - -      def to_html -        link_to(image_tag(image_url, alt: 'build status'), link_url) -      end - -      def to_markdown -        "[](#{link_url})" -      end - -      def image_url -        build_namespace_project_badges_url(@project.namespace, -                                           @project, @ref, format: :svg) -      end - -      def link_url -        namespace_project_commits_url(@project.namespace, @project, id: @ref) +      def template +        @template ||= Build::Template.new(status)        end      end    end diff --git a/lib/gitlab/badge/build/metadata.rb b/lib/gitlab/badge/build/metadata.rb new file mode 100644 index 00000000000..553ef8d7b16 --- /dev/null +++ b/lib/gitlab/badge/build/metadata.rb @@ -0,0 +1,36 @@ +module Gitlab +  module Badge +    class Build +      ## +      # Class that describes build badge metadata +      # +      class Metadata +        include Gitlab::Application.routes.url_helpers +        include ActionView::Helpers::AssetTagHelper +        include ActionView::Helpers::UrlHelper + +        def initialize(project, ref) +          @project = project +          @ref = ref +        end + +        def to_html +          link_to(image_tag(image_url, alt: 'build status'), link_url) +        end + +        def to_markdown +          "[](#{link_url})" +        end + +        def image_url +          build_namespace_project_badges_url(@project.namespace, +                                             @project, @ref, format: :svg) +        end + +        def link_url +          namespace_project_commits_url(@project.namespace, @project, id: @ref) +        end +      end +    end +  end +end diff --git a/lib/gitlab/badge/build/template.rb b/lib/gitlab/badge/build/template.rb new file mode 100644 index 00000000000..deba3b669b3 --- /dev/null +++ b/lib/gitlab/badge/build/template.rb @@ -0,0 +1,63 @@ +module Gitlab +  module Badge +    class Build +      ## +      # Class that represents a build badge template. +      # +      # Template object will be passed to badge.svg.erb template. +      # +      class Template +        STATUS_COLOR = { +          success: '#4c1', +          failed: '#e05d44', +          running: '#dfb317', +          pending: '#dfb317', +          canceled: '#9f9f9f', +          skipped: '#9f9f9f', +          unknown: '#9f9f9f' +        } + +        def initialize(status) +          @status = status +        end + +        def key_text +          'build' +        end + +        def value_text +          @status +        end + +        def key_width +          38 +        end + +        def value_width +          54 +        end + +        def key_color +          '#555' +        end + +        def value_color +          STATUS_COLOR[@status.to_sym] || +            STATUS_COLOR[:unknown] +        end + +        def key_text_anchor +          key_width / 2 +        end + +        def value_text_anchor +          key_width + (value_width / 2) +        end + +        def width +          key_width + value_width +        end +      end +    end +  end +end | 
