# frozen_string_literal: true namespace :ext do rootdir = Pathname("extensions") desc "Build Chrome Extension" task chrome: "chrome:build" namespace :chrome do dist = Pathname("dist/crx") extdir = rootdir.join(dist) manifest_json = rootdir.join("chrome/manifest.json") directory extdir task build: [ extdir, "lib:templates" ] do cd rootdir do cp_r [ "img/", "tmp/lib/" ], dist `cd chrome && git ls-files`.split("\n").each do |src| dest = dist.join(src) mkdir_p dest.dirname cp Pathname("chrome").join(src), dest end end end # Generate a .crx file. task crx: [ :build, :npm ] do out = "crx-web-console-#{JSON.parse(File.read(manifest_json))["version"]}.crx" cd(extdir) { sh "node \"$(npm bin)/crx\" pack ./ -p ../crx-web-console.pem -o ../#{out}" } end # Generate a .zip file for Chrome Web Store. task zip: [ :build ] do version = JSON.parse(File.read(manifest_json))["version"] cd(extdir) { sh "zip -r ../crx-web-console-#{version}.zip ./" } end desc "Launch a browser with the chrome extension." task run: [ :build ] do cd(rootdir) { sh "sh ./script/run_chrome.sh --load-extension=#{dist}" } end end task :npm do cd(rootdir) { sh "npm install --silent" } end namespace :lib do templates = Pathname("lib/web_console/templates") tmplib = rootdir.join("tmp/lib/") js_erb = FileList.new(templates.join("**/*.js.erb")) dirs = js_erb.pathmap("%{^#{templates},#{tmplib}}d") task templates: dirs + js_erb.pathmap("%{^#{templates},#{tmplib}}X") dirs.each { |d| directory d } rule ".js" => [ "%{^#{tmplib},#{templates}}X.js.erb" ] do |t| File.write(t.name, WebConsole::Testing::ERBPrecompiler.new(t.source).build) end end end