- Notifications
You must be signed in to change notification settings - Fork11.9k
feat(@angular/build): allow enabling Bazel sandbox plugin with esbuild#30654
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
Uh oh!
There was an error while loading.Please reload this page.
Conversation
For additional context: This will also be useful / needed for our usages of CLI inside Bazel for e.g. angular.dev |
d584b32
to04007f0
Compare9338465
to8722ef6
CompareI've had to change the original plugin to try for a |
Setting the new `ENABLE_BAZEL_SANDBOX_PLUGIN` environment variable to `true` or `1`during a build with the `esbuild` based builder will now inject a special plugin tomake `esbuild` compatible with Bazel builds in the output tree.When trying to integrate the `esbuild` based builder into Bazel with `rules_js` we foundthat it will incorrectly follow symlinks out of the sandbox. This is because Node.js basedtooling runs in the output tree to support canonical JS project directory structures. Theoutput tree will contain symlinks outside of the sandbox. Node tooling will generallyfollow these symlinks, which violates the rules of Bazel sandboxing. This can manifestin a wide variety of errors. One example we encountered with Angular compilationis that the symlinked browser entry point (e.g. `main.ts`) is outside of the range of`tsconfig.json` when the compiler follows the symlink.The plugin itself was originally written inhttps://github.com/aspect-build/rules_esbuild.The version container in this commit is a fork ofhttps://github.com/aspect-build/rules_esbuild/blob/e4e49d3354cbf7087c47ac9c5f2e6fe7f5e398d3/esbuild/private/plugins/bazel-sandbox.js.I've adapted the JS file to TypeScript and made no further changes.
8722ef6
to2ebbff4
Compare
PR Checklist
Please check to confirm your PR fulfills the following requirements:
Docs have been added / updated (for bug fixes / features)User facing documentation is intentionally omitted as this will be considered internal for now.
PR Type
What kind of change does this PR introduce?
What is the current behavior?
When trying to integrate the
esbuild
based builder into Bazel withrules_js
we found that it will incorrectly follow symlinks out of the sandbox. This is because Node.js based tooling runs in the output tree to support canonical JS project directory structures. The output tree will contain symlinks outside of the sandbox. Node tooling will generally follow these symlinks, which violates the rules of Bazel sandboxing. This can manifest in a wide variety of errors. One example we encountered with Angular compilation is that the symlinked browser entry point (e.g.main.ts
) is outside of the range oftsconfig.json
when the compiler follows the symlink.Issue Number: N/A
What is the new behavior?
Setting the new
ENABLE_BAZEL_SANDBOX_PLUGIN
environment variable totrue
or1
during a build with theesbuild
based builder will now inject a special plugin to makeesbuild
compatible with Bazel builds in the output tree.Does this PR introduce a breaking change?
Other information
The plugin itself was originally written inhttps://github.com/aspect-build/rules_esbuild. The version container in this commit is a fork ofhttps://github.com/aspect-build/rules_esbuild/blob/e4e49d3354cbf7087c47ac9c5f2e6fe7f5e398d3/esbuild/private/plugins/bazel-sandbox.js. I've adapted the JS file to TypeScript and made no further changes.