Skip to content

Commit

Permalink
feat: use bazel with yarn to manage build instead of multiple lerna c…
Browse files Browse the repository at this point in the history
…alls (#86)

Former-commit-id: 4b572be
Former-commit-id: 0df629d9c9feb3a367ca9106debc228795844082
  • Loading branch information
jpoehnelt authored Dec 9, 2019
1 parent 61d4877 commit 0618987
Show file tree
Hide file tree
Showing 328 changed files with 4,023 additions and 1,611 deletions.
1 change: 1 addition & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
87 changes: 87 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Common Bazel settings for JavaScript/NodeJS workspaces
# This rc file is automatically discovered when Bazel is run in this workspace,
# see https://docs.bazel.build/versions/master/guide.html#bazelrc
#
# The full list of Bazel options: https://docs.bazel.build/versions/master/command-line-reference.html

# Cache action outputs on disk so they persist across output_base and bazel shutdown (eg. changing branches)
build --disk_cache=.cache/bazel-disk-cache

# Bazel will create symlinks from the workspace directory to output artifacts.
# Build results will be placed in a directory called "dist/bin"
# Other directories will be created like "dist/testlogs"
# Be aware that this will still create a bazel-out symlink in
# your project directory, which you must exclude from version control and your
# editor's search path.
build --symlink_prefix=dist/
# To disable the symlinks altogether (including bazel-out) you can use
# build --symlink_prefix=/
# however this makes it harder to find outputs.

# Specifies desired output mode for running tests.
# Valid values are
# 'summary' to output only test status summary
# 'errors' to also print test logs for failed tests
# 'all' to print logs for all tests
# 'streamed' to output logs for all tests in real time
# (this will force tests to be executed locally one at a time regardless of --test_strategy value).
test --test_output=errors

# Support for debugging NodeJS tests
# Add the Bazel option `--config=debug` to enable this
# --test_output=streamed
# Stream stdout/stderr output from each test in real-time.
# See https://docs.bazel.build/versions/master/user-manual.html#flag--test_output for more details.
# --test_strategy=exclusive
# Run one test at a time.
# --test_timeout=9999
# Prevent long running tests from timing out
# See https://docs.bazel.build/versions/master/user-manual.html#flag--test_timeout for more details.
# --nocache_test_results
# Always run tests
# --node_options=--inspect-brk
# Pass the --inspect-brk option to all tests which enables the node inspector agent.
# See https://nodejs.org/de/docs/guides/debugging-getting-started/#command-line-options for more details.
# --define=VERBOSE_LOGS=1
# Rules will output verbose logs if the VERBOSE_LOGS environment variable is set. `VERBOSE_LOGS` will be passed to
# `nodejs_binary` and `nodejs_test` via the default value of the `default_env_vars` attribute of those rules.
# --compilation_mode=dbg
# Rules may change their build outputs if the compilation mode is set to dbg. For example,
# mininfiers such as terser may make their output more human readable when this is set. `COMPILATION_MODE` will be passed to
# `nodejs_binary` and `nodejs_test` via the default value of the `default_env_vars` attribute of those rules.
# See https://docs.bazel.build/versions/master/user-manual.html#flag--compilation_mode for more details.
test:debug --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results --define=VERBOSE_LOGS=1
# Use bazel run with `--config=debug` to turn on the NodeJS inspector agent.
# The node process will break before user code starts and wait for the debugger to connect.
run:debug --define=VERBOSE_LOGS=1 -- --node_options=--inspect-brk
# The following option will change the build output of certain rules such as terser and may not be desirable in all cases
build:debug --compilation_mode=dbg

# Turn off legacy external runfiles
# This prevents accidentally depending on this feature, which Bazel will remove.
build --nolegacy_external_runfiles

# Turn on the "Managed Directories" feature.
# This allows Bazel to share the same node_modules directory with other tools
# NB: this option was introduced in Bazel 0.26
# See https://docs.bazel.build/versions/master/command-line-reference.html#flag--experimental_allow_incremental_repository_updates
common --experimental_allow_incremental_repository_updates

# Turn on --incompatible_strict_action_env which was on by default
# in Bazel 0.21.0 but turned off again in 0.22.0. Follow
# https://github.com/bazelbuild/bazel/issues/7026 for more details.
# This flag is needed to so that the bazel cache is not invalidated
# when running bazel via `yarn bazel`.
# See https://github.com/angular/angular/issues/27514.
build --incompatible_strict_action_env
run --incompatible_strict_action_env

# Load any settings specific to the current user.
# .bazelrc.user should appear in .gitignore so that settings are not shared with team members
# This needs to be last statement in this
# config, as the user configuration should be able to overwrite flags from this file.
# See https://docs.bazel.build/versions/master/best-practices.html#bazelrc
# (Note that we use .bazelrc.user so the file appears next to .bazelrc in directory listing,
# rather than user.bazelrc as suggested in the Bazel docs)
try-import %workspace%/.bazelrc.user

4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@
**/docs
**/src/*.html
index.html
bazel-*
.cache
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*

bazel-*
# Firebase
.firebase/

Expand Down
10 changes: 8 additions & 2 deletions .license-check.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"license": "../../LICENSE",
"license": "LICENSE",
"licenseFormats": {
"js|ts|css|scss|less|php|as|c|java|cpp|go|cto|acl": {
"prepend": "/*",
Expand All @@ -11,6 +11,12 @@
"njk": {
"prepend": "<!--",
"append": "-->"
},
"bazel|bzl": {
"eachLine": {
"prepend": " # "
}
}
}
},
"ignore": ["license_check*"]
}
10 changes: 5 additions & 5 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@ language: node_js
node_js:
- stable
cache:
yarn: true
directories:
- ".firebase"
- ".cache/bazel-disk-cache"
script:
- npm run bootstrap
- npm run ci
- npm run build
- yarn run ci
deploy:
- provider: script
skip_cleanup: true
script: firebase deploy --token "$FIREBASE_TOKEN"
script: yarn run deploy:ci
on:
branch: dev
- provider: pages
local_dir: dist
local_dir: dist/bin
target_branch: master
skip_cleanup: true
github_token: "$GITHUB_TOKEN"
Expand Down
99 changes: 99 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
load("@npm//eslint:index.bzl", "eslint", "eslint_test")
load("@npm//license-check-and-add:index.bzl", "license_check_and_add_test")
load("@npm//http-server:index.bzl", "http_server")
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary", "nodejs_test")

exports_files(
[
"tsconfig.json",
"LICENSE",
"package.json",
"babel.config.json",
"rollup.config.js",
],
visibility = ["//:__subpackages__"],
)

http_server(
name = "serve",
args = [
],
data = [
"//:index.html",
"//samples:outputs",
],
)

CMD = '''
set -e
context="{\\"packages\\": {\n"
packages=$$($(location @npm//lerna/bin:lerna) list)
i=0
for p in $$packages; do
if ((i > 0)); then
context="$${context},\\n"
fi
context="$${context}\\"$$($(location @npm//json/bin:json) -f samples/$$p/data.json title)\\": \\"$$p\\""
i=$$((i + 1))
done
context="$${context}}}"
echo -e $${context} > $@
'''

# Used to generate data.json
#
# genrule(
# name = "data",
# outs = ["data.json"],
# cmd = CMD,
# local = 1,
# tools = [
# "@npm//json/bin:json",
# "@npm//lerna/bin:lerna",
# ],
# )

genrule(
name = "index",
srcs = [
":data.json",
":index.njk",
"//shared:templates",
],
outs = ["index.html"],
cmd = "$(location @npm//nunjucks-cli/bin:nunjucks) $(location index.njk) $(location data.json) -p . && cat index.html > $@",
tools = ["@npm//nunjucks-cli/bin:nunjucks"],
)


eslint_test(
name = "eslint",
args = ["samples/**/*.js"],
data = [
# config files
":.eslintrc.json",
"//samples:.eslintrc.json",
# files to test
"//samples:inputs",
# plugins
"@npm//eslint-config-prettier",
"@npm//eslint-plugin-jest",
"@npm//eslint-plugin-prettier",
],
)

license_check_and_add_test(
name = "license_check",
args = [
"check",
"**/*.js",
"-f",
".license-check.json",
],
data = [
":.license-check.json",
":LICENSE",
"//samples:inputs",
],
)
13 changes: 4 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,18 @@ Samples for the Google Maps JavaScript API.
## Development
**Note**: The default branch for this repo is dev and **not** master.

Start a server that will reload as built files change.
Start a server with all samples.

```
npm run serve
yarn run serve
```

Build files as they change using one of these options:
1. Limited to a single sample: `lerna --scope circle-simple run build:watch`
2. Building all samples on change: `npm run build:watch`
3. Limited to matching scope: `lerna --scope control-* --concurrency 16 run build:watch` Requires a concurrency value > # of samples.

Alternatively, `npm run serve:watch` can be called to wrap `npm run serve` and `npm build:watch`.
Bazel is used for the build system and can be called similar to `npx bazel build //...`.

## Other Resources
- [Google Maps Documentation](https://developers.google.com/maps/documentation/javascript/tutorial)
- [Google Maps Reference Documenations](https://developers.google.com/maps/documentation/javascript/reference/)
- [Google Maps Typings](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/googlemaps) - Community supported `npm i -D @types/googlemaps`
- [Google Maps Typings](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/googlemaps) - Community supported `yarn i -D @types/googlemaps`
- [Google Maps Utilitiies](https://github.com/googlemaps/v3-utility-library)

## Support
Expand Down
58 changes: 58 additions & 0 deletions WORKSPACE
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# Bazel workspace created by @bazel/create 0.41.0

# Declares that this directory is the root of a Bazel workspace.
# See https://docs.bazel.build/versions/master/build-ref.html#workspace
workspace(
# How this workspace would be referenced with absolute labels from another workspace
name = "googlemaps_js_samples",
# Map the @npm bazel workspace to the node_modules directory.
# This lets Bazel use the same node_modules as other local tooling.
managed_directories = {"@npm": ["node_modules"]},
)

# Install the nodejs "bootstrap" package
# This provides the basic tools for running and packaging nodejs programs in Bazel
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")

http_archive(
name = "build_bazel_rules_nodejs",
sha256 = "8dc1466f8563f3aa4ac7ab7aa3c96651eb7764108219f40b2d1c918e1a81c601",
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/0.41.0/rules_nodejs-0.41.0.tar.gz"],
)

load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install")

yarn_install(
name = "npm",
package_json = "//:package.json",
yarn_lock = "//:yarn.lock",
)

# Install any Bazel rules which were extracted earlier by the npm_install rule.
load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")

install_bazel_dependencies()

# Setup TypeScript toolchain
load("@npm_bazel_typescript//:index.bzl", "ts_setup_workspace")

ts_setup_workspace()

http_archive(
name = "io_bazel_rules_sass",
sha256 = "617e444f47a1f3e25eb1b6f8e88a2451d54a2afdc7c50518861d9f706fc8baaa",
strip_prefix = "rules_sass-1.23.7",
# Make sure to check for the latest version when you install
url = "https://github.com/bazelbuild/rules_sass/archive/1.23.7.zip",
)

# Fetch required transitive dependencies. This is an optional step because you
# can always fetch the required NodeJS transitive dependency on your own.
load("@io_bazel_rules_sass//:package.bzl", "rules_sass_dependencies")

rules_sass_dependencies()

# Setup repositories which are needed for the Sass rules.
load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")

sass_repositories()
3 changes: 2 additions & 1 deletion babel.config.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
}
}
]
]
],
"sourceType": "script"
}
22 changes: 0 additions & 22 deletions build/index.sh

This file was deleted.

8 changes: 0 additions & 8 deletions build/move_dist.sh

This file was deleted.

Loading

0 comments on commit 0618987

Please sign in to comment.