Bazel: Implement GWT UI build for the plugins TEST PLAN: $ bazel build plugins/cookbook-plugin Deploy to the server site and verify that it works. Change-Id: I98af807f9c92ba4ed7efad332d8fdee407bb8ce6
diff --git a/tools/bzl/gwt.bzl b/tools/bzl/gwt.bzl index ec00613..d14e96a 100644 --- a/tools/bzl/gwt.bzl +++ b/tools/bzl/gwt.bzl
@@ -48,6 +48,19 @@ '-XdisableCastChecking', ] +PLUGIN_DEPS_NEVERLINK = [ + '//gerrit-plugin-api:lib-neverlink', +] + +GWT_PLUGIN_DEPS_NEVERLINK = [ + '//gerrit-plugin-gwtui:gwtui-api-lib-neverlink', + '//lib/gwt:user-neverlink', +] + +GWT_PLUGIN_DEPS = [ + '//gerrit-plugin-gwtui:gwtui-api-lib', +] + GWT_TRANSITIVE_DEPS = [ '//lib/gwt:ant', '//lib/gwt:colt', @@ -126,7 +139,7 @@ ) def _gwt_binary_impl(ctx): - module = MODULE + module = ctx.attr.module[0] output_zip = ctx.outputs.output output_dir = output_zip.path + '.gwt_output' deploy_dir = output_zip.path + '.gwt_deploy' @@ -195,6 +208,7 @@ "style": attr.string(default = "OBF"), "optimize": attr.string(default = "9"), "deps": attr.label_list(allow_files=jar_filetype), + "module": attr.string_list(default = [MODULE]), "module_deps": attr.label_list(allow_files=jar_filetype), "compiler_args": attr.string_list(), "jvm_args": attr.string_list(), @@ -237,6 +251,7 @@ gwt_binary( name = opt, + module = [MODULE], module_deps = [module_dep], deps = DEPS, compiler_args = args, @@ -279,6 +294,7 @@ user_agent = ua, style = 'PRETTY', optimize = "0", + module = [MODULE], module_deps = [':ui_module'], deps = DEPS, compiler_args = GWT_COMPILER_ARGS,
diff --git a/tools/bzl/plugin.bzl b/tools/bzl/plugin.bzl index 9b63553..bce8d66 100644 --- a/tools/bzl/plugin.bzl +++ b/tools/bzl/plugin.bzl
@@ -1,9 +1,14 @@ load('//tools/bzl:genrule2.bzl', 'genrule2') +load('//tools/bzl:gwt.bzl', 'GWT_PLUGIN_DEPS', + 'GWT_PLUGIN_DEPS_NEVERLINK', 'GWT_TRANSITIVE_DEPS', + 'GWT_COMPILER_ARGS', 'PLUGIN_DEPS_NEVERLINK', + 'GWT_JVM_ARGS', 'gwt_binary') def gerrit_plugin( name, deps = [], srcs = [], + gwt_module = [], resources = [], manifest_entries = [], **kwargs): @@ -11,10 +16,14 @@ name = name + '__plugin', srcs = srcs, resources = resources, - deps = deps + ['//gerrit-plugin-api:lib-neverlink'], + deps = deps + GWT_PLUGIN_DEPS_NEVERLINK + PLUGIN_DEPS_NEVERLINK, visibility = ['//visibility:public'], ) + static_jars = [] + if gwt_module: + static_jars = [':%s-static' % name] + native.java_binary( name = '%s__non_stamped' % name, deploy_manifest_lines = manifest_entries + [ @@ -24,11 +33,37 @@ main_class = 'Dummy', runtime_deps = [ ':%s__plugin' % name, - ], + ] + static_jars, visibility = ['//visibility:public'], **kwargs ) + if gwt_module: + native.java_library( + name = name + '__gwt_module', + resources = list(set(srcs + resources)), + runtime_deps = deps + GWT_PLUGIN_DEPS, + visibility = ['//visibility:public'], + ) + genrule2( + name = '%s-static' % name, + cmd = ' && '.join([ + 'mkdir -p $$TMP/static', + 'unzip -qd $$TMP/static $(location %s__gwt_application)' % name, + 'cd $$TMP', + 'zip -qr $$ROOT/$@ .']), + tools = [':%s__gwt_application' % name], + outs = ['%s-static.jar' % name], + ) + gwt_binary( + name = name + '__gwt_application', + module = [gwt_module], + deps = GWT_PLUGIN_DEPS + GWT_TRANSITIVE_DEPS + ['//lib/gwt:dev'], + module_deps = [':%s__gwt_module' % name], + compiler_args = GWT_COMPILER_ARGS, + jvm_args = GWT_JVM_ARGS, + ) + # TODO(davido): Remove manual merge of manifest file when this feature # request is implemented: https://github.com/bazelbuild/bazel/issues/2009 genrule2(