Skip to content

Commit 6a526a9

Browse files
committed
refactor(bazel): drop interop support for api golden infra (#2924)
Drop the interop setup for api goldens code PR Close #2924
1 parent 0dd93ab commit 6a526a9

File tree

19 files changed

+168
-229
lines changed

19 files changed

+168
-229
lines changed

bazel/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ ts_config(
77
name = "tsconfig",
88
src = "tsconfig.json",
99
visibility = ["//bazel:__subpackages__"],
10+
deps = [
11+
"//bazel:node_modules/@types/node",
12+
],
1013
)
1114

1215
filegroup(

bazel/api-golden/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ ts_project(
1212
srcs = [
1313
"find_entry_points.ts",
1414
"index_npm_packages.cts",
15-
"interop_module_mappings.ts",
1615
"path-normalize.ts",
1716
"test_api_report.ts",
1817
],
18+
declaration = True,
1919
tsconfig = "//bazel:tsconfig",
2020
deps = [
2121
"//bazel:node_modules/@microsoft/api-extractor",

bazel/api-golden/api_golden_test.bzl

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
2+
load("@aspect_rules_js//npm:defs.bzl", "npm_package")
3+
load("@bazel_skylib//rules:write_file.bzl", "write_file")
4+
load("//bazel/api-golden:api_golden_test_npm_package.bzl", "api_golden_test_npm_package", "default_strip_export_pattern")
5+
6+
def api_golden_test(
7+
name,
8+
golden,
9+
entry_point,
10+
data = [],
11+
strip_export_pattern = default_strip_export_pattern,
12+
types = [],
13+
**kwargs):
14+
# We can't directly write `package.json` as this could cause conflicts
15+
# if there are multiple individual file tests in the same Bazel package.
16+
write_file(
17+
name = "%s_synthetic_package_json" % name,
18+
out = "%s_package.json" % name,
19+
content = [json.encode({
20+
"name": name,
21+
"exports": {
22+
".": {
23+
"types": entry_point,
24+
},
25+
},
26+
})],
27+
)
28+
29+
npm_package(
30+
name = "%s_js_package" % name,
31+
srcs = data,
32+
testonly = True,
33+
)
34+
35+
copy_to_directory(
36+
name = "%s_synthetic_package" % name,
37+
srcs = [
38+
"%s_synthetic_package_json" % name,
39+
"%s_js_package" % name,
40+
],
41+
testonly = True,
42+
replace_prefixes = {
43+
"%s_" % name: "",
44+
"%s_js_package/" % name: "",
45+
},
46+
)
47+
48+
api_golden_test_npm_package(
49+
name = name,
50+
golden_dir = golden,
51+
data = [":%s_synthetic_package" % name] + data,
52+
npm_package = "%s/%s_synthetic_package" % (native.package_name(), name),
53+
strip_export_pattern = strip_export_pattern,
54+
types = types,
55+
**kwargs
56+
)

bazel/api-golden/index_rjs.bzl renamed to bazel/api-golden/api_golden_test_npm_package.bzl

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ def api_golden_test_npm_package(
1212
npm_package,
1313
data = [],
1414
strip_export_pattern = default_strip_export_pattern,
15-
types = {},
16-
interop_mode = False,
15+
types = [],
1716
**kwargs):
1817
"""Builds an API report for all entry-points within the given NPM package and compares it.
1918
@@ -24,7 +23,6 @@ def api_golden_test_npm_package(
2423
data: Runtime dependenices needed for the rule (e.g. the tree artifact of the NPM package)
2524
strip_export_pattern: An optional regular expression to filter out exports from the golden.
2625
types: Optional list of type targets to make available in the API report generation.
27-
interop_mode: Whether we are compiling in `rules_nodejs` interop mode.
2826
**kwargs: Other arguments passed to `js_binary`/`js_test` (depending on approval mode)
2927
"""
3028

@@ -33,18 +31,13 @@ def api_golden_test_npm_package(
3331
kwargs["tags"] = kwargs.get("tags", []) + ["api_guard"]
3432

3533
data.append("@devinfra//bazel/api-golden")
36-
37-
type_names = []
38-
for type_label, n in types.items():
39-
data.append(type_label)
40-
type_names.append(n)
34+
data.extend(types)
4135

4236
js_test(
4337
name = name,
4438
data = data,
4539
entry_point = "@devinfra//bazel/api-golden:index_npm_packages.cjs",
46-
args = [golden_dir, npm_package, "false", quoted_export_pattern] + type_names,
47-
env = {"RJS_MODE": "true" if not interop_mode else "false"},
40+
args = [golden_dir, npm_package, "false", quoted_export_pattern],
4841
**kwargs
4942
)
5043

@@ -53,10 +46,6 @@ def api_golden_test_npm_package(
5346
testonly = True,
5447
data = data,
5548
entry_point = "@devinfra//bazel/api-golden:index_npm_packages.cjs",
56-
args = [golden_dir, npm_package, "true", quoted_export_pattern] + type_names,
57-
# TODO: Determine why this is needed but only for this `.accept` action
58-
# https://github.com/angular/dev-infra/issues/2742
59-
patch_node_fs = False,
60-
env = {"RJS_MODE": "true" if not interop_mode else "false"},
49+
args = [golden_dir, npm_package, "true", quoted_export_pattern],
6150
**kwargs
6251
)

bazel/api-golden/index.bzl

Lines changed: 4 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,5 @@
1-
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
2-
load("@bazel_skylib//rules:write_file.bzl", "write_file")
3-
load("@build_bazel_rules_nodejs//:index.bzl", "pkg_npm")
4-
load("//bazel/api-golden:index_rjs.bzl", _rjs_api_golden_test_npm_package = "api_golden_test_npm_package")
1+
load("//bazel/api-golden:api_golden_test.bzl", _api_golden_test = "api_golden_test")
2+
load("//bazel/api-golden:api_golden_test_npm_package.bzl", _api_golden_test_npm_package = "api_golden_test_npm_package")
53

6-
default_strip_export_pattern = "^ɵ(?!ɵdefineInjectable|ɵinject|ɵInjectableDef)"
7-
8-
def extract_names_from_npm_targets(type_targets):
9-
types = {}
10-
11-
for type_target in type_targets:
12-
type_label = Label(type_target)
13-
type_package = type_label.package
14-
15-
if type_label.workspace_name != "npm" or not type_package.startswith("@types/"):
16-
fail("Expected type targets to be part of the `@npm` workspace." +
17-
"e.g. `@npm//@types/nodes`.")
18-
19-
types[type_target] = type_package[len("@types/"):]
20-
21-
return types
22-
23-
def api_golden_test(
24-
name,
25-
golden,
26-
entry_point,
27-
data = [],
28-
strip_export_pattern = default_strip_export_pattern,
29-
types = [],
30-
**kwargs):
31-
# We can't directly write `package.json` as this could cause conflicts
32-
# if there are multiple individual file tests in the same Bazel package.
33-
write_file(
34-
name = "%s_synthetic_package_json" % name,
35-
out = "%s_package.json" % name,
36-
content = [json.encode({
37-
"name": name,
38-
"exports": {
39-
".": {
40-
"types": entry_point,
41-
},
42-
},
43-
})],
44-
)
45-
46-
pkg_npm(
47-
name = "%s_js_package" % name,
48-
deps = data,
49-
testonly = True,
50-
)
51-
52-
copy_to_directory(
53-
name = "%s_synthetic_package" % name,
54-
srcs = ["%s_synthetic_package_json" % name, "%s_js_package" % name],
55-
testonly = True,
56-
replace_prefixes = {
57-
"%s_" % name: "",
58-
"%s_js_package/" % name: "",
59-
},
60-
)
61-
62-
_rjs_api_golden_test_npm_package(
63-
no_copy_to_bin = types,
64-
name = name,
65-
golden_dir = fixup_path_for_rules_js(golden),
66-
data = [":%s_synthetic_package" % name] + data,
67-
npm_package = "%s/%s_synthetic_package" % (native.package_name(), name),
68-
strip_export_pattern = strip_export_pattern,
69-
types = extract_names_from_npm_targets(types),
70-
interop_mode = True,
71-
**kwargs
72-
)
73-
74-
def api_golden_test_npm_package(
75-
name,
76-
golden_dir,
77-
npm_package,
78-
data = [],
79-
strip_export_pattern = default_strip_export_pattern,
80-
types = [],
81-
**kwargs):
82-
_rjs_api_golden_test_npm_package(
83-
name = name,
84-
no_copy_to_bin = types,
85-
golden_dir = fixup_path_for_rules_js(golden_dir),
86-
npm_package = fixup_path_for_rules_js(npm_package),
87-
data = data,
88-
strip_export_pattern = strip_export_pattern,
89-
types = extract_names_from_npm_targets(types),
90-
interop_mode = True,
91-
**kwargs
92-
)
93-
94-
def fixup_path_for_rules_js(p):
95-
segs = p.split("/")
96-
return "/".join(segs[1:])
4+
api_golden_test_npm_package = _api_golden_test_npm_package
5+
api_golden_test = _api_golden_test

bazel/api-golden/index_npm_packages.cts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ async function main(
125125
if (singleFileMode) {
126126
console.error(
127127
chalk.red(
128-
`The golden is out of date and can be updated by running:\n - yarn bazel run ${process.env.TEST_TARGET}.accept`,
128+
`The golden is out of date and can be updated by running:\n - bazel run ${process.env.TEST_TARGET}.accept`,
129129
),
130130
);
131131
} else {
@@ -134,7 +134,7 @@ async function main(
134134
console.info();
135135
console.info(
136136
chalk.yellow(
137-
`The goldens can be updated by running:\n - yarn bazel run ${process.env.TEST_TARGET}.accept`,
137+
`The goldens can be updated by running:\n - bazel run ${process.env.TEST_TARGET}.accept`,
138138
),
139139
);
140140
}

bazel/api-golden/interop_module_mappings.ts

Lines changed: 0 additions & 87 deletions
This file was deleted.

bazel/api-golden/test/BUILD.bazel

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin")
1+
load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin")
22
load("//bazel/api-golden:index.bzl", "api_golden_test", "api_golden_test_npm_package")
33

44
package(default_visibility = ["//bazel/api-golden/test:__pkg__"])
@@ -20,8 +20,7 @@ api_golden_test(
2020
"//bazel/api-golden/test/fixtures:test_lib",
2121
],
2222
entry_point = "./fixtures/test_fixture.d.ts",
23-
golden = "dev-infra/bazel/api-golden/test/goldens/explicit_file",
24-
types = ["@npm//@types/node"],
23+
golden = "bazel/api-golden/test/goldens/explicit_file",
2524
)
2625

2726
api_golden_test_npm_package(
@@ -30,11 +29,11 @@ api_golden_test_npm_package(
3029
":test_package_golden_dir",
3130
"//bazel/api-golden/test/fixtures:test_package_fixture",
3231
],
33-
golden_dir = "dev-infra/bazel/api-golden/test/goldens/test_package",
34-
npm_package = "dev-infra/bazel/api-golden/test/fixtures/test_package",
32+
golden_dir = "bazel/api-golden/test/goldens/test_package",
33+
npm_package = "bazel/api-golden/test/fixtures/test_package",
3534
# API extractor needs to be able to resolve `@babel/core` due to an aliased namespace
3635
# we expose as part of the `nested.d.ts` fake entry-point.
37-
types = ["@npm//@types/babel__core"],
36+
types = ["//bazel:node_modules/@types/babel__core"],
3837
)
3938

4039
api_golden_test_npm_package(
@@ -43,6 +42,6 @@ api_golden_test_npm_package(
4342
":pkg_no_exports_field_golden_dir",
4443
"//bazel/api-golden/test/fixtures:pkg_no_exports_field_fixture",
4544
],
46-
golden_dir = "dev-infra/bazel/api-golden/test/goldens/pkg_no_exports_field",
47-
npm_package = "dev-infra/bazel/api-golden/test/fixtures/pkg_no_exports_field",
45+
golden_dir = "bazel/api-golden/test/goldens/pkg_no_exports_field",
46+
npm_package = "bazel/api-golden/test/fixtures/pkg_no_exports_field",
4847
)

0 commit comments

Comments
 (0)