about summary refs log tree commit diff
path: root/lib/tasks
diff options
context:
space:
mode:
authorStarfall <us@starfall.systems>2022-06-24 13:31:43 -0500
committerStarfall <us@starfall.systems>2022-06-24 13:31:43 -0500
commitd83f17f6763a1ffb3569eac73330cb09c557acea (patch)
tree92d392eed60a7d60bbd01e8544202db19a37e3d5 /lib/tasks
parentb9c901007b9a5772d2553a5770fa479954eec58f (diff)
parent63f79874b59b3ba28c0f940b9d36ea7aacb44c93 (diff)
Merge remote-tracking branch 'glitch/main'
Diffstat (limited to 'lib/tasks')
-rw-r--r--lib/tasks/branding.rake77
1 files changed, 77 insertions, 0 deletions
diff --git a/lib/tasks/branding.rake b/lib/tasks/branding.rake
new file mode 100644
index 000000000..2eec7c9e1
--- /dev/null
+++ b/lib/tasks/branding.rake
@@ -0,0 +1,77 @@
+namespace :branding do
+  desc 'Generate necessary graphic assets for branding from source SVG files'
+  task generate: :environment do
+    Rake::Task['branding:generate_app_icons'].invoke
+    Rake::Task['branding:generate_app_badge'].invoke
+    Rake::Task['branding:generate_github_assets'].invoke
+    Rake::Task['branding:generate_mailer_assets'].invoke
+  end
+
+  desc 'Generate PNG icons and logos for e-mail templates'
+  task generate_mailer_assets: :environment do
+    rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-h :size --keep-aspect-ratio :input -o :output')
+    output_dest  = Rails.root.join('app', 'javascript', 'images', 'mailer')
+
+    # Displayed size is 64px, at 3x it's 192px
+    Dir[Rails.root.join('app', 'javascript', 'images', 'icons', '*.svg')].each do |path|
+      rsvg_convert.run(input: path, size: 192, output: output_dest.join("#{File.basename(path, '.svg')}.png"))
+    end
+
+    # Displayed size is 34px, at 3x it's 102px
+    rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.png'))
+
+    # Displayed size is 24px, at 3x it's 72px
+    rsvg_convert.run(input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg'), size: 72, output: output_dest.join('logo.png'))
+  end
+
+  desc 'Generate light/dark logotypes for GitHub'
+  task generate_github_assets: :environment do
+    rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -h :size --keep-aspect-ratio :input -o :output')
+    output_dest  = Rails.root.join('lib', 'assets')
+
+    rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.dark.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.dark.png'))
+    rsvg_convert.run(stylesheet: Rails.root.join('lib', 'assets', 'wordmark.light.css'), input: Rails.root.join('app', 'javascript', 'images', 'logo-symbol-wordmark.svg'), size: 102, output: output_dest.join('wordmark.light.png'))
+  end
+
+  desc 'Generate favicons and app icons from SVG source files'
+  task generate_app_icons: :environment do
+    favicon_source  = Rails.root.join('app', 'javascript', 'images', 'logo.svg')
+    app_icon_source = Rails.root.join('app', 'javascript', 'images', 'app-icon.svg')
+    output_dest     = Rails.root.join('app', 'javascript', 'icons')
+
+    rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '-w :size -h :size --keep-aspect-ratio :input -o :output')
+    convert = Terrapin::CommandLine.new('convert', ':input :output')
+
+    favicon_sizes      = [16, 32, 48]
+    apple_icon_sizes   = [57, 60, 72, 76, 114, 120, 144, 152, 167, 180, 1024]
+    android_icon_sizes = [36, 48, 72, 96, 144, 192, 256, 384, 512]
+
+    favicons = []
+
+    favicon_sizes.each do |size|
+      output_path = output_dest.join("favicon-#{size}x#{size}.png")
+      favicons << output_path
+      rsvg_convert.run(size: size, input: favicon_source, output: output_path)
+    end
+
+    convert.run(input: favicons, output: Rails.root.join('public', 'favicon.ico'))
+
+    apple_icon_sizes.each do |size|
+      rsvg_convert.run(size: size, input: app_icon_source, output: output_dest.join("apple-touch-icon-#{size}x#{size}.png"))
+    end
+
+    android_icon_sizes.each do |size|
+      rsvg_convert.run(size: size, input: app_icon_source, output: output_dest.join("android-chrome-#{size}x#{size}.png"))
+    end
+  end
+
+  desc 'Generate badge icon from SVG source files'
+  task generate_app_badge: :environment do
+    rsvg_convert = Terrapin::CommandLine.new('rsvg-convert', '--stylesheet :stylesheet -w :size -h :size --keep-aspect-ratio :input -o :output')
+    badge_source = Rails.root.join('app', 'javascript', 'images', 'logo-symbol-icon.svg')
+    output_dest  = Rails.root.join('public')
+    stylesheet   = Rails.root.join('lib', 'assets', 'wordmark.light.css')
+
+    rsvg_convert.run(stylesheet: stylesheet, input: badge_source, size: 192, output: output_dest.join('badge.png'))
+  end
+end