From 82dcb5a77565f35b4b2a59250949b4568978cdd7 Mon Sep 17 00:00:00 2001 From: alexeagle <47395+alexeagle@users.noreply.github.com> Date: Sat, 18 Oct 2025 14:12:30 +0000 Subject: [PATCH 1/5] aspect_rules_js@2.7.0 --- modules/aspect_rules_js/2.7.0/MODULE.bazel | 285 ++++++++++++++++++ .../aspect_rules_js/2.7.0/attestations.json | 17 ++ .../patches/module_dot_bazel_version.patch | 13 + modules/aspect_rules_js/2.7.0/presubmit.yml | 12 + modules/aspect_rules_js/2.7.0/source.json | 9 + modules/aspect_rules_js/metadata.json | 4 +- 6 files changed, 338 insertions(+), 2 deletions(-) create mode 100644 modules/aspect_rules_js/2.7.0/MODULE.bazel create mode 100644 modules/aspect_rules_js/2.7.0/attestations.json create mode 100644 modules/aspect_rules_js/2.7.0/patches/module_dot_bazel_version.patch create mode 100644 modules/aspect_rules_js/2.7.0/presubmit.yml create mode 100644 modules/aspect_rules_js/2.7.0/source.json diff --git a/modules/aspect_rules_js/2.7.0/MODULE.bazel b/modules/aspect_rules_js/2.7.0/MODULE.bazel new file mode 100644 index 00000000000..bc07f0b71c2 --- /dev/null +++ b/modules/aspect_rules_js/2.7.0/MODULE.bazel @@ -0,0 +1,285 @@ +"aspect-build/rules_js" + +module( + name = "aspect_rules_js", + bazel_compatibility = [">=6.0.0"], + compatibility_level = 1, + version = "2.7.0", +) + +# Lower-bounds (minimum) versions for direct runtime dependencies. +# Do not bump these unless rules_js requires a newer version to function. +bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") +bazel_dep(name = "aspect_tools_telemetry", version = "0.2.8") +bazel_dep(name = "bazel_features", version = "1.9.0") +bazel_dep(name = "bazel_skylib", version = "1.5.0") +bazel_dep(name = "platforms", version = "0.0.5") +bazel_dep(name = "rules_nodejs", version = "6.3.0") + +tel = use_extension("@aspect_tools_telemetry//:extension.bzl", "telemetry") +use_repo(tel, "aspect_tools_telemetry_report") + +node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") +use_repo(node, "nodejs_toolchains") +use_repo(node, "nodejs_darwin_amd64") +use_repo(node, "nodejs_darwin_arm64") +use_repo(node, "nodejs_linux_amd64") +use_repo(node, "nodejs_linux_arm64") +use_repo(node, "nodejs_linux_ppc64le") +use_repo(node, "nodejs_linux_s390x") +use_repo(node, "nodejs_windows_amd64") + +pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") +pnpm.pnpm( + name = "pnpm", + pnpm_version = "8.6.7", + pnpm_version_integrity = "sha512-vRIWpD/L4phf9Bk2o/O2TDR8fFoJnpYrp2TKqTIZF/qZ2/rgL3qKXzHofHgbXsinwMoSEigz28sqk3pQ+yMEQQ==", +) +use_repo(pnpm, "pnpm", "pnpm__links") + +bazel_lib_toolchains = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") +bazel_lib_toolchains.tar() +use_repo(bazel_lib_toolchains, "coreutils_toolchains") +use_repo(bazel_lib_toolchains, "yq_darwin_amd64") +use_repo(bazel_lib_toolchains, "yq_darwin_arm64") +use_repo(bazel_lib_toolchains, "yq_linux_amd64") +use_repo(bazel_lib_toolchains, "yq_linux_arm64") +use_repo(bazel_lib_toolchains, "yq_linux_ppc64le") +use_repo(bazel_lib_toolchains, "yq_linux_s390x") +use_repo(bazel_lib_toolchains, "yq_windows_amd64") +use_repo(bazel_lib_toolchains, "bsd_tar_toolchains") + +####### Dev dependencies ######## + +bazel_dep(name = "bazelrc-preset.bzl", version = "1.3.0", dev_dependency = True) +bazel_dep(name = "aspect_rules_lint", version = "1.1.0", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "8.0.1", dev_dependency = True) +bazel_dep(name = "rules_shell", version = "0.6.1", dev_dependency = True) + +# Overrides of non-dev deps for local testing using recent versions +archive_override( + module_name = "rules_nodejs", + integrity = "sha256-OY23vNcf28WAxvjReCrpn1JQeRFypf/jHS+dgTjzOC4=", + strip_prefix = "rules_nodejs-7cbb1fb5378fb4739e4d9698a14abd9eada900f0", + urls = [ + "https://github.com/bazel-contrib/rules_nodejs/archive/7cbb1fb5378fb4739e4d9698a14abd9eada900f0.tar.gz", + ], +) + +host = use_extension( + "@aspect_bazel_lib//lib:extensions.bzl", + "host", + dev_dependency = True, +) +host.host() +use_repo(host, "aspect_bazel_lib_host") + +node_dev = use_extension( + "@rules_nodejs//nodejs:extensions.bzl", + "node", + dev_dependency = True, +) +use_repo(node_dev, "node16_linux_amd64") +use_repo(node_dev, "node16_darwin_arm64") +use_repo(node_dev, "node16_darwin_amd64") +use_repo(node_dev, "node16_linux_arm64") +use_repo(node_dev, "node16_linux_s390x") +use_repo(node_dev, "node16_linux_ppc64le") +use_repo(node_dev, "node16_windows_amd64") +use_repo(node_dev, "node18_linux_amd64") +use_repo(node_dev, "node18_darwin_arm64") +use_repo(node_dev, "node18_darwin_amd64") +use_repo(node_dev, "node18_linux_arm64") +use_repo(node_dev, "node18_linux_s390x") +use_repo(node_dev, "node18_linux_ppc64le") +use_repo(node_dev, "node18_windows_amd64") +use_repo(node_dev, "node20_linux_amd64") +use_repo(node_dev, "node20_darwin_arm64") +use_repo(node_dev, "node20_darwin_amd64") +use_repo(node_dev, "node20_linux_arm64") +use_repo(node_dev, "node20_linux_s390x") +use_repo(node_dev, "node20_linux_ppc64le") +use_repo(node_dev, "node20_windows_amd64") +use_repo(node_dev, "node22_linux_amd64") +use_repo(node_dev, "node22_darwin_arm64") +use_repo(node_dev, "node22_darwin_amd64") +use_repo(node_dev, "node22_linux_arm64") +use_repo(node_dev, "node22_linux_s390x") +use_repo(node_dev, "node22_linux_ppc64le") +use_repo(node_dev, "node22_windows_amd64") +use_repo(node_dev, "node24_linux_amd64") +use_repo(node_dev, "node24_darwin_arm64") +use_repo(node_dev, "node24_darwin_amd64") +use_repo(node_dev, "node24_linux_arm64") +use_repo(node_dev, "node24_linux_s390x") +use_repo(node_dev, "node24_linux_ppc64le") +use_repo(node_dev, "node24_windows_amd64") +node_dev.toolchain(node_version = "18.20.4") +node_dev.toolchain( + name = "node16", + node_version = "16.20.0", +) +node_dev.toolchain( + name = "node18", + node_version = "18.20.4", +) +node_dev.toolchain( + name = "node20", + node_version = "20.17.0", +) +node_dev.toolchain( + name = "node22", + node_version = "22.20.0", +) +node_dev.toolchain( + name = "node24", + node_version = "24.9.0", +) + +############################################ +# npm dependencies used by examples + +npm = use_extension( + "@aspect_rules_js//npm:extensions.bzl", + "npm", + dev_dependency = True, +) +npm.npm_translate_lock( + name = "npm", + bins = { + # derived from "bin" attribute in node_modules/typescript/package.json + "typescript": [ + "tsc=./bin/tsc", + "tsserver=./bin/tsserver", + ], + }, + custom_postinstalls = { + "@aspect-test/c": "echo moo > cow.txt", + "@aspect-test/c@2.0.2": "echo mooo >> cow.txt", + "pngjs": "chmod -R a+X *", # fixes malformed tarball content file permissions in this package after extraction (see https://github.com/aspect-build/rules_js/issues/1637 for more details) + }, + data = [ + "//:examples/npm_deps/patches/meaning-of-life@1.0.0-pnpm.patch", + "//:package.json", + "//:pnpm-workspace.yaml", + "//examples/js_binary:package.json", + "//examples/js_lib_pkg/a:package.json", + "//examples/js_lib_pkg/b:package.json", + "//examples/linked_consumer:package.json", + "//examples/linked_empty_node_modules:package.json", + "//examples/linked_lib:package.json", + "//examples/linked_pkg:package.json", + "//examples/macro:package.json", + "//examples/nextjs:package.json", + "//examples/npm_deps:package.json", + "//examples/npm_package/libs/lib_a:package.json", + "//examples/npm_package/packages/pkg_a:package.json", + "//examples/npm_package/packages/pkg_b:package.json", + "//examples/npm_package/packages/pkg_d:package.json", + "//examples/npm_package/packages/pkg_e:package.json", + "//examples/runfiles:package.json", + "//examples/stack_traces:package.json", + "//examples/webpack_cli:package.json", + "//js/private/coverage/bundle:package.json", + "//js/private/devserver/src:package.json", + "//js/private/test/image:package.json", + "//js/private/test/js_run_devserver:package.json", + "//js/private/worker/src:package.json", + "//npm/private/test:package.json", + "//npm/private/test:vendored/lodash-4.17.21.tgz", + "//npm/private/test/npm_package:package.json", + "//npm/private/test/npm_package_publish:package.json", + "//npm/private/test/vendored/is-odd:package.json", + "//npm/private/test/vendored/semver-max:package.json", + ], + generate_bzl_library_targets = True, + lifecycle_hooks = { + # We fetch @kubernetes/client-node from source and it has a `prepare` lifecycle hook that needs to be run + # which runs the `build` package.json script: https://github.com/kubernetes-client/javascript/blob/fc681991e61c6808dd26012a2331f83671a11218/package.json#L28. + # Here we run run build so we just run `tsc` instead of `npm run build` which ends up just running `tsc`. + "@kubernetes/client-node": ["build"], + # 'install' hook fails as it assumes the following path to `node-pre-gyp`: ./node_modules/.bin/node-pre-gyp + # https://github.com/stultuss/protoc-gen-grpc-ts/blob/53d52a9d0e1fe3cbe930dec5581eca89b3dde807/package.json#L28 + "protoc-gen-grpc@2.0.3": [], + }, + lifecycle_hooks_execution_requirements = { + "*": [ + "no-sandbox", + ], + # If @kubernetes/client-node is not sandboxed, will fail with + # ``` + # src/azure_auth.ts(97,43): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments. + # src/azure_auth.ts(98,34): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments. + # src/gcp_auth.ts(93,43): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments. + # src/gcp_auth.ts(94,34): error TS2575: No overload expects 2 arguments, but overloads do exist that expect either 1 or 4 arguments. + # ``` + # since a `jsonpath-plus@7.2.0` that is newer then the transitive dep `jsonpath-plus@0.19.0` is found outside of the sandbox that + # includes typings that don't match the 0.19.0 "any" usage. + "@kubernetes/client-node": [], + "@figma/nodegit": [ + "no-sandbox", + "requires-network", + ], + "esbuild": [ + "no-sandbox", + "requires-network", + ], + "segfault-handler": [ + "no-sandbox", + "requires-network", + ], + "puppeteer": [ + "no-remote", + "no-sandbox", + "requires-network", + ], + }, + npmrc = "//:.npmrc", + package_visibility = { + "unused": ["//visibility:private"], + "@mycorp/pkg-a": ["//examples:__subpackages__"], + }, + pnpm_lock = "//:pnpm-lock.yaml", + public_hoist_packages = { + # Instructs the linker to hoist the ms@2.1.3 npm package to `node_modules/ms` in the `examples/npm_deps` package. + # Similar to adding `public-hoist-pattern[]=ms` in .npmrc but with control over which version to hoist and where + # to hoist it. This hoisted package can be referenced by the label `//examples/npm_deps:node_modules/ms` same as + # other direct dependencies in the `examples/npm_deps/package.json`. + "ms@2.1.3": ["examples/npm_deps"], + }, + update_pnpm_lock = True, + verify_node_modules_ignored = "//:.bazelignore", + verify_patches = "//examples/npm_deps/patches:patches", +) + +# Configure package exclusions using tag class +npm.npm_exclude_package_contents( + package = "chalk", + patterns = ["**/README*"], +) +use_repo( + npm, + "npm", + "npm__fsevents__2.3.2__links", + "npm__rollup__2.70.2", + "npm__rollup__2.70.2__links", + "npm__unused__0.2.2__links", + "npm__webpack-bundle-analyzer__4.5.0_bufferutil_4.0.8", +) + +# As an example, manually import a package using explicit coordinates. +# Just a demonstration of the syntax de-sugaring. +npm.npm_import( + name = "acorn__8.4.0", + bins = {"acorn": "./bin/acorn"}, + integrity = "sha512-ULr0LDaEqQrMFGyQ3bhJkLsbtrQ8QibAseGZeaSUiT/6zb9IvIkomWHJIvgvwad+hinRAgsI51JcWk2yvwyL+w==", + package = "acorn", + # Root package where to link the package store + root_package = "", + version = "8.4.0", +) +use_repo( + npm, + "acorn__8.4.0", + "acorn__8.4.0__links", +) diff --git a/modules/aspect_rules_js/2.7.0/attestations.json b/modules/aspect_rules_js/2.7.0/attestations.json new file mode 100644 index 00000000000..a7ed2a4e06e --- /dev/null +++ b/modules/aspect_rules_js/2.7.0/attestations.json @@ -0,0 +1,17 @@ +{ + "mediaType": "application/vnd.build.bazel.registry.attestation+json;version=1.0.0", + "attestations": { + "source.json": { + "url": "https://github.com/aspect-build/rules_js/releases/download/v2.7.0/source.json.intoto.jsonl", + "integrity": "sha256-oivjTduO/5ooZh4WJFaOad5PNcFqjZRhYVi+3hMEK90=" + }, + "MODULE.bazel": { + "url": "https://github.com/aspect-build/rules_js/releases/download/v2.7.0/MODULE.bazel.intoto.jsonl", + "integrity": "sha256-xno5JC1MBm26iN75zguMlnU4mAN2jDFjwZzVHMolySI=" + }, + "rules_js-v2.7.0.tar.gz": { + "url": "https://github.com/aspect-build/rules_js/releases/download/v2.7.0/rules_js-v2.7.0.tar.gz.intoto.jsonl", + "integrity": "sha256-G9YsBlzfKMA+efga6K6gEQjU1oTtEW3ZD9sSbF5z9RQ=" + } + } +} diff --git a/modules/aspect_rules_js/2.7.0/patches/module_dot_bazel_version.patch b/modules/aspect_rules_js/2.7.0/patches/module_dot_bazel_version.patch new file mode 100644 index 00000000000..3639b696882 --- /dev/null +++ b/modules/aspect_rules_js/2.7.0/patches/module_dot_bazel_version.patch @@ -0,0 +1,13 @@ +=================================================================== +--- a/MODULE.bazel ++++ b/MODULE.bazel +@@ -3,8 +3,9 @@ + module( + name = "aspect_rules_js", + bazel_compatibility = [">=6.0.0"], + compatibility_level = 1, ++ version = "2.7.0", + ) + + # Lower-bounds (minimum) versions for direct runtime dependencies. + # Do not bump these unless rules_js requires a newer version to function. diff --git a/modules/aspect_rules_js/2.7.0/presubmit.yml b/modules/aspect_rules_js/2.7.0/presubmit.yml new file mode 100644 index 00000000000..33b271c8641 --- /dev/null +++ b/modules/aspect_rules_js/2.7.0/presubmit.yml @@ -0,0 +1,12 @@ +bcr_test_module: + module_path: 'e2e/bzlmod' + matrix: + bazel: ['rolling', '8.x', '7.x', '6.x'] + platform: ['debian10', 'macos', 'ubuntu2004', 'windows'] + tasks: + run_tests: + name: 'Run test module' + bazel: ${{ bazel }} + platform: ${{ platform }} + test_targets: + - '//...' diff --git a/modules/aspect_rules_js/2.7.0/source.json b/modules/aspect_rules_js/2.7.0/source.json new file mode 100644 index 00000000000..cda3336ecaa --- /dev/null +++ b/modules/aspect_rules_js/2.7.0/source.json @@ -0,0 +1,9 @@ +{ + "integrity": "sha256-ndUNO6yy/h1KchCYmBtwKQ/prFbTYleR9JDSq5TyysY=", + "strip_prefix": "rules_js-2.7.0", + "url": "https://github.com/aspect-build/rules_js/releases/download/v2.7.0/rules_js-v2.7.0.tar.gz", + "patches": { + "module_dot_bazel_version.patch": "sha256-3hzQC2y9jYeC0QNEDjGr50a7n4wRB35YHa9YQ16C9Eo=" + }, + "patch_strip": 1 +} diff --git a/modules/aspect_rules_js/metadata.json b/modules/aspect_rules_js/metadata.json index 282b4e9ef4d..cabd153b499 100644 --- a/modules/aspect_rules_js/metadata.json +++ b/modules/aspect_rules_js/metadata.json @@ -1,5 +1,4 @@ { - "homepage": "https://docs.aspect.build/rules/aspect_rules_js", "maintainers": [ { "name": "Alex Eagle", @@ -145,7 +144,8 @@ "2.5.0", "2.6.0", "2.6.1", - "2.6.2" + "2.6.2", + "2.7.0" ], "yanked_versions": { "2.3.2": "It contains a bug that breaks the js_image_layer rule: https://github.com/aspect-build/rules_js/pull/2145" From 5d1c1fa7838a867b669eb8d198c2408f6c306ffc Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Sat, 18 Oct 2025 07:50:35 -0700 Subject: [PATCH 2/5] homepage shouldn't be required --- metadata.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.schema.json b/metadata.schema.json index 5bbfa86366f..c38ec57ddc3 100644 --- a/metadata.schema.json +++ b/metadata.schema.json @@ -63,5 +63,5 @@ } }, "additionalProperties": false, - "required": ["homepage", "versions", "maintainers", "repository"] + "required": ["versions", "maintainers", "repository"] } From 33f14db98fac2c2c2b9b4ce20759caaaa908c50d Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Wed, 22 Oct 2025 06:08:15 -0700 Subject: [PATCH 3/5] Update metadata.schema.json --- metadata.schema.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.schema.json b/metadata.schema.json index c38ec57ddc3..5bbfa86366f 100644 --- a/metadata.schema.json +++ b/metadata.schema.json @@ -63,5 +63,5 @@ } }, "additionalProperties": false, - "required": ["versions", "maintainers", "repository"] + "required": ["homepage", "versions", "maintainers", "repository"] } From f190ebf7059f055b2d05cae9dfac10706c388483 Mon Sep 17 00:00:00 2001 From: Alex Eagle Date: Wed, 22 Oct 2025 06:09:24 -0700 Subject: [PATCH 4/5] Add homepage URL to metadata.json --- modules/aspect_rules_js/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/aspect_rules_js/metadata.json b/modules/aspect_rules_js/metadata.json index cabd153b499..ba36a6a6708 100644 --- a/modules/aspect_rules_js/metadata.json +++ b/modules/aspect_rules_js/metadata.json @@ -1,4 +1,5 @@ { + "homepage": "https://github.com/aspect-build/rules_js", "maintainers": [ { "name": "Alex Eagle", From 7439d8797cea43ff9934a452ffba58caf6432202 Mon Sep 17 00:00:00 2001 From: Jason Bedard Date: Wed, 22 Oct 2025 09:39:38 -0700 Subject: [PATCH 5/5] Remove 'rolling' from bazel matrix in presubmit.yml --- modules/aspect_rules_js/2.7.0/presubmit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/aspect_rules_js/2.7.0/presubmit.yml b/modules/aspect_rules_js/2.7.0/presubmit.yml index 33b271c8641..34fb5a85061 100644 --- a/modules/aspect_rules_js/2.7.0/presubmit.yml +++ b/modules/aspect_rules_js/2.7.0/presubmit.yml @@ -1,7 +1,7 @@ bcr_test_module: module_path: 'e2e/bzlmod' matrix: - bazel: ['rolling', '8.x', '7.x', '6.x'] + bazel: ['8.x', '7.x', '6.x'] platform: ['debian10', 'macos', 'ubuntu2004', 'windows'] tasks: run_tests: