| load("@aspect_rules_rollup//rollup:defs.bzl", "rollup") |
| load("@com_googlesource_gerrit_bazlets//tools:genrule2.bzl", "genrule2") |
| |
| def _rollup_minify( |
| name, |
| srcs, |
| entry_point, |
| rollup_config, |
| node_modules): |
| """Run Rollup with @rollup/plugin-terser; emit the minified bundle.""" |
| rollup( |
| name = name, |
| srcs = srcs, |
| entry_point = entry_point, |
| args = [ |
| "--bundleConfigAsCjs=true", |
| ], |
| format = "iife", |
| silent = True, |
| sourcemap = "hidden", |
| config_file = rollup_config, |
| node_modules = node_modules, |
| deps = [ |
| node_modules + "/@rollup/plugin-node-resolve", |
| node_modules + "/@rollup/plugin-terser", |
| ], |
| ) |
| |
| def gerrit_js_bundle( |
| name, |
| srcs, |
| entry_point, |
| rollup_config = "//plugins:rollup.config", |
| node_modules = "//tools/node_tools:node_modules"): |
| """Produces a Gerrit JavaScript bundle archive. |
| |
| This rule bundles and minifies frontend plugin JavaScript files with Rollup. |
| Output is an archive "${name}.jar" with Gerrit frontend plugin layout. |
| """ |
| |
| bundle = name + "-bundle" |
| main = name + ".js" |
| |
| _rollup_minify( |
| name = bundle, |
| srcs = srcs, |
| entry_point = entry_point, |
| rollup_config = rollup_config, |
| node_modules = node_modules, |
| ) |
| |
| native.genrule( |
| name = name + "_rename_js", |
| srcs = [bundle], |
| outs = [main], |
| cmd = "cp $< $@", |
| output_to_bindir = True, |
| ) |
| |
| genrule2( |
| name = name, |
| srcs = [main], |
| outs = [name + ".jar"], |
| cmd = " && ".join([ |
| "mkdir $$TMP/static", |
| "cp $(SRCS) $$TMP/static", |
| "cd $$TMP", |
| "zip -Drq $$ROOT/$@ -g .", |
| ]), |
| ) |
| |
| def polygerrit_plugin( |
| name, |
| app, |
| plugin_name = None, |
| rollup_config = "//plugins:rollup.config", |
| node_modules = "//tools/node_tools:node_modules"): |
| """Produces a plugin file set with minified JavaScript. |
| |
| This rule minifies a single-source frontend plugin and exposes the |
| result as a filegroup containing one .js file. Unlike gerrit_js_bundle, |
| no .jar archive is produced; consumers depend on the filegroup |
| directly. |
| |
| Args: |
| name: Rule name. The output filegroup is named "${name}". |
| app: The single root source JavaScript file fed into Rollup. |
| plugin_name: Filename stem for the emitted .js. Defaults to ${name}. |
| rollup_config: Label of the shared Rollup config file. |
| node_modules: Label of the node_modules tree the plugins resolve |
| against. |
| """ |
| if not plugin_name: |
| plugin_name = name |
| |
| bundle = plugin_name + "-bundle" |
| |
| _rollup_minify( |
| name = bundle, |
| srcs = [app], |
| entry_point = app, |
| rollup_config = rollup_config, |
| node_modules = node_modules, |
| ) |
| |
| native.genrule( |
| name = name + "_rename_js", |
| srcs = [bundle], |
| outs = [plugin_name + ".js"], |
| cmd = "cp $< $@", |
| output_to_bindir = True, |
| ) |
| |
| native.filegroup( |
| name = name, |
| srcs = [plugin_name + ".js"], |
| ) |