mirror of
https://github.com/angular/angular
synced 2026-05-24 09:28:37 +00:00
AIO has two risk places where `node_modules` folders may exist and may be accidentally picked up by Bazel- even though they are already added as part of `.bazelignore` and made visible through `.gitignore`. It doesn't hurt instructing Bazel to always ignore `node_modules` as part of the `glob` instruction. Co-authored-by: Joey Perrott <josephperrott@gmail.com> PR Close #48329
225 lines
10 KiB
Python
225 lines
10 KiB
Python
load("@build_bazel_rules_nodejs//:index.bzl", "npm_package_bin")
|
|
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
|
|
load("//tools:defaults.bzl", "nodejs_test")
|
|
load("//:yarn.bzl", "YARN_LABEL")
|
|
load("//:packages.bzl", "AIO_EXAMPLE_PACKAGES", "to_package_label")
|
|
|
|
# This map controls which examples are included and whether or not to generate
|
|
# a stackblitz live examples and zip archives. Keys are the example name, and values
|
|
# take the form:
|
|
#
|
|
# {"stackblitz": boolean, "zip": boolean}
|
|
#
|
|
# Set "stackblitz" to True to generate live examples from any stackblitz config files
|
|
# found in the example. Set "zip" to True to generate archives for any stackblitz or
|
|
# zipper configuration file found in the example.
|
|
#
|
|
# To ignore an example, comment out its row.
|
|
|
|
EXAMPLES = {
|
|
"accessibility": {"stackblitz": True, "zip": True},
|
|
"ajs-quick-reference": {"stackblitz": True, "zip": True},
|
|
"angular-compiler-options": {"stackblitz": True, "zip": True},
|
|
"animations": {"stackblitz": True, "zip": True},
|
|
"architecture": {"stackblitz": True, "zip": True},
|
|
"attribute-binding": {"stackblitz": True, "zip": True},
|
|
"attribute-directives": {"stackblitz": True, "zip": True},
|
|
"binding-syntax": {"stackblitz": True, "zip": True},
|
|
"bootstrapping": {"stackblitz": True, "zip": True},
|
|
"built-in-directives": {"stackblitz": True, "zip": True},
|
|
"built-in-template-functions": {"stackblitz": True, "zip": True},
|
|
"comparing-observables": {"stackblitz": False, "zip": False},
|
|
"component-interaction": {"stackblitz": True, "zip": True},
|
|
"component-overview": {"stackblitz": True, "zip": True},
|
|
"component-styles": {"stackblitz": True, "zip": True},
|
|
"content-projection": {"stackblitz": True, "zip": True},
|
|
"dependency-injection": {"stackblitz": True, "zip": True},
|
|
"dependency-injection-in-action": {"stackblitz": True, "zip": True},
|
|
"deprecation-guide": {"stackblitz": True, "zip": True},
|
|
"displaying-data": {"stackblitz": True, "zip": True},
|
|
"docs-style-guide": {"stackblitz": True, "zip": True},
|
|
"dynamic-component-loader": {"stackblitz": True, "zip": True},
|
|
"dynamic-form": {"stackblitz": True, "zip": True},
|
|
"elements": {"stackblitz": True, "zip": True},
|
|
"event-binding": {"stackblitz": True, "zip": True},
|
|
"feature-modules": {"stackblitz": True, "zip": True},
|
|
"form-validation": {"stackblitz": True, "zip": True},
|
|
"forms": {"stackblitz": True, "zip": True},
|
|
"forms-overview": {"stackblitz": True, "zip": True},
|
|
"getting-started": {"stackblitz": True, "zip": True},
|
|
"getting-started-v0": {"stackblitz": True, "zip": True},
|
|
"hierarchical-dependency-injection": {"stackblitz": True, "zip": True},
|
|
"http": {"stackblitz": True, "zip": True},
|
|
"i18n": {"stackblitz": True, "zip": True},
|
|
"inputs-outputs": {"stackblitz": True, "zip": True},
|
|
"interpolation": {"stackblitz": True, "zip": True},
|
|
"lazy-loading-ngmodules": {"stackblitz": True, "zip": True},
|
|
"lifecycle-hooks": {"stackblitz": True, "zip": True},
|
|
"ngcontainer": {"stackblitz": True, "zip": True},
|
|
"ngmodules": {"stackblitz": True, "zip": True},
|
|
"observables": {"stackblitz": False, "zip": False},
|
|
"observables-in-angular": {"stackblitz": False, "zip": False},
|
|
"pipes": {"stackblitz": True, "zip": True},
|
|
"practical-observable-usage": {"stackblitz": False, "zip": False},
|
|
"property-binding": {"stackblitz": True, "zip": True},
|
|
"providers": {"stackblitz": True, "zip": True},
|
|
"providers-viewproviders": {"stackblitz": True, "zip": True},
|
|
"reactive-forms": {"stackblitz": True, "zip": True},
|
|
"resolution-modifiers": {"stackblitz": True, "zip": True},
|
|
"router": {"stackblitz": True, "zip": True},
|
|
"router-tutorial": {"stackblitz": True, "zip": True},
|
|
"routing-with-urlmatcher": {"stackblitz": True, "zip": True},
|
|
"rx-library": {"stackblitz": False, "zip": False},
|
|
"schematics-for-libraries": {"stackblitz": False, "zip": True},
|
|
"security": {"stackblitz": True, "zip": True},
|
|
"service-worker-getting-started": {"stackblitz": False, "zip": False},
|
|
"setup": {"stackblitz": False, "zip": False},
|
|
"structural-directives": {"stackblitz": True, "zip": True},
|
|
"styleguide": {"stackblitz": False, "zip": False},
|
|
"template-expression-operators": {"stackblitz": True, "zip": True},
|
|
"template-reference-variables": {"stackblitz": True, "zip": True},
|
|
"template-syntax": {"stackblitz": True, "zip": True},
|
|
"testing": {"stackblitz": True, "zip": True},
|
|
"toh-pt0": {"stackblitz": True, "zip": True},
|
|
"toh-pt1": {"stackblitz": True, "zip": True},
|
|
"toh-pt2": {"stackblitz": True, "zip": True},
|
|
"toh-pt3": {"stackblitz": True, "zip": True},
|
|
"toh-pt4": {"stackblitz": True, "zip": True},
|
|
"toh-pt5": {"stackblitz": True, "zip": True},
|
|
"toh-pt6": {"stackblitz": True, "zip": True},
|
|
"two-way-binding": {"stackblitz": True, "zip": True},
|
|
"universal": {"stackblitz": False, "zip": True},
|
|
"upgrade-lazy-load-ajs": {"stackblitz": False, "zip": True},
|
|
"upgrade-module": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-1-typescript": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-2-hybrid": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-3-final": {"stackblitz": False, "zip": False},
|
|
"user-input": {"stackblitz": True, "zip": True},
|
|
"view-encapsulation": {"stackblitz": True, "zip": True},
|
|
"what-is-angular": {"stackblitz": True, "zip": True},
|
|
}
|
|
|
|
def docs_example(name, test = True, test_tags = [], test_exec_properties = {}, flaky = False):
|
|
"""Stamp targets for adding boilerplate to examples, creating live examples, and creating zips.
|
|
|
|
Args:
|
|
name: name of the example
|
|
test: whether to run e2e tests
|
|
test_tags: tags to add to the test target
|
|
test_exec_properties: exec properties to add to the test's execution platform
|
|
"""
|
|
if name not in EXAMPLES:
|
|
# buildifier: disable=print
|
|
print("WARNING: Example '%s' is being ignored. To include it, add an entry to the EXAMPLES map in aio/content/examples/examples.bzl." % name)
|
|
return
|
|
|
|
native.filegroup(
|
|
name = "files",
|
|
srcs = native.glob(["**"], exclude = [
|
|
"BUILD.bazel",
|
|
"**/node_modules/**", # Node modules may exist from the legacy setup.
|
|
]),
|
|
)
|
|
|
|
# Generate example boilerplate
|
|
npm_package_bin(
|
|
name = "boilerplate",
|
|
args = ["add", native.package_name(), "$(@D)"],
|
|
data = [":files"],
|
|
output_dir = True,
|
|
tool = "//aio/tools/examples:example-boilerplate",
|
|
)
|
|
|
|
# Copy example files and boilerplate to the output tree
|
|
copy_to_directory(
|
|
name = name,
|
|
# Prevent sorting so that boilerplate overwrites example sources
|
|
# buildifier: do not sort
|
|
srcs = [
|
|
":files",
|
|
":boilerplate",
|
|
],
|
|
replace_prefixes = {
|
|
"boilerplate": "",
|
|
"aio/tools/examples/shared": "",
|
|
},
|
|
allow_overwrites = True,
|
|
)
|
|
|
|
stackblitz_configs = native.glob(["*stackblitz.json"])
|
|
|
|
if EXAMPLES[name]["stackblitz"] and len(stackblitz_configs) > 0:
|
|
# Generate stackblitz live example(s)
|
|
outs = [file_name.replace(".json", ".html") for file_name in stackblitz_configs]
|
|
npm_package_bin(
|
|
name = "stackblitz",
|
|
args = [
|
|
"$(execpath :%s)" % name,
|
|
"$(RULEDIR)",
|
|
],
|
|
data = [":%s" % name],
|
|
outs = outs,
|
|
tool = "//aio/tools/stackblitz-builder:generate-stackblitz",
|
|
)
|
|
|
|
zip_configs = stackblitz_configs + native.glob(["zipper.json"])
|
|
|
|
if EXAMPLES[name]["zip"] and len(zip_configs) > 0:
|
|
# Generate example zip(s)
|
|
outs = [file_name.replace("stackblitz", name).replace("zipper", name).replace(".json", ".zip") for file_name in zip_configs]
|
|
npm_package_bin(
|
|
name = "example-zip",
|
|
args = [
|
|
"$(execpath :%s)" % name,
|
|
"$(RULEDIR)",
|
|
],
|
|
data = [":%s" % name],
|
|
outs = outs,
|
|
tool = "//aio/tools/example-zipper:generate-example-zip",
|
|
)
|
|
|
|
if test:
|
|
EXAMPLE_DEPS_WORKSPACE_NAME = "aio_example_deps"
|
|
|
|
LOCAL_PACKAGE_DEPS = [to_package_label(dep) for dep in AIO_EXAMPLE_PACKAGES]
|
|
|
|
# Local package deps are passed as args to the test script in the form "@package/name#path/to/package"
|
|
# for the script's convenience.
|
|
LOCAL_PACKAGE_ARGS = ["--localPackage=%s#$(rootpath %s)" % (dep, to_package_label(dep)) for dep in AIO_EXAMPLE_PACKAGES]
|
|
|
|
nodejs_test(
|
|
name = "e2e",
|
|
data = [
|
|
":%s" % name,
|
|
YARN_LABEL,
|
|
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium",
|
|
"//aio/tools/examples:run-example-e2e",
|
|
"//aio/tools:windows-chromium-path",
|
|
# We install the whole node modules for runtime deps of e2e tests
|
|
"@{workspace}//:node_modules_files".format(workspace = EXAMPLE_DEPS_WORKSPACE_NAME),
|
|
] + select({
|
|
"//aio:aio_local_deps": LOCAL_PACKAGE_DEPS,
|
|
"//conditions:default": [],
|
|
}),
|
|
args = [
|
|
"$(rootpath :%s)" % name,
|
|
"$(rootpath %s)" % YARN_LABEL,
|
|
EXAMPLE_DEPS_WORKSPACE_NAME,
|
|
] + select({
|
|
"//aio:aio_local_deps": LOCAL_PACKAGE_ARGS,
|
|
"//conditions:default": [],
|
|
}),
|
|
entry_point = "//aio/tools/examples:run-example-e2e.mjs",
|
|
env = {
|
|
"CHROME_BIN": "$(CHROMIUM)",
|
|
"CHROMEDRIVER_BIN": "$(CHROMEDRIVER)",
|
|
},
|
|
toolchains = [
|
|
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias",
|
|
],
|
|
exec_properties = test_exec_properties,
|
|
flaky = flaky,
|
|
# RBE complains about superseeding the max inputs limit (70,000) due to the
|
|
# size of the input tree.
|
|
tags = ["no-remote-exec"] + test_tags,
|
|
)
|