daml/navigator/frontend/BUILD.bazel

124 lines
4.3 KiB
Python
Raw Normal View History

2019-08-13 19:23:03 +03:00
# Copyright (c) 2019 The DAML Authors. All rights reserved.
2019-04-04 11:33:38 +03:00
# SPDX-License-Identifier: Apache-2.0
load("@build_bazel_rules_nodejs//:defs.bzl", "nodejs_binary")
2019-04-16 11:00:58 +03:00
load("@os_info//:os_info.bzl", "is_windows")
2019-04-04 11:33:38 +03:00
filegroup(
name = "src",
srcs = glob(["src/**"]),
2019-04-04 11:33:38 +03:00
)
# TODO: Set up a target for generating GraphQL query definition files.
# Currently, these checked in, and updated with 'make update-graphql-types'.
# TODO: Consider switching from Apollo to https://github.com/dotansimha/graphql-code-generator,
# as the latter can be configured such that no postprocessing on the generated files is necessary.
# nodejs_binary(
# name = "apollo_codegen",
# entry_point = "node_modules/apollo/bin/run",
# data = [
# "@navigator_frontend_deps//apollo",
# ":src_files"
# ],
# templated_args = [
# "client:codegen",
# "-c ./apollo.config.js",
# "--passthroughCustomScalars",
# "--customScalarsPrefix=OpaqueTypes.",
# "--outputFlat",
# "--target",
# "typescript",
# "--includes=\"$(location :src)/ui-core/**/*.ts*\"",
# "$(location :src)/ui-core/src/api/QueriesBody.txt"
# ]
# )
# Webpack build tool
# The webpack config is a JavaScript file that can import other modules.
# These dependencies are not automagically detected by the pregenerated
# "@navigator_frontend_deps//webpack/bin:webpack" target, so we need to create
# a custom node.js binary that has access to all plugins loaded by webpack at runtime.
nodejs_binary(
name = "webpack",
entry_point = "@navigator_frontend_deps//:node_modules/webpack/bin/webpack.js",
node_modules = "@navigator_frontend_deps//:node_modules",
# The webpack build step requires almost all of the node_modules dependencies
2019-04-16 11:00:58 +03:00
# data = [
# ...
# ],
2019-04-04 11:33:38 +03:00
)
# Builds the frontend single page application and bundles all output files
# (HTML + JavaScript + CSS + images) in a .tgz or .jar archive.
genrule(
name = "frontend",
srcs = [
"webpack.config.js",
"declarations.d.ts",
"tsconfig.json",
"tslint.json",
"package.json",
".modernizrrc",
":src",
"@navigator_frontend_deps//:node_modules",
],
outs = [
"frontend.tgz",
"frontend.jar",
],
cmd = """
2019-04-04 11:33:38 +03:00
# Working directories
export IN="$$(pwd)/$(@D)/in"
export OUT="$$(pwd)/$(@D)/out"
2019-04-16 11:00:58 +03:00
export WP_IN={WP_IN}
export WP_OUT={WP_OUT}
rm -rf $$IN $$OUT
mkdir "$$IN" "$$OUT"
2019-04-04 11:33:38 +03:00
# Our tools (node.js, webpack, webpack plugins, typescript) do not work nicely
# with symbolic links and a node_modules directory that is not in the project root.
# All input files are therefore copied to a working directory.
cp -rL "$$(pwd)/$$(dirname $(execpath declarations.d.ts))/src" "$$IN/src"
cp -rL "$$(pwd)/external/navigator_frontend_deps/node_modules" "$$IN/node_modules"
cp -L "$$(pwd)/$(execpath webpack.config.js)" "$$IN/webpack.config.js"
cp -L "$$(pwd)/$(execpath .modernizrrc)" "$$IN/.modernizrrc"
cp -L "$$(pwd)/$(execpath tsconfig.json)" "$$IN/tsconfig.json"
cp -L "$$(pwd)/$(execpath tslint.json)" "$$IN/tslint.json"
cp -L "$$(pwd)/$(execpath declarations.d.ts)" "$$IN/declarations.d.ts"
2019-04-16 11:00:58 +03:00
# Webpack needs the HOME variable to be set
2019-04-04 11:33:38 +03:00
export HOME="$$IN"
# Run webpack.
# To debug, add the following options:
2019-04-16 11:00:58 +03:00
# -d --progress --display-error-details --verbose
2019-04-04 11:33:38 +03:00
$(execpath :webpack) \
--config="$$IN/webpack.config.js" \
--env.prod \
2019-04-16 11:00:58 +03:00
--env.paths_case_check="{PATHS_CASE_CHECK}" \
--env.bazel_in_dir="$$WP_IN" \
--env.bazel_out_dir="$$WP_OUT/frontend"
2019-04-04 11:33:38 +03:00
2019-04-16 11:00:58 +03:00
# Package result (.TGZ)
2019-04-04 11:33:38 +03:00
# To debug, change 'czf' to 'czfv'.
echo "Packaging result from $$OUT to $(@D)/frontend.tgz"
tar czf "$(@D)/frontend.tgz" -C $$OUT .
2019-04-16 11:00:58 +03:00
# Package result (.JAR)
2019-04-04 11:33:38 +03:00
echo "Packaging result from $$OUT to $(@D)/frontend.jar"
2019-04-16 11:00:58 +03:00
$(location @bazel_tools//tools/jdk:jar) c0Mf "$(@D)/frontend.jar" -C $$OUT .
""".format(
PATHS_CASE_CHECK = "false" if is_windows else "true",
WP_IN = "$$(cygpath -w $$IN)" if is_windows else "$$IN",
WP_OUT = "$$(cygpath -w $$OUT)" if is_windows else "$$OUT",
),
toolchains = ["@bazel_tools//tools/jdk:current_java_runtime"],
tools = [
":webpack",
2019-04-16 11:00:58 +03:00
"@bazel_tools//tools/jdk:jar",
],
visibility = [
"//navigator:__subpackages__",
],
2019-04-04 11:33:38 +03:00
)