Skip to content

Commit 1e74db9

Browse files
devversionandrewseguin
authored andcommitted
build: ensure all entry-points are included in release package (#17186)
* build: ensure all entry-points are included in release package (1) Overhauls the whole release packaging structure in Bazel. Since it is very verbose to put everything into a single `.bzl` file in the project root, information for each release package will be stored in the actual package folder in a file called `config.bzl`. (2) We no longer use the term `PACKAGE` for entry-points of packages. It's not correct and easy to confuse with the actual package. (3) We group entry-points in nested arrays. This has no effect for now, but it gives us a nicer way of configurating (nested) entry-points. It might become useful in the future as well as we have information about nested entry-points of an entry-point. (4) Revisits the list of all entry-points so that we now include all `*/testing` entry-points in the release output. Also a few MDC prototypes were not included in the Bazel material-experimental release output. Same as clipboard in cdk-experimental. (5) Simplifies the logic to generate the rollup globals (through functions). Also we move the rollup globals into a separate `.bzl` file. Also rollup globals are now automatically passed into the `ng_package` rule.. so we don't need to re-declare them for each package. * fixup! build: ensure all entry-points are included in release package Address feedback * fixup! build: ensure all entry-points are included in release package Remove no_test
1 parent 1c307c8 commit 1e74db9

File tree

22 files changed

+325
-274
lines changed

22 files changed

+325
-274
lines changed

packages.bzl

Lines changed: 0 additions & 214 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,3 @@
1-
# List of all components / subpackages.
2-
3-
CDK_PACKAGES = [
4-
"a11y",
5-
"accordion",
6-
"bidi",
7-
"coercion",
8-
"collections",
9-
"drag-drop",
10-
"keycodes",
11-
"layout",
12-
"observers",
13-
"overlay",
14-
"platform",
15-
"portal",
16-
"scrolling",
17-
"stepper",
18-
"table",
19-
"text-field",
20-
"tree",
21-
22-
# NOTE: "testing" should not be listed here as it will be treated as its own
23-
# package. This is because we don't want to include "testing the testing utilities
24-
# in the release output.
25-
]
26-
27-
# Within the CDK, only a few targets have sass libraries which need to be
28-
# part of the release package. This list declares all CDK targets with sass
29-
# libraries that need to be included and re-exported at the package root.
30-
CDK_TARGETS_WITH_STYLES = [
31-
"a11y",
32-
"overlay",
33-
"text-field",
34-
]
35-
36-
CDK_SCSS_LIBS = [
37-
"//src/cdk/%s:%s_scss_lib" % (p, p.replace("-", "_"))
38-
for p in CDK_TARGETS_WITH_STYLES
39-
]
40-
41-
CDK_TARGETS = ["//src/cdk"] + ["//src/cdk/%s" % p for p in CDK_PACKAGES]
42-
43-
CDK_EXPERIMENTAL_PACKAGES = [
44-
"dialog",
45-
"popover-edit",
46-
"scrolling",
47-
]
48-
49-
CDK_EXPERIMENTAL_TARGETS = ["//src/cdk-experimental"] + [
50-
"//src/cdk-experimental/%s" % p
51-
for p in CDK_EXPERIMENTAL_PACKAGES
52-
]
53-
54-
MATERIAL_PACKAGES = [
55-
"autocomplete",
56-
"badge",
57-
"bottom-sheet",
58-
"button",
59-
"button-toggle",
60-
"card",
61-
"checkbox",
62-
"chips",
63-
"core",
64-
"datepicker",
65-
"dialog",
66-
"divider",
67-
"expansion",
68-
"form-field",
69-
"grid-list",
70-
"icon",
71-
"input",
72-
"list",
73-
"menu",
74-
"paginator",
75-
"progress-bar",
76-
"progress-spinner",
77-
"radio",
78-
"select",
79-
"sidenav",
80-
"slide-toggle",
81-
"slider",
82-
"snack-bar",
83-
"sort",
84-
"stepper",
85-
"table",
86-
"tabs",
87-
"toolbar",
88-
"tooltip",
89-
"tree",
90-
]
91-
92-
MATERIAL_TARGETS = ["//src/material"] + ["//src/material/%s" % p for p in MATERIAL_PACKAGES]
93-
94-
# List that references the sass libraries for each Material package. This can be used to create
95-
# the theming scss-bundle or to specify dependencies for the all-theme.scss file.
96-
MATERIAL_SCSS_LIBS = [
97-
"//src/material/%s:%s_scss_lib" % (p, p.replace("-", "_"))
98-
for p in MATERIAL_PACKAGES
99-
]
100-
101-
MATERIAL_EXPERIMENTAL_PACKAGES = [
102-
"mdc-button",
103-
"mdc-card",
104-
"mdc-checkbox",
105-
"mdc-chips",
106-
"mdc-tabs",
107-
"mdc-helpers",
108-
"mdc-menu",
109-
"mdc-radio",
110-
"mdc-slide-toggle",
111-
"mdc-slider",
112-
"popover-edit",
113-
]
114-
115-
MATERIAL_EXPERIMENTAL_TARGETS = ["//src/material-experimental"] + [
116-
"//src/material-experimental/%s" % p
117-
for p in MATERIAL_EXPERIMENTAL_PACKAGES
118-
]
119-
120-
MATERIAL_EXPERIMENTAL_SCSS_LIBS = [
121-
"//src/material-experimental/%s:%s_scss_lib" % (p, p.replace("-", "_"))
122-
for p in MATERIAL_EXPERIMENTAL_PACKAGES
123-
]
124-
1251
# Each individual package uses a placeholder for the version of Angular to ensure they're
1262
# all in-sync. This map is passed to each ng_package rule to stamp out the appropriate
1273
# version for the placeholders.
@@ -132,96 +8,6 @@ VERSION_PLACEHOLDER_REPLACEMENTS = {
1328
"0.0.0-NG": ANGULAR_PACKAGE_VERSION,
1339
}
13410

135-
# Base rollup globals for everything in the repo.
136-
ROLLUP_GLOBALS = {
137-
"@angular/cdk": "ng.cdk",
138-
"@angular/cdk-experimental": "ng.cdkExperimental",
139-
"@angular/google-maps": "ng.googleMaps",
140-
"@angular/material": "ng.material",
141-
"@angular/material-experimental": "ng.materialExperimental",
142-
"@angular/youtube-player": "ng.youtubePlayer",
143-
144-
# MDC Web
145-
"@material/animation": "mdc.animation",
146-
"@material/auto-init": "mdc.autoInit",
147-
"@material/base": "mdc.base",
148-
"@material/checkbox": "mdc.checkbox",
149-
"@material/chips": "mdc.chips",
150-
"@material/dialog": "mdc.dialog",
151-
"@material/dom": "mdc.dom",
152-
"@material/drawer": "mdc.drawer",
153-
"@material/floating-label": "mdc.floatingLabel",
154-
"@material/form-field": "mdc.formField",
155-
"@material/grid-list": "mdc.gridList",
156-
"@material/icon-button": "mdc.iconButton",
157-
"@material/line-ripple": "mdc.lineRipple",
158-
"@material/linear-progress": "mdc.linearProgress",
159-
"@material/list": "mdc.list",
160-
"@material/menu": "mdc.menu",
161-
"@material/menu-surface": "mdc.menuSurface",
162-
"@material/notched-outline": "mdc.notchedOutline",
163-
"@material/radio": "mdc.radio",
164-
"@material/ripple": "mdc.ripple",
165-
"@material/select": "mdc.select",
166-
"@material/slider": "mdc.slider",
167-
"@material/snackbar": "mdc.snackbar",
168-
"@material/switch": "mdc.switch",
169-
"@material/tab": "mdc.tab",
170-
"@material/tab-bar": "mdc.tabBar",
171-
"@material/tab-indicator": "mdc.tabIndicator",
172-
"@material/tab-scroller": "mdc.tabScroller",
173-
"@material/text-field": "mdc.textField",
174-
"@material/top-app-bar": "mdc.topAppBar",
175-
"moment": "moment",
176-
"tslib": "tslib",
177-
}
178-
179-
# Rollup globals for cdk subpackages in the form of, e.g., {"@angular/cdk/table": "ng.cdk.table"}
180-
ROLLUP_GLOBALS.update({
181-
"@angular/cdk/%s" % p: "ng.cdk.%s" % p
182-
for p in CDK_PACKAGES
183-
})
184-
185-
# Rollup globals for cdk subpackages in the form of, e.g.,
186-
# {"@angular/cdk-experimental/scrolling": "ng.cdkExperimental.scrolling"}
187-
ROLLUP_GLOBALS.update({
188-
"@angular/cdk-experimental/%s" % p: "ng.cdkExperimental.%s" % p
189-
for p in CDK_EXPERIMENTAL_PACKAGES
190-
})
191-
192-
# Rollup globals for material subpackages, e.g., {"@angular/material/list": "ng.material.list"}
193-
ROLLUP_GLOBALS.update({
194-
"@angular/material/%s" % p: "ng.material.%s" % p
195-
for p in MATERIAL_PACKAGES
196-
})
197-
198-
# Rollup globals for material experimental subpackages, e.g.,
199-
# {"@angular/material-experimental/list": "ng.materialExperimental.list"}
200-
ROLLUP_GLOBALS.update({
201-
"@angular/material-experimental/%s" % p: "ng.materialExperimental.%s" % p
202-
for p in MATERIAL_EXPERIMENTAL_PACKAGES
203-
})
204-
205-
# Rollup globals the examples package. Since individual examples are
206-
# grouped by package and component, the primary entry-point imports
207-
# from entry-points which should be treated as external imports.
208-
ROLLUP_GLOBALS.update({
209-
"@angular/material-examples/cdk/%s" % p: "ng.materialExamples.cdk.%s" % p
210-
for p in CDK_PACKAGES
211-
})
212-
ROLLUP_GLOBALS.update({
213-
"@angular/material-examples/cdk-experimental/%s" % p: "ng.materialExamples.cdkExperimental.%s" % p
214-
for p in CDK_EXPERIMENTAL_PACKAGES
215-
})
216-
ROLLUP_GLOBALS.update({
217-
"@angular/material-examples/material/%s" % p: "ng.materialExamples.material.%s" % p
218-
for p in MATERIAL_PACKAGES
219-
})
220-
ROLLUP_GLOBALS.update({
221-
"@angular/material-examples/material-experimental/%s" % p: "ng.materialExamples.materialExperimental.%s" % p
222-
for p in MATERIAL_EXPERIMENTAL_PACKAGES
223-
})
224-
22511
# UMD bundles for Angular packages and subpackages we depend on for development and testing.
22612
ANGULAR_LIBRARY_UMDS = [
22713
"@npm//:node_modules/@angular/animations/bundles/animations-browser.umd.js",

rollup-globals.bzl

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
load("//src/cdk:config.bzl", "CDK_ENTRYPOINTS")
2+
load("//src/cdk-experimental:config.bzl", "CDK_EXPERIMENTAL_ENTRYPOINTS")
3+
load("//src/material:config.bzl", "MATERIAL_ENTRYPOINTS", "MATERIAL_TESTING_ENTRYPOINTS")
4+
load(
5+
"//src/material-experimental:config.bzl",
6+
"MATERIAL_EXPERIMENTAL_ENTRYPOINTS",
7+
"MATERIAL_EXPERIMENTAL_TESTING_ENTRYPOINTS",
8+
)
9+
10+
# Base rollup globals for everything in the repo.
11+
ROLLUP_GLOBALS = {
12+
"@angular/cdk": "ng.cdk",
13+
"@angular/cdk-experimental": "ng.cdkExperimental",
14+
"@angular/google-maps": "ng.googleMaps",
15+
"@angular/material": "ng.material",
16+
"@angular/material-experimental": "ng.materialExperimental",
17+
"@angular/youtube-player": "ng.youtubePlayer",
18+
19+
# MDC Web
20+
"@material/animation": "mdc.animation",
21+
"@material/auto-init": "mdc.autoInit",
22+
"@material/base": "mdc.base",
23+
"@material/checkbox": "mdc.checkbox",
24+
"@material/chips": "mdc.chips",
25+
"@material/dialog": "mdc.dialog",
26+
"@material/dom": "mdc.dom",
27+
"@material/drawer": "mdc.drawer",
28+
"@material/floating-label": "mdc.floatingLabel",
29+
"@material/form-field": "mdc.formField",
30+
"@material/grid-list": "mdc.gridList",
31+
"@material/icon-button": "mdc.iconButton",
32+
"@material/line-ripple": "mdc.lineRipple",
33+
"@material/linear-progress": "mdc.linearProgress",
34+
"@material/list": "mdc.list",
35+
"@material/menu": "mdc.menu",
36+
"@material/menu-surface": "mdc.menuSurface",
37+
"@material/notched-outline": "mdc.notchedOutline",
38+
"@material/radio": "mdc.radio",
39+
"@material/ripple": "mdc.ripple",
40+
"@material/select": "mdc.select",
41+
"@material/slider": "mdc.slider",
42+
"@material/snackbar": "mdc.snackbar",
43+
"@material/switch": "mdc.switch",
44+
"@material/tab": "mdc.tab",
45+
"@material/tab-bar": "mdc.tabBar",
46+
"@material/tab-indicator": "mdc.tabIndicator",
47+
"@material/tab-scroller": "mdc.tabScroller",
48+
"@material/text-field": "mdc.textField",
49+
"@material/top-app-bar": "mdc.topAppBar",
50+
"moment": "moment",
51+
"tslib": "tslib",
52+
}
53+
54+
# Converts a string from dash-case to lower camel case.
55+
def to_camel_case(input):
56+
segments = input.split("-")
57+
return segments[0] + "".join([x.title() for x in segments[1:]])
58+
59+
# Converts an entry-point name to a UMD module name.
60+
# e.g. "snack-bar/testing" will become "snackBar.testing".
61+
def to_umd_name(name):
62+
segments = name.split("/")
63+
return ".".join([to_camel_case(x) for x in segments])
64+
65+
# Creates globals for a given package and its entry-points.
66+
def create_globals(packageName, entryPoints):
67+
ROLLUP_GLOBALS.update({
68+
"@angular/%s/%s" % (packageName, ep): "ng.%s.%s" % (to_umd_name(packageName), to_umd_name(ep))
69+
for ep in entryPoints
70+
})
71+
72+
create_globals("cdk", CDK_ENTRYPOINTS)
73+
create_globals("cdk-experimental", CDK_EXPERIMENTAL_ENTRYPOINTS)
74+
create_globals("material", MATERIAL_ENTRYPOINTS + MATERIAL_TESTING_ENTRYPOINTS)
75+
create_globals(
76+
"material-experimental",
77+
MATERIAL_EXPERIMENTAL_ENTRYPOINTS + MATERIAL_EXPERIMENTAL_TESTING_ENTRYPOINTS,
78+
)
79+
80+
# Rollup globals the examples package. Since individual examples are
81+
# grouped by package and component, the primary entry-point imports
82+
# from entry-points which should be treated as external imports.
83+
create_globals("material-examples/cdk", CDK_ENTRYPOINTS)
84+
create_globals("material-examples/cdk-experimental", CDK_EXPERIMENTAL_ENTRYPOINTS)
85+
create_globals(
86+
"material-examples/material",
87+
MATERIAL_ENTRYPOINTS + MATERIAL_TESTING_ENTRYPOINTS,
88+
)
89+
create_globals(
90+
"material-examples/material-experimental",
91+
MATERIAL_EXPERIMENTAL_ENTRYPOINTS + MATERIAL_EXPERIMENTAL_TESTING_ENTRYPOINTS,
92+
)

src/BUILD.bazel

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
package(default_visibility = ["//visibility:public"])
22

33
load("@npm_bazel_typescript//:index.bzl", "ts_config")
4-
load("//:packages.bzl", "CDK_PACKAGES", "MATERIAL_PACKAGES")
4+
load("//src/cdk:config.bzl", "CDK_ENTRYPOINTS")
5+
load("//src/material:config.bzl", "MATERIAL_ENTRYPOINTS")
56
load("//tools:defaults.bzl", "ts_library")
67
load("//tools/dgeni:index.bzl", "dgeni_api_docs")
78

89
# List that contains all source files that need to be processed by Dgeni.
9-
apiSourceFiles = ["//src/cdk/%s:source-files" % name for name in CDK_PACKAGES] + [
10+
apiSourceFiles = ["//src/cdk/%s:source-files" % name for name in CDK_ENTRYPOINTS] + [
1011
"//src/material/%s:source-files" % name
11-
for name in MATERIAL_PACKAGES
12+
for name in MATERIAL_ENTRYPOINTS
1213
]
1314

1415
exports_files([
@@ -41,8 +42,8 @@ dgeni_api_docs(
4142
"@npm//@angular/platform-browser",
4243
],
4344
entry_points = {
44-
"cdk": CDK_PACKAGES,
45-
"material": MATERIAL_PACKAGES,
45+
"cdk": CDK_ENTRYPOINTS,
46+
"material": MATERIAL_ENTRYPOINTS,
4647
},
4748
tags = ["docs-package"],
4849
)

src/a11y-demo/BUILD.bazel

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package(default_visibility = ["//visibility:public"])
22

3-
load("//:packages.bzl", "CDK_TARGETS", "MATERIAL_TARGETS")
3+
load("//src/cdk:config.bzl", "CDK_TARGETS")
4+
load("//src/material:config.bzl", "MATERIAL_TARGETS")
45
load("//tools:defaults.bzl", "ng_module")
56
load("//tools:sass_generate_binaries.bzl", "sass_generate_binaries")
67

src/cdk-experimental/BUILD.bazel

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
11
package(default_visibility = ["//visibility:public"])
22

3-
load(
4-
"//:packages.bzl",
5-
"CDK_EXPERIMENTAL_PACKAGES",
6-
"CDK_EXPERIMENTAL_TARGETS",
7-
"ROLLUP_GLOBALS",
8-
)
9-
load("//tools:defaults.bzl", "ng_module", "ng_package")
3+
load("//src/cdk-experimental:config.bzl", "CDK_EXPERIMENTAL_TARGETS")
4+
load("//tools:defaults.bzl", "ng_package", "ts_library")
105

11-
ng_module(
6+
ts_library(
127
name = "cdk-experimental",
138
srcs = glob(
149
["*.ts"],
1510
exclude = ["**/*.spec.ts"],
1611
),
1712
module_name = "@angular/cdk-experimental",
18-
deps = ["//src/cdk-experimental/%s" % p for p in CDK_EXPERIMENTAL_PACKAGES],
13+
deps = ["@npm//@angular/core"],
1914
)
2015

2116
ng_package(
2217
name = "npm_package",
2318
srcs = ["package.json"],
2419
entry_point = ":public-api.ts",
25-
globals = ROLLUP_GLOBALS,
2620
tags = ["release-package"],
2721
deps = CDK_EXPERIMENTAL_TARGETS,
2822
)

0 commit comments

Comments
 (0)