diff options
-rw-r--r-- | app/serializers/status_entity.rb | 11 | ||||
-rw-r--r-- | lib/gitlab/ci/status/canceled.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/created.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/failed.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/manual.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/pending.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/running.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/skipped.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/ci/status/success.rb | 2 | ||||
-rw-r--r-- | lib/gitlab/favicon.rb | 18 | ||||
-rw-r--r-- | spec/lib/gitlab/favicon_spec.rb | 13 |
11 files changed, 37 insertions, 21 deletions
diff --git a/app/serializers/status_entity.rb b/app/serializers/status_entity.rb index 8e8bda2f9df..f4d0a33d466 100644 --- a/app/serializers/status_entity.rb +++ b/app/serializers/status_entity.rb @@ -7,16 +7,7 @@ class StatusEntity < Grape::Entity expose :details_path expose :favicon do |status| - dir = - if Gitlab::Utils.to_boolean(ENV['CANARY']) - File.join('ci_favicons', 'canary') - elsif Rails.env.development? - File.join('ci_favicons', 'dev') - else - 'ci_favicons' - end - - ActionController::Base.helpers.image_path(File.join(dir, "#{status.favicon}.ico")) + ActionController::Base.helpers.image_path(status.favicon) end expose :action, if: -> (status, _) { status.has_action? } do diff --git a/lib/gitlab/ci/status/canceled.rb b/lib/gitlab/ci/status/canceled.rb index e6195a60d4f..0d71ff03163 100644 --- a/lib/gitlab/ci/status/canceled.rb +++ b/lib/gitlab/ci/status/canceled.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_canceled' + Gitlab::Favicon.status('canceled') end end end diff --git a/lib/gitlab/ci/status/created.rb b/lib/gitlab/ci/status/created.rb index 846f00b83dd..de86191dfeb 100644 --- a/lib/gitlab/ci/status/created.rb +++ b/lib/gitlab/ci/status/created.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_created' + Gitlab::Favicon.status('created') end end end diff --git a/lib/gitlab/ci/status/failed.rb b/lib/gitlab/ci/status/failed.rb index 27ce85bd3ed..20e2050108c 100644 --- a/lib/gitlab/ci/status/failed.rb +++ b/lib/gitlab/ci/status/failed.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_failed' + Gitlab::Favicon.status('failed') end end end diff --git a/lib/gitlab/ci/status/manual.rb b/lib/gitlab/ci/status/manual.rb index fc387e2fd25..2c02ce6e870 100644 --- a/lib/gitlab/ci/status/manual.rb +++ b/lib/gitlab/ci/status/manual.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_manual' + Gitlab::Favicon.status('manual') end end end diff --git a/lib/gitlab/ci/status/pending.rb b/lib/gitlab/ci/status/pending.rb index 6780780db32..9122d11cfed 100644 --- a/lib/gitlab/ci/status/pending.rb +++ b/lib/gitlab/ci/status/pending.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_pending' + Gitlab::Favicon.status('pending') end end end diff --git a/lib/gitlab/ci/status/running.rb b/lib/gitlab/ci/status/running.rb index ee13905e46d..9bc48ec2c29 100644 --- a/lib/gitlab/ci/status/running.rb +++ b/lib/gitlab/ci/status/running.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_running' + Gitlab::Favicon.status('running') end end end diff --git a/lib/gitlab/ci/status/skipped.rb b/lib/gitlab/ci/status/skipped.rb index 0dbdc4de426..b404118cd3b 100644 --- a/lib/gitlab/ci/status/skipped.rb +++ b/lib/gitlab/ci/status/skipped.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_skipped' + Gitlab::Favicon.status('skipped') end end end diff --git a/lib/gitlab/ci/status/success.rb b/lib/gitlab/ci/status/success.rb index 731013ec017..be7e5d60b26 100644 --- a/lib/gitlab/ci/status/success.rb +++ b/lib/gitlab/ci/status/success.rb @@ -15,7 +15,7 @@ module Gitlab end def favicon - 'favicon_status_success' + Gitlab::Favicon.status('success') end end end diff --git a/lib/gitlab/favicon.rb b/lib/gitlab/favicon.rb index 27150f8d1ea..17e737ac913 100644 --- a/lib/gitlab/favicon.rb +++ b/lib/gitlab/favicon.rb @@ -2,21 +2,33 @@ module Gitlab class Favicon class << self def default - return appearance_favicon.default.url if appearance_favicon + return appearance_favicon.default.url if appearance_favicon.exists? return 'favicon-yellow.ico' if Gitlab::Utils.to_boolean(ENV['CANARY']) return 'favicon-blue.ico' if Rails.env.development? 'favicon.ico' end + def status(status_name) + if appearance_favicon.exists? + appearance_favicon.public_send("status_#{status_name}").url + else + dir = 'ci_favicons' + dir = File.join(dir, 'dev') if Rails.env.development? + dir = File.join(dir, 'canary') if Gitlab::Utils.to_boolean(ENV['CANARY']) + + File.join(dir, "favicon_status_#{status_name}.ico") + end + end + private def appearance - @appearance ||= Appearance.current + Appearance.current || Appearance.new end def appearance_favicon - appearance&.favicon + appearance.favicon end end end diff --git a/spec/lib/gitlab/favicon_spec.rb b/spec/lib/gitlab/favicon_spec.rb index 51a8ed47abf..d74dabf1458 100644 --- a/spec/lib/gitlab/favicon_spec.rb +++ b/spec/lib/gitlab/favicon_spec.rb @@ -22,4 +22,17 @@ RSpec.describe Gitlab::Favicon do expect(described_class.default).to match %r{/uploads/-/system/appearance/favicon/\d+/default_dk.ico} end end + + describe '.status' do + subject { described_class.status('created') } + + it 'defaults to the stock icon' do + expect(subject).to eq 'ci_favicons/favicon_status_created.ico' + end + + it 'uses the custom favicon if a favicon appearance is present' do + create :appearance, favicon: fixture_file_upload(Rails.root.join('spec/fixtures/dk.png')) + expect(subject).to match(%r{/uploads/-/system/appearance/favicon/\d+/status_created_dk.ico}) + end + end end |