Project

General

Profile

Download (2.18 KB) Statistics
| Branch: | Tag: | Revision:
fbbab0d8 Michael Moll
desc 'Compile plugin assets - called via rake plugin:assets:precompile[plugin_name]'
task 'plugin:assets:precompile', [:plugin] => [:environment] do |t, args|
5be69052 Eric D. Helms
# This task will generate assets for a plugin and namespace them in
# plugin_name/public/assets/<plugin_name>. The generated manifest.yaml found
# in the assets directory of the plugin is used to add the asset digest paths
# to the Rails digests list in production.rb.
fb9f45e8 Daniel Lobato
module Foreman
class PluginAssetsTask < Sprockets::Rails::Task
fbbab0d8 Michael Moll
attr_accessor :plugin
5be69052 Eric D. Helms
fbbab0d8 Michael Moll
def initialize(plugin_id)
@plugin = Foreman::Plugin.find(plugin_id) or raise("Unable to find registered plugin #{plugin_id}")
d8520a15 Eric D. Helms
f728bfd4 Eric D Helms
Rails.env = 'production'
d8520a15 Eric D. Helms
app = Rails.application
7d36ad77 Eric D. Helms
app.config.assets.digest = true
app.config.assets.precompile = plugin.assets
d8520a15 Eric D. Helms
fb9f45e8 Daniel Lobato
super(Rails.application)
end
5be69052 Eric D. Helms
fb9f45e8 Daniel Lobato
def compile
with_logger do
manifest.compile(assets)
end
end
5be69052 Eric D. Helms
fb9f45e8 Daniel Lobato
def output
fbbab0d8 Michael Moll
File.join(plugin.path, 'public', 'assets')
fb9f45e8 Daniel Lobato
end
5be69052 Eric D. Helms
fb9f45e8 Daniel Lobato
def manifest_path
fbbab0d8 Michael Moll
File.join(output, plugin.id.to_s, "#{plugin.id}.json")
5be69052 Eric D. Helms
end

fb9f45e8 Daniel Lobato
def manifest
Sprockets::Manifest.new(index, output, manifest_path)
end
end
5be69052 Eric D. Helms
end

b0ee9fd6 Eric D. Helms
module Foreman
class PluginWebpackTask
attr_accessor :plugin

def initialize(plugin_id)
@plugin = Foreman::Plugin.find(plugin_id) or raise("Unable to find registered plugin #{plugin_id}")
end

def compile
5b183386 Ewoud Kohl van Wijngaarden
return unless File.exist?("#{@plugin.path}/webpack")
b0ee9fd6 Eric D. Helms
return unless File.exist?("#{@plugin.path}/package.json")
ENV["NODE_ENV"] ||= 'production'
0399f6db Eric D. Helms
webpack_bin = ::Rails.root.join('node_modules/webpack/bin/webpack.js')
b0ee9fd6 Eric D. Helms
config_file = ::Rails.root.join(::Rails.configuration.webpack.config_file)
sh "#{webpack_bin} --config #{config_file} --bail --env.pluginName=#{@plugin.id}"
end
end
end

fbbab0d8 Michael Moll
if args[:plugin]
task = Foreman::PluginAssetsTask.new(args[:plugin])
fb9f45e8 Daniel Lobato
task.compile
b0ee9fd6 Eric D. Helms
task = Foreman::PluginWebpackTask.new(args[:plugin])
task.compile
5be69052 Eric D. Helms
else
puts "You must specify the name of the plugin (e.g. rake plugin:assets:precompile['my_plugin'])"
end
end