Upgrade polygerrit_plugin rule Now polygerrit_plugin does the following: - creates output rule with the plugin name to create output static files - combines (i.e. vulcanizes) plugin JS/HTML sources - closure compiles with compilation_level = "SIMPLE" - includes assets to output filegroup Change-Id: Ie63367a3aa566779fa816aa0f22915ef323a4c3b
diff --git a/tools/bzl/js.bzl b/tools/bzl/js.bzl index fbacfad..03ee87c 100644 --- a/tools/bzl/js.bzl +++ b/tools/bzl/js.bzl
@@ -3,6 +3,7 @@ GERRIT = "GERRIT:" load("//lib/js:npm.bzl", "NPM_SHA1S", "NPM_VERSIONS") +load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_binary", "closure_js_library") def _npm_tarball(name): return "%s@%s.npm_binary.tgz" % (name, NPM_VERSIONS[name]) @@ -146,9 +147,9 @@ transitive_versions += d.transitive_versions return struct( - transitive_zipfiles = transitive_zipfiles, - transitive_versions = transitive_versions, transitive_licenses = transitive_licenses, + transitive_versions = transitive_versions, + transitive_zipfiles = transitive_zipfiles, ) _common_attrs = { @@ -187,9 +188,9 @@ licenses += depset([ctx.file.license]) return struct( - transitive_zipfiles = list([ctx.outputs.zip]), - transitive_versions = depset(), transitive_licenses = licenses, + transitive_versions = depset(), + transitive_zipfiles = list([ctx.outputs.zip]), ) js_component = rule( @@ -271,9 +272,9 @@ ) return struct( - transitive_zipfiles = zips, - transitive_versions = versions, transitive_licenses = licenses, + transitive_versions = versions, + transitive_zipfiles = zips, ) bower_component_bundle = rule( @@ -341,8 +342,8 @@ # from the environment, and it may be under $HOME, so we can't run # in the sandbox. node_tweaks = dict( - use_default_shell_env = True, execution_requirements = {"local": "1"}, + use_default_shell_env = True, ) ctx.actions.run_shell( mnemonic = "Vulcanize", @@ -427,6 +428,87 @@ """Vulcanize runs vulcanize and (optionally) crisper on a set of sources.""" _vulcanize_rule(*args, pkg = PACKAGE_NAME, **kwargs) -def polygerrit_plugin(*args, **kwargs): - """Bundles plugin dependencies for deployment.""" - _vulcanize_rule(*args, pkg = PACKAGE_NAME, **kwargs) +def polygerrit_plugin(name, app, srcs = [], assets = None, **kwargs): + """Bundles plugin dependencies for deployment. + + This rule bundles all Polymer elements and JS dependencies into .html and .js files. + Run-time dependencies (e.g. JS libraries loaded after plugin starts) should be provided using "assets" property. + Output of this rule is a FileSet with "${name}_fs", with deploy artifacts in "plugins/${name}/static". + + Args: + name: String, plugin name. + app: String, the main or root source file. + assets: Fileset, additional files to be used by plugin in runtime, exported to "plugins/${name}/static". + srcs: Source files required for combining. + """ + + # Combines all .js and .html files into foo_combined.js and foo_combined.html + _vulcanize_rule(name = name + "_combined", app = app, srcs = srcs + [app], pkg = PACKAGE_NAME, **kwargs) + + closure_js_binary( + name = name + "_bin", + compilation_level = "SIMPLE", + defs = [ + "--polymer_version=1", + "--language_out=ECMASCRIPT6", + "--rewrite_polyfills=false", + ], + deps = [ + name + "_closure_lib", + ], + ) + + closure_js_library( + name = name + "_closure_lib", + srcs = [name + "_combined.js"], + convention = "GOOGLE", + no_closure_library = True, + deps = [ + "//lib/polymer_externs:polymer_closure", + "//polygerrit-ui/externs:plugin", + ], + ) + + native.genrule( + name = name + "_rename_html", + srcs = [name + "_combined.html"], + outs = [name + ".html"], + cmd = "sed 's/<script src=\"" + name + "_combined.js\"/<script src=\"" + name + ".js\"/g' $(SRCS) > $(OUTS)", + output_to_bindir = True, + ) + + native.genrule( + name = name + "_rename_js", + srcs = [name + "_bin.js"], + outs = [name + ".js"], + cmd = "cp $< $@", + output_to_bindir = True, + ) + + static_files = [ + name + ".js", + name + ".html", + ] + + if assets: + nested, direct = [], [] + for x in assets: + target = nested if "/" in x else direct + target.append(x) + + static_files += direct + + if nested: + native.genrule( + name = name + "_copy_assets", + srcs = assets, + outs = [f.split("/")[-1] for f in nested], + cmd = "cp $(SRCS) $(@D)", + output_to_bindir = True, + ) + static_files += [":" + name + "_copy_assets"] + + native.filegroup( + name = name, + srcs = static_files, + )