foreman/lib/tasks/plugin_assets.rake @ f728bfd4
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
|