Skip to content
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 our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bazelisk does not work with integration tests and sandboxing #498

Closed
fweikert opened this issue Feb 25, 2019 · 0 comments
Closed

Bazelisk does not work with integration tests and sandboxing #498

fweikert opened this issue Feb 25, 2019 · 0 comments
Assignees
Labels

Comments

@fweikert
Copy link
Member

Calling Bazelisk from within an integration test used to fail since the sandbox blocked write access to Bazelisk's cache. #497 attempted to solve this problem by using the --sandbox_writable_path flag.

However, this flag actually requires the directory to exist, which isn't always the case (e.g. when running a custom Bazel binary inside the test):

ERROR: /workdir/BUILD:68:1: Couldn't build file bazel-srcs.tar: PackageTar bazel-srcs.tar failed: I/O exception during sandboxed execution: /home/bazel/.cache/bazelisk (No such file or directory)

Examples:

https://buildkite.com/bazel/google-bazel-presubmit/builds/15840#6bf81d8e-dbc2-4a23-9129-47a0955d87e7

https://buildkite.com/bazel/google-bazel-presubmit/builds/15838#6fdbdb7c-f60c-45ac-8c57-4f27b463ff35

@fweikert fweikert self-assigned this Feb 25, 2019
fweikert added a commit to fweikert/continuous-integration that referenced this issue Feb 26, 2019
We have replaced Bazel with Bazelisk on all CI workers. As a consequence, calling "bazel" from PATH will actually invoke Bazelisk, which in turn downloads the requested version of Bazel into a cache directory and then executes it.
This caused a problem when an integration test invoked Bazel from PATH (aka Bazelisk) while running inside a sandbox: The sandbox blocked access to the cache directory, thus failing the test.

bazelbuild#497 tried to address this problem by whitelisting the cache directory via the --sandbox_writable_path flag.
However, this flag requires the given path to exist, which was not the case when tests were running a Bazel binary from their runfiles instead of Bazelisk.

Since we cannot easily detect whether a test invokes Bazelisk or another Bazel binary, we're working around this problem by creating the Bazelisk cache directory before running any tests.

Fixes bazelbuild#498.
fweikert added a commit that referenced this issue Feb 26, 2019
* Explicitly create Bazelisk's cache directory.

We have replaced Bazel with Bazelisk on all CI workers. As a consequence, calling "bazel" from PATH will actually invoke Bazelisk, which in turn downloads the requested version of Bazel into a cache directory and then executes it.
This caused a problem when an integration test invoked Bazel from PATH (aka Bazelisk) while running inside a sandbox: The sandbox blocked access to the cache directory, thus failing the test.

#497 tried to address this problem by whitelisting the cache directory via the --sandbox_writable_path flag.
However, this flag requires the given path to exist, which was not the case when tests were running a Bazel binary from their runfiles instead of Bazelisk.

Since we cannot easily detect whether a test invokes Bazelisk or another Bazel binary, we're working around this problem by creating the Bazelisk cache directory before running any tests.

Fixes #498.
joeleba pushed a commit to joeleba/continuous-integration that referenced this issue Jun 17, 2019
* Explicitly create Bazelisk's cache directory.

We have replaced Bazel with Bazelisk on all CI workers. As a consequence, calling "bazel" from PATH will actually invoke Bazelisk, which in turn downloads the requested version of Bazel into a cache directory and then executes it.
This caused a problem when an integration test invoked Bazel from PATH (aka Bazelisk) while running inside a sandbox: The sandbox blocked access to the cache directory, thus failing the test.

bazelbuild#497 tried to address this problem by whitelisting the cache directory via the --sandbox_writable_path flag.
However, this flag requires the given path to exist, which was not the case when tests were running a Bazel binary from their runfiles instead of Bazelisk.

Since we cannot easily detect whether a test invokes Bazelisk or another Bazel binary, we're working around this problem by creating the Bazelisk cache directory before running any tests.

Fixes bazelbuild#498.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant