bazel: bower support

* npm_binary (download tarball packaged npm apps)

* bower_archive (download a zip file, to be put in WORKSPACE)

* bower_component (defining a bower library, with dependency )

* bower_component_bundle (zipping up libraries together)

* js_component (insert plain js file into bower component bundle)

* bower2bazel.py: run bower to find dependencies, generate a .bzl to
  define archives and define components

Tested:

 python tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b \
    lib/js/bower_components.bzl

 bazel build polygerrit-ui:components
 unzip -v bazel-bin/polygerrit-ui/components.zip > /tmp/baz

 buck build polygerrit-ui:polygerrit_components
 unzip -v buck-out/gen/polygerrit-ui/polygerrit_components/polygerrit_components.bower_components.zip > /tmp/buck

 diff /tmp/buck /tmp/baz

The diff corresponds to newer file versions pinned through bower2bazel.

Change-Id: I4f33914d4853bcf8afe78b4719d0e0e83b139031
This commit is contained in:
Han-Wen Nienhuys
2016-09-21 15:03:54 +02:00
parent 8178e0e3f2
commit 28e7a6d3fe
19 changed files with 1009 additions and 85 deletions

View File

@@ -1,40 +1,6 @@
exports_files([
"LICENSE-antlr",
"LICENSE-Apache1.1",
"LICENSE-Apache2.0",
"LICENSE-args4j",
"LICENSE-asciidoctor",
"LICENSE-automaton",
"LICENSE-bouncycastle",
"LICENSE-CC-BY3.0-unported",
"LICENSE-clippy",
"LICENSE-codemirror-minified",
"LICENSE-codemirror-original",
"LICENSE-diffy",
"LICENSE-es6-promise",
"LICENSE-fetch",
"LICENSE-h2",
"LICENSE-highlightjs",
"LICENSE-icu4j",
"LICENSE-jgit",
"LICENSE-jsch",
"LICENSE-MPL1.1",
"LICENSE-moment",
"LICENSE-OFL1.1",
"LICENSE-ow2",
"LICENSE-page.js",
"LICENSE-polymer",
"LICENSE-postgresql",
"LICENSE-prologcafe",
"LICENSE-promise-polyfill",
"LICENSE-protobuf",
"LICENSE-PublicDomain",
"LICENSE-silk_icons",
"LICENSE-slf4j",
"LICENSE-xz",
"LICENSE-DO_NOT_DISTRIBUTE",
])
exports_files(glob([
"LICENSE-*"
]))
filegroup(
name = 'all-licenses',

34
lib/fonts/BUILD Normal file
View File

@@ -0,0 +1,34 @@
load('//tools/bzl:genrule2.bzl', 'genrule2')
# Source Code Pro. Version 2.010 Roman / 1.030 Italics
# https://github.com/adobe-fonts/source-code-pro/releases/tag/2.010R-ro%2F1.030R-it
genrule2(
name = 'sourcecodepro',
cmd = 'zip -rq $@ $(SRCS)',
srcs = [
'SourceCodePro-Regular.woff',
'SourceCodePro-Regular.woff2'
],
out = 'sourcecodepro.zip',
# TODO(hanwen): fix this
# license = 'OFL1.1',
visibility = ['//visibility:public'],
)
# Open Sans at Revision 53a5266 and converted using a Google woff file
# converter (same one that Google Fonts uses).
# https://github.com/google/fonts/tree/master/apache/opensans
genrule2(
name = 'opensans',
cmd = 'zip -rq $@ $(SRCS)',
srcs = [
'OpenSans-Bold.woff',
'OpenSans-Bold.woff2',
'OpenSans-Regular.woff',
'OpenSans-Regular.woff2'
],
out = 'opensans.zip',
# TODO(hanwen): license.
# license = 'Apache2.0',
visibility = ['//visibility:public'],
)

4
lib/highlightjs/BUILD Normal file
View File

@@ -0,0 +1,4 @@
exports_files([
'highlight.min.js',
])

View File

@@ -124,7 +124,8 @@ def _combine_components(deps):
cmds = ['cd $TMP']
for d in deps:
cmds.append('unzip -qo $(location %s)' % d)
cmds.append('zip -r $OUT bower_components')
cmds.append("find bower_components -exec touch -t 198001010000 '{}' ';'")
cmds.append('zip -r $OUT bower_components/*')
return ' && '.join(cmds)

29
lib/js/BUILD Normal file
View File

@@ -0,0 +1,29 @@
package(default_visibility = [ "//visibility:public" ])
load('//tools/bzl:genrule2.bzl', 'genrule2')
load("//tools/bzl:js.bzl", "bower_component", "js_component")
# For updating the bower versions, run
#
# python tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b lib/js/bower_components.bzl
#
# For adding a new component as dependency to a bower_component_bundle
#
# 1) add a new bower_archive in WORKSPACE
#
# 2) add bower_component(name="my_new_dependency", seed=True) here
#
# 3) run bower2bazel (see above.)
#
# 4) remove bower_component(name="my_new_dependency", .. ) here
#
load("//lib/js:bower_components.bzl", "define_bower_components")
define_bower_components()
js_component(
name = 'highlightjs',
srcs = [ "//lib/highlightjs:highlight.min.js" ],
license = '//lib:LICENSE-highlightjs',
)

68
lib/js/bower_archives.bzl Normal file
View File

@@ -0,0 +1,68 @@
# DO NOT EDIT
# generated with the following command:
#
# tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b lib/js/bower_components.bzl
#
load("//tools/bzl:js.bzl", "bower_archive")
def load_bower_archives():
bower_archive(
name = "iron-a11y-announcer",
package = "iron-a11y-announcer",
version = "1.0.5",
sha1 = "007902c041dd8863a1fe893f62450852f4d8c69b")
bower_archive(
name = "iron-a11y-keys-behavior",
package = "iron-a11y-keys-behavior",
version = "1.1.9",
sha1 = "f58358ee652c67e6e721364ba50fb77a2ece1465")
bower_archive(
name = "iron-behaviors",
package = "iron-behaviors",
version = "1.0.17",
sha1 = "47df7e1c2b97978dcafa13edb50fbdb702570acd")
bower_archive(
name = "iron-fit-behavior",
package = "iron-fit-behavior",
version = "1.2.5",
sha1 = "5938815cd227843fc77ebeac480b999600a76157")
bower_archive(
name = "iron-flex-layout",
package = "iron-flex-layout",
version = "1.3.1",
sha1 = "ba696394abff5e799fc06eb11bff4720129a1b52")
bower_archive(
name = "iron-form-element-behavior",
package = "iron-form-element-behavior",
version = "1.0.6",
sha1 = "8d9e6530edc1b99bec1a5c34853911fba3701220")
bower_archive(
name = "iron-meta",
package = "iron-meta",
version = "1.1.2",
sha1 = "dc22fe05e1cb5f94f30a7193d3433ca1808773b8")
bower_archive(
name = "iron-resizable-behavior",
package = "iron-resizable-behavior",
version = "1.0.5",
sha1 = "2ebe983377dceb3794dd335131050656e23e2beb")
bower_archive(
name = "iron-validatable-behavior",
package = "iron-validatable-behavior",
version = "1.1.1",
sha1 = "480423380be0536f948735d91bc472f6e7ced5b4")
bower_archive(
name = "neon-animation",
package = "neon-animation",
version = "1.2.4",
sha1 = "e8ccbb930c4b7ff470b1450baa901618888a7fd3")
bower_archive(
name = "web-animations-js",
package = "web-animations-js",
version = "2.2.2",
sha1 = "6276a9f227da7d4ccaf77c202b50e174dd11a2c2")
bower_archive(
name = "webcomponentsjs",
package = "webcomponentsjs",
version = "0.7.22",
sha1 = "8ba97a4a279ec6973a19b171c462a7b5cf454fb9")

162
lib/js/bower_components.bzl Normal file
View File

@@ -0,0 +1,162 @@
# DO NOT EDIT
# generated with the following command:
#
# tools/js/bower2bazel.py -w lib/js/bower_archives.bzl -b lib/js/bower_components.bzl
#
load("//tools/bzl:js.bzl", "bower_component")
def define_bower_components():
bower_component(
name = "es6-promise",
license = "//lib:LICENSE-polymer",
seed = True,
)
bower_component(
name = "fetch",
license = "//lib:LICENSE-fetch",
seed = True,
)
bower_component(
name = "iron-a11y-announcer",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-a11y-keys-behavior",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-autogrow-textarea",
license = "//lib:LICENSE-polymer",
deps = [
":iron-behaviors",
":iron-flex-layout",
":iron-form-element-behavior",
":iron-validatable-behavior",
":polymer",
],
seed = True,
)
bower_component(
name = "iron-behaviors",
license = "//lib:LICENSE-polymer",
deps = [
":iron-a11y-keys-behavior",
":polymer",
],
)
bower_component(
name = "iron-dropdown",
license = "//lib:LICENSE-polymer",
deps = [
":iron-a11y-keys-behavior",
":iron-behaviors",
":iron-overlay-behavior",
":iron-resizable-behavior",
":neon-animation",
":polymer",
],
seed = True,
)
bower_component(
name = "iron-fit-behavior",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-flex-layout",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-form-element-behavior",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-input",
license = "//lib:LICENSE-polymer",
deps = [
":iron-a11y-announcer",
":iron-validatable-behavior",
":polymer",
],
seed = True,
)
bower_component(
name = "iron-meta",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-overlay-behavior",
license = "//lib:LICENSE-polymer",
deps = [
":iron-a11y-keys-behavior",
":iron-fit-behavior",
":iron-resizable-behavior",
":polymer",
],
seed = True,
)
bower_component(
name = "iron-resizable-behavior",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
)
bower_component(
name = "iron-selector",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
seed = True,
)
bower_component(
name = "iron-validatable-behavior",
license = "//lib:LICENSE-polymer",
deps = [
":iron-meta",
":polymer",
],
)
bower_component(
name = "moment",
license = "//lib:LICENSE-moment",
seed = True,
)
bower_component(
name = "neon-animation",
license = "//lib:LICENSE-polymer",
deps = [
":iron-meta",
":iron-resizable-behavior",
":iron-selector",
":polymer",
":web-animations-js",
],
)
bower_component(
name = "page",
license = "//lib:LICENSE-polymer",
seed = True,
)
bower_component(
name = "polymer",
license = "//lib:LICENSE-polymer",
deps = [ ":webcomponentsjs" ],
seed = True,
)
bower_component(
name = "promise-polyfill",
license = "//lib:LICENSE-polymer",
deps = [ ":polymer" ],
seed = True,
)
bower_component(
name = "web-animations-js",
license = "//lib:LICENSE-Apache2.0",
)
bower_component(
name = "webcomponentsjs",
license = "//lib:LICENSE-polymer",
)