Skip to content

Commit f42c1ea

Browse files
committed
Stamps @aspect_rules_js NPM packages.
Refs #48. This the `rules_prerender` and `@rules_prerender/declarative_shadow_dom` `package.json` files which the current version. I initially tried to use [`stamped_package_json()`](https://docs.aspect.build/rules/aspect_rules_js/docs/npm_package#stamped_package_json), but found it insufficient because `@rules_prerender/declarative_shadow_dom` includes a peer dep on `rules_prerender` which was not being stamped. I filed aspect-build/rules_js#866 to suggest this as a general feature, but opted to implement my own version for now. It also uses `jq()` under the hood to transform the input JSON. It stamps the `version` property and any `rules_prerender` or `@rules_prerender/*` dependencies. I also add a `default_version` attribute. Not so much because it is actually useful, but because it makes the rule easier to test. Technically these tests fail with `--stamp`, but I don't think that should be too much of an issue.
1 parent 6694e6a commit f42c1ea

13 files changed

Lines changed: 257 additions & 4 deletions

BUILD.bazel

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ load("@bazel_skylib//rules:build_test.bzl", "build_test")
66
load("@build_bazel_rules_nodejs//:index.bzl", "pkg_npm")
77
load("@npm_rules_js//:defs.bzl", "npm_link_all_packages")
88
load("//tools:publish.bzl", "publish_files")
9+
load("//tools/stamping:stamp_package.bzl", "stamp_package")
910
load("//:index.bzl", "link_prerender_component", "prerender_component", "prerender_component_publish_files")
1011

1112
ts_config(
@@ -24,13 +25,13 @@ ts_config(
2425
npm_link_all_packages(name = "node_modules")
2526

2627
# Makes an internal NPM package for `rules_prerender` and links it.
27-
# TODO(#48): Stamp versions.
2828
# TODO(#48): Move to `//packages/rules_prerender` once dependencies outside
2929
# that package are addressed.
30+
stamp_package(name = "package")
3031
npm_package(
3132
name = "rules_prerender_pkg",
3233
srcs = [
33-
":package.json",
34+
":package",
3435
"//packages/rules_prerender:rules_prerender_lib",
3536
],
3637
package = "rules_prerender",

WORKSPACE.bazel

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,13 @@ http_archive(
1818
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v1.23.3.tar.gz",
1919
)
2020

21-
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies")
21+
load(
22+
"@aspect_bazel_lib//lib:repositories.bzl",
23+
"aspect_bazel_lib_dependencies",
24+
"register_jq_toolchains",
25+
)
2226
aspect_bazel_lib_dependencies()
27+
register_jq_toolchains()
2328

2429
# Install the nodejs "bootstrap" package
2530
# This provides the basic tools for running and packaging nodejs programs in Bazel

examples/external/WORKSPACE.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@ workspace(name = "external")
22

33
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
44

5+
http_archive(
6+
name = "aspect_bazel_lib",
7+
sha256 = "79623d656aa23ad3fd4692ab99786c613cd36e49f5566469ed97bc9b4c655f03",
8+
strip_prefix = "bazel-lib-1.23.3",
9+
url = "https://github.com/aspect-build/bazel-lib/archive/refs/tags/v1.23.3.tar.gz",
10+
)
11+
load(
12+
"@aspect_bazel_lib//lib:repositories.bzl",
13+
"aspect_bazel_lib_dependencies",
14+
"register_jq_toolchains",
15+
)
16+
aspect_bazel_lib_dependencies()
17+
register_jq_toolchains()
18+
519
http_archive(
620
name = "build_bazel_rules_nodejs",
721
sha256 = "dcc55f810142b6cf46a44d0180a5a7fb923c04a5061e2e8d8eb05ccccc60864b",

packages/rules_prerender/declarative_shadow_dom/BUILD.bazel

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ load(
1010
load("//tools:jasmine.bzl", "jasmine_node_test")
1111
load("//tools:publish.bzl", "publish_files")
1212
load("//tools:typescript.bzl", "ts_project")
13+
load("//tools/stamping:stamp_package.bzl", "stamp_package")
1314

1415
publish_files(
1516
name = "publish_files",
@@ -22,11 +23,12 @@ prerender_component_publish_files(
2223
dep = ":declarative_shadow_dom",
2324
)
2425

26+
stamp_package(name = "package")
2527
npm_package(
2628
name = "pkg",
2729
srcs = [
2830
":declarative_shadow_dom_publish_files",
29-
"package.json",
31+
":package",
3032
],
3133
package = "@rules_prerender/declarative_shadow_dom",
3234
visibility = ["//visibility:public"],

tools/stamping/BUILD.bazel

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
load("@aspect_bazel_lib//lib:diff_test.bzl", "diff_test")
2+
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
3+
load(":stamp_package.bzl", "stamp_package")
4+
5+
exports_files(["stamp.jq"], visibility = ["//visibility:public"])
6+
7+
bzl_library(
8+
name = "stamp_package",
9+
srcs = ["stamp_package.bzl"],
10+
)
11+
12+
stamp_package(
13+
name = "stamp_package_version",
14+
package = "package_version.json",
15+
default_version = "1.2.3",
16+
testonly = True,
17+
)
18+
19+
diff_test(
20+
name = "stamp_package_version_test",
21+
file1 = ":stamp_package_version",
22+
file2 = "package_version_expected.json",
23+
)
24+
25+
stamp_package(
26+
name = "stamp_package_dependencies",
27+
package = "package_dependencies.json",
28+
default_version = "1.2.3",
29+
testonly = True,
30+
)
31+
32+
diff_test(
33+
name = "stamp_package_dependencies_test",
34+
file1 = ":stamp_package_dependencies",
35+
file2 = "package_dependencies_expected.json",
36+
)
37+
38+
stamp_package(
39+
name = "stamp_package_ignored_dependencies",
40+
package = "package_ignored_dependencies.json",
41+
default_version = "1.2.3",
42+
testonly = True,
43+
)
44+
45+
diff_test(
46+
name = "stamp_package_ignored_dependencies_test",
47+
file1 = ":stamp_package_ignored_dependencies",
48+
file2 = "package_ignored_dependencies_expected.json",
49+
)
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "test",
3+
"version": "0.0.0-PLACEHOLDER",
4+
"dependencies": {
5+
"rules_prerender": "0.0.0-PLACEHOLDER",
6+
"@rules_prerender/foo": "^0.0.0-PLACEHOLDER",
7+
"@rules_prerender/bar": "~0.0.0-PLACEHOLDER"
8+
},
9+
"devDependencies": {
10+
"rules_prerender": "0.0.0-PLACEHOLDER",
11+
"@rules_prerender/foo": "^0.0.0-PLACEHOLDER",
12+
"@rules_prerender/bar": "~0.0.0-PLACEHOLDER"
13+
},
14+
"peerDependencies": {
15+
"rules_prerender": "0.0.0-PLACEHOLDER",
16+
"@rules_prerender/foo": "^0.0.0-PLACEHOLDER",
17+
"@rules_prerender/bar": "~0.0.0-PLACEHOLDER"
18+
},
19+
"optionalDependencies": {
20+
"rules_prerender": "0.0.0-PLACEHOLDER",
21+
"@rules_prerender/foo": "^0.0.0-PLACEHOLDER",
22+
"@rules_prerender/bar": "~0.0.0-PLACEHOLDER"
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "test",
3+
"version": "1.2.3",
4+
"dependencies": {
5+
"rules_prerender": "1.2.3",
6+
"@rules_prerender/foo": "^1.2.3",
7+
"@rules_prerender/bar": "~1.2.3"
8+
},
9+
"devDependencies": {
10+
"rules_prerender": "1.2.3",
11+
"@rules_prerender/foo": "^1.2.3",
12+
"@rules_prerender/bar": "~1.2.3"
13+
},
14+
"peerDependencies": {
15+
"rules_prerender": "1.2.3",
16+
"@rules_prerender/foo": "^1.2.3",
17+
"@rules_prerender/bar": "~1.2.3"
18+
},
19+
"optionalDependencies": {
20+
"rules_prerender": "1.2.3",
21+
"@rules_prerender/foo": "^1.2.3",
22+
"@rules_prerender/bar": "~1.2.3"
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "test",
3+
"version": "0.0.0-PLACEHOLDER",
4+
"dependencies": {
5+
"rules_prerender": "0.0.0-PLACEHOLDER",
6+
"ignored-dep": "0.0.0-PLACEHOLDER",
7+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
8+
},
9+
"devDependencies": {
10+
"rules_prerender": "0.0.0-PLACEHOLDER",
11+
"ignored-dep": "0.0.0-PLACEHOLDER",
12+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
13+
},
14+
"peerDependencies": {
15+
"rules_prerender": "0.0.0-PLACEHOLDER",
16+
"ignored-dep": "0.0.0-PLACEHOLDER",
17+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
18+
},
19+
"optionalDependencies": {
20+
"rules_prerender": "0.0.0-PLACEHOLDER",
21+
"ignored-dep": "0.0.0-PLACEHOLDER",
22+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
23+
}
24+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"name": "test",
3+
"version": "1.2.3",
4+
"dependencies": {
5+
"rules_prerender": "1.2.3",
6+
"ignored-dep": "0.0.0-PLACEHOLDER",
7+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
8+
},
9+
"devDependencies": {
10+
"rules_prerender": "1.2.3",
11+
"ignored-dep": "0.0.0-PLACEHOLDER",
12+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
13+
},
14+
"peerDependencies": {
15+
"rules_prerender": "1.2.3",
16+
"ignored-dep": "0.0.0-PLACEHOLDER",
17+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
18+
},
19+
"optionalDependencies": {
20+
"rules_prerender": "1.2.3",
21+
"ignored-dep": "0.0.0-PLACEHOLDER",
22+
"@ignored/other-dep": "0.0.0-PLACEHOLDER"
23+
}
24+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "test",
3+
"version": "0.0.0-PLACEHOLDER"
4+
}

0 commit comments

Comments
 (0)