Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 30 additions & 10 deletions js/private/js_image_layer.mjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

43 changes: 41 additions & 2 deletions js/private/test/image/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
load("@bazel_lib//lib:transitions.bzl", "platform_transition_filegroup")
load("@npm//:defs.bzl", "npm_link_all_packages")
load("//js:defs.bzl", "js_binary")
load(":asserts.bzl", "assert_checksum", "assert_js_image_layer_listings", "make_js_image_layer")
load(":asserts.bzl", "assert_checksum", "assert_js_image_layer_listings", "make_js_image_layer", "symlinked_data")

npm_link_all_packages()

Expand Down Expand Up @@ -116,7 +116,46 @@ assert_js_image_layer_listings(
js_image_layer = ":custom_layers_nomatch",
)

# Case 5: transition the edge instead of just the binary
# Case 5: symlinks in runfiles outside of node_modules
# bazel run :symlinks_test_update_all
symlinked_data(
name = "symlinked_data",
)

js_binary(
name = "bin_symlinks",
# Keep the checked-in symlinks under data/ as real symlinks instead of
# copying their resolved content into bazel-out, so js_image_layer can
# actually observe and preserve them.
copy_data_to_bin = False,
data = [
"checked_in_symlinks/nested/nested_link.txt",
"checked_in_symlinks/real.txt",
"checked_in_symlinks/sibling_link.txt",
":node_modules",
":symlinked_data",
],
entry_point = "main.js",
)

make_js_image_layer(
name = "symlinks",
binary = ":bin_symlinks",
platform = ":linux_amd64",
# Generated symlinks (declare_symlink) under symlinked_data/ and checked-in
# source symlinks under checked_in_symlinks/ are both preserved as symlinks
# in the layer. The latter requires copy_data_to_bin = False on the binary
# so the source symlinks survive (un-dereferenced) into runfiles.
preserve_symlinks = "node_modules|/symlinked_data/|/checked_in_symlinks/",
root = "/app",
)

assert_js_image_layer_listings(
name = "symlinks_test",
js_image_layer = ":symlinks",
)

# Case 6: transition the edge instead of just the binary
# bazel run :custom_owner_test_update_all
make_js_image_layer(
name = "js_image_layer_untransitioned",
Expand Down
24 changes: 24 additions & 0 deletions js/private/test/image/asserts.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,30 @@
load("@bazel_lib//lib:write_source_files.bzl", "write_source_file", "write_source_files")
load("//js:defs.bzl", "js_image_layer")

def _symlinked_data_impl(ctx):
# A real file in bazel-out that serves as the symlink target.
real_file = ctx.actions.declare_file("{}/real.txt".format(ctx.label.name))
ctx.actions.write(real_file, "real\n")

# Sibling symlink pointing to real.txt in the same directory.
sibling_link = ctx.actions.declare_symlink("{}/sibling_link.txt".format(ctx.label.name))
ctx.actions.symlink(output = sibling_link, target_path = "real.txt")

# Nested symlink pointing back to real.txt via a relative path.
nested_link = ctx.actions.declare_symlink("{}/nested/nested_link.txt".format(ctx.label.name))
ctx.actions.symlink(output = nested_link, target_path = "../real.txt")

files = [real_file, sibling_link, nested_link]
return [DefaultInfo(
files = depset(files),
runfiles = ctx.runfiles(files = files),
)]

symlinked_data = rule(
implementation = _symlinked_data_impl,
doc = "Test helper that produces a real file plus two symlinks pointing to it.",
)

# buildifier: disable=function-docstring
def assert_tar_listing(name, actual, expected):
# Either of these two file sizes may be observed on a file like /js/private/test/image/bin
Expand Down
1 change: 1 addition & 0 deletions js/private/test/image/checked_in_symlinks/real.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
checked-in real
1 change: 1 addition & 0 deletions js/private/test/image/checked_in_symlinks/sibling_link.txt
31 changes: 31 additions & 0 deletions js/private/test/image/symlinks_test_app.listing
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/
-r-xr-xr-x 0 0 0 xxxxx Jan 1 1970 ./app/js/private/test/image/bin_symlinks
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-a/
-r-xr-xr-x 0 0 0 106 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-a/package.json
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-d/
-r-xr-xr-x 0 0 0 128 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-d/package.json
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/bin_symlinks_/
-r-xr-xr-x 0 0 0 xxxxx Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/bin_symlinks_/bin_symlinks
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/bin_symlinks_node_bin/
-r-xr-xr-x 0 0 0 133 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/bin_symlinks_node_bin/node
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/checked_in_symlinks/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/checked_in_symlinks/nested/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/checked_in_symlinks/nested/nested_link.txt -> ../real.txt
-r-xr-xr-x 0 0 0 16 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/checked_in_symlinks/real.txt
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/checked_in_symlinks/sibling_link.txt -> real.txt
-r-xr-xr-x 0 0 0 20 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/main.js
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/symlinked_data/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/symlinked_data/nested/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/symlinked_data/nested/nested_link.txt -> ../real.txt
-r-xr-xr-x 0 0 0 5 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/symlinked_data/real.txt
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/symlinked_data/sibling_link.txt -> real.txt
17 changes: 17 additions & 0 deletions js/private/test/image/symlinks_test_node.listing
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/node-patches/
-r-xr-xr-x 0 0 0 35357 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/node-patches/fs.cjs
-r-xr-xr-x 0 0 0 1460 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/node-patches/register.cjs
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/rules_nodejs~~node~nodejs_linux_amd64/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/rules_nodejs~~node~nodejs_linux_amd64/bin/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/rules_nodejs~~node~nodejs_linux_amd64/bin/nodejs/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/rules_nodejs~~node~nodejs_linux_amd64/bin/nodejs/bin/
-r-xr-xr-x 0 0 0 123405064 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/rules_nodejs~~node~nodejs_linux_amd64/bin/nodejs/bin/node
22 changes: 22 additions & 0 deletions js/private/test/image/symlinks_test_node_modules.listing
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-a/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-a/node_modules/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-a/node_modules/uuid -> ../../../../../node_modules/.aspect_rules_js/uuid@8.3.2/node_modules/uuid
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-d/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-d/node_modules/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image-fixture-d/node_modules/uuid -> ../../../../../node_modules/.aspect_rules_js/uuid@8.3.2/node_modules/uuid
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/node_modules/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/node_modules/@image-test/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/node_modules/@image-test/a -> ../../../../../../node_modules/.aspect_rules_js/@image-test+a@0.0.0/node_modules/@image-test/a
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/node_modules/@image-test/d -> ../../../../../../node_modules/.aspect_rules_js/@image-test+d@0.0.0/node_modules/@image-test/d
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/js/private/test/image/node_modules/acorn -> ../../../../../node_modules/.aspect_rules_js/acorn@8.12.1/node_modules/acorn
17 changes: 17 additions & 0 deletions js/private/test/image/symlinks_test_package_store_1p.listing
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+a@0.0.0/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+a@0.0.0/node_modules/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+a@0.0.0/node_modules/@image-test/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+a@0.0.0/node_modules/@image-test/a -> ../../../../../js/private/test/image-fixture-a
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+d@0.0.0/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+d@0.0.0/node_modules/
drwxr-xr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+d@0.0.0/node_modules/@image-test/
lrwxrwxr-x 0 0 0 0 Jan 1 1970 ./app/js/private/test/image/bin_symlinks.runfiles/_main/node_modules/.aspect_rules_js/@image-test+d@0.0.0/node_modules/@image-test/d -> ../../../../../js/private/test/image-fixture-d
Loading
Loading