Files
gerrit/polygerrit-ui/app/rules.bzl
David Ostrovsky fdf97c88ca Bazel: Use rules_closure from HEAD
The latest rules_closure changes updated closure compiler version and
remove stale bazel version check, that broke Bazel CI for gerrit: [1].

It turns out that the current code cannot be compiled by the latest
closure compiler, so that it must be adjusted first. We add two more
suppressions to the closure compiler invocation:

* JSC_UNNECESSARY_ESCAPE
* JSC_JSDOC_MISSING_TYPE_WARNING

Some of the warnings flagged by the closure compiler are related to
the moment library. The PR to fix them is pending for review: [2].

* [1] https://github.com/bazelbuild/bazel/issues/4425
* [2] https://github.com/moment/moment/pull/4350

Change-Id: I0354ceddc7f615d93b5d23cf2652b8552e53cc91
2018-01-16 08:32:00 +01:00

98 lines
3.0 KiB
Python

load("//tools/bzl:genrule2.bzl", "genrule2")
load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library", "closure_js_binary")
load(
"//tools/bzl:js.bzl",
"vulcanize",
"bower_component",
"js_component",
)
def polygerrit_bundle(name, srcs, outs, app):
appName = app.split(".html")[0].split("/").pop() # eg: gr-app
closure_js_binary(
name = name + "_closure_bin",
# Known issue: Closure compilation not compatible with Polymer behaviors.
# See: https://github.com/google/closure-compiler/issues/2042
compilation_level = "WHITESPACE_ONLY",
defs = [
"--polymer_pass",
"--jscomp_off=duplicate",
"--force_inject_library=es6_runtime",
],
language = "ECMASCRIPT5",
deps = [name + "_closure_lib"],
)
closure_js_library(
name = name + "_closure_lib",
srcs = [appName + ".js"],
convention = "GOOGLE",
# TODO(davido): Clean up these issues: http://paste.openstack.org/show/608548
# and remove this supression
suppress = [
"JSC_JSDOC_MISSING_TYPE_WARNING",
"JSC_UNNECESSARY_ESCAPE",
"JSC_UNUSED_LOCAL_ASSIGNMENT",
],
deps = [
"//lib/polymer_externs:polymer_closure",
"@io_bazel_rules_closure//closure/library",
],
)
vulcanize(
name = appName,
srcs = srcs,
app = app,
deps = ["//polygerrit-ui:polygerrit_components.bower_components"],
)
native.filegroup(
name = name + "_app_sources",
srcs = [
name + "_closure_bin.js",
appName + ".html",
],
)
native.filegroup(
name = name + "_css_sources",
srcs = native.glob(["styles/**/*.css"]),
)
native.filegroup(
name = name + "_top_sources",
srcs = [
"favicon.ico",
"index.html",
],
)
genrule2(
name = name,
srcs = [
name + "_app_sources",
name + "_css_sources",
name + "_top_sources",
"//lib/fonts:robotofonts",
"//lib/js:highlightjs_files",
# we extract from the zip, but depend on the component for license checking.
"@webcomponentsjs//:zipfile",
"//lib/js:webcomponentsjs"
],
outs = outs,
cmd = " && ".join([
"mkdir -p $$TMP/polygerrit_ui/{styles,fonts,bower_components/{highlightjs,webcomponentsjs},elements}",
"for f in $(locations " + name + "_app_sources); do ext=$${f##*.}; cp -p $$f $$TMP/polygerrit_ui/elements/" + appName + ".$$ext; done",
"cp $(locations //lib/fonts:robotofonts) $$TMP/polygerrit_ui/fonts/",
"for f in $(locations " + name + "_top_sources); do cp $$f $$TMP/polygerrit_ui/; done",
"for f in $(locations "+ name + "_css_sources); do cp $$f $$TMP/polygerrit_ui/styles; done",
"for f in $(locations //lib/js:highlightjs_files); do cp $$f $$TMP/polygerrit_ui/bower_components/highlightjs/ ; done",
"unzip -qd $$TMP/polygerrit_ui/bower_components $(location @webcomponentsjs//:zipfile) webcomponentsjs/webcomponents-lite.js",
"cd $$TMP",
"find . -exec touch -t 198001010000 '{}' ';'",
"zip -qr $$ROOT/$@ *",
]),
)